diff --git a/pom.xml b/pom.xml index 01542659..b24b1b8b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,11 +6,11 @@ com.craftaro FabledSkyBlock - 3.0.6 + 3.1.0 FabledSkyBlock Bring your server's SkyBlock experience to the next level with the ability to fine-tune island settings, create custom islands, view leaderboards, and much more - https://craftaro.com/marketplace/product/17 + https://songoda.com/product/fabledskyblock-13 8 @@ -25,7 +25,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.6.0 @@ -69,10 +69,10 @@ false **/nms/v*/** + **/third_party/net/kyori/** **/third_party/org/apache/** - **/third_party/net/kyori/** **/third_party/com/zaxxer/** **/third_party/org/jooq/** **/third_party/org/mariadb/** @@ -139,7 +139,7 @@ com.craftaro CraftaroCore - 3.0.0-SNAPSHOT + 3.5.0-SNAPSHOT compile @@ -174,7 +174,7 @@ me.clip placeholderapi - 2.11.5 + 2.11.6 provided diff --git a/src/main/java/com/craftaro/skyblock/SkyBlock.java b/src/main/java/com/craftaro/skyblock/SkyBlock.java index 4c441b5d..27e8af42 100644 --- a/src/main/java/com/craftaro/skyblock/SkyBlock.java +++ b/src/main/java/com/craftaro/skyblock/SkyBlock.java @@ -2,13 +2,12 @@ package com.craftaro.skyblock; import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerProject; -import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.configuration.Config; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.HologramManager; import com.craftaro.core.hooks.LogManager; -import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.api.SkyBlockAPI; import com.craftaro.skyblock.ban.BanManager; import com.craftaro.skyblock.bank.BankManager; @@ -71,6 +70,7 @@ import com.craftaro.skyblock.usercache.UserCacheManager; import com.craftaro.skyblock.visit.VisitManager; import com.craftaro.skyblock.visit.VisitTask; import com.craftaro.skyblock.world.WorldManager; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -81,9 +81,7 @@ import org.bukkit.plugin.PluginManager; import org.jetbrains.annotations.NotNull; import java.io.File; -import java.util.HashSet; import java.util.List; -import java.util.Set; public class SkyBlock extends SongodaPlugin { private FileManager fileManager; @@ -154,17 +152,18 @@ public class SkyBlock extends SongodaPlugin { @Override public void onPluginEnable() { - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_20) || ServerVersion.isServerVersionBelow(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_20) || MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_8)) { this.getLogger().warning("This Minecraft version is not officially supported."); } - if (this.paper = ServerProject.isServer(ServerProject.PAPER)) { + this.paper = ServerProject.isServer(ServerProject.PAPER); + if (this.paper) { try { Bukkit.spigot().getClass().getMethod("getPaperConfig"); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16)) { this.paperAsync = true; } else { - this.paperAsync = ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) && + this.paperAsync = MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13) && Bukkit.spigot().getPaperConfig().getBoolean("settings.async-chunks.enable", false); } } catch (NoSuchMethodException ignored) { @@ -266,7 +265,7 @@ public class SkyBlock extends SongodaPlugin { pluginManager.registerEvents(new FallBreakListeners(this), this); pluginManager.registerEvents(new WorldListeners(this), this); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { pluginManager.registerEvents(new SpongeListeners(this), this); } diff --git a/src/main/java/com/craftaro/skyblock/blockscanner/BlockScanner.java b/src/main/java/com/craftaro/skyblock/blockscanner/BlockScanner.java index 5f59f0e8..956e13f8 100644 --- a/src/main/java/com/craftaro/skyblock/blockscanner/BlockScanner.java +++ b/src/main/java/com/craftaro/skyblock/blockscanner/BlockScanner.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.blockscanner; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.utils.world.WorldUtil; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -272,7 +273,7 @@ public final class BlockScanner extends BukkitRunnable { for (int z = initZ; z <= lastZ; z++) { for (int y = scanY; y < world.getMaxHeight(); y++) { final Optional type = CompatibleMaterial.getMaterial( - ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) + MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13) ? shot.getSnapshot().getBlockType(x, y, z) : MaterialIDHelper.getLegacyMaterial(getBlockTypeID(shot, x, y, z))); diff --git a/src/main/java/com/craftaro/skyblock/blockscanner/MaterialIDHelper.java b/src/main/java/com/craftaro/skyblock/blockscanner/MaterialIDHelper.java index 44d4d0df..d45b48be 100644 --- a/src/main/java/com/craftaro/skyblock/blockscanner/MaterialIDHelper.java +++ b/src/main/java/com/craftaro/skyblock/blockscanner/MaterialIDHelper.java @@ -1,6 +1,6 @@ package com.craftaro.skyblock.blockscanner; -import com.craftaro.core.compatibility.ServerVersion; +import com.craftaro.core.compatibility.MajorServerVersion; import org.bukkit.Material; import java.util.HashMap; @@ -15,7 +15,7 @@ public final class MaterialIDHelper { static { MATERIALS = new HashMap<>(); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { for (Material type : Material.values()) { if (type.isLegacy()) { MATERIALS.put(type.getId(), type); diff --git a/src/main/java/com/craftaro/skyblock/config/FileManager.java b/src/main/java/com/craftaro/skyblock/config/FileManager.java index 2aed557e..e535fb99 100644 --- a/src/main/java/com/craftaro/skyblock/config/FileManager.java +++ b/src/main/java/com/craftaro/skyblock/config/FileManager.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.config; +import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.IslandWorld; import com.google.common.io.ByteStreams; @@ -93,17 +94,28 @@ public class FileManager { if (fileName.equals("structures/default.structure")) { configFile.delete(); - try { - configFile.createNewFile(); - } catch (IOException ex) { - ex.printStackTrace(); - } - try (InputStream is = this.plugin.getResource(fileName); OutputStream os = Files.newOutputStream(configFile.toPath())) { - if (is != null) { - ByteStreams.copy(is, os); + if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_20_5)) { + //Copy default_1_20_5.structure instead of default.structure + try (InputStream is = this.plugin.getResource("structures/default_1_20_5.structure"); OutputStream os = Files.newOutputStream(configFile.toPath())) { + if (is != null) { + ByteStreams.copy(is, os); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } else { + try { + configFile.createNewFile(); + } catch (IOException ex) { + ex.printStackTrace(); + } + try (InputStream is = this.plugin.getResource(fileName); OutputStream os = Files.newOutputStream(configFile.toPath())) { + if (is != null) { + ByteStreams.copy(is, os); + } + } catch (IOException ex) { + ex.printStackTrace(); } - } catch (IOException ex) { - ex.printStackTrace(); } continue; } diff --git a/src/main/java/com/craftaro/skyblock/generator/GeneratorManager.java b/src/main/java/com/craftaro/skyblock/generator/GeneratorManager.java index 569b57a5..02b6c61b 100644 --- a/src/main/java/com/craftaro/skyblock/generator/GeneratorManager.java +++ b/src/main/java/com/craftaro/skyblock/generator/GeneratorManager.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.generator; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -109,7 +110,7 @@ public class GeneratorManager { @SuppressWarnings("deprecation") private int getLiquidLevel(Block block) { - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12) && block.getState().getBlockData() instanceof Levelled) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12) && block.getState().getBlockData() instanceof Levelled) { Levelled levelled = (Levelled) block.getState().getBlockData(); return levelled.getLevel(); } else { @@ -131,7 +132,7 @@ public class GeneratorManager { this.plugin.getSoundManager().playSound(block.getLocation(), XSound.BLOCK_FIRE_EXTINGUISH, 1, 10); - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { XBlock.setType(block, materials); } else { ItemStack is = materials.parseItem(); diff --git a/src/main/java/com/craftaro/skyblock/gui/coop/GuiCoop.java b/src/main/java/com/craftaro/skyblock/gui/coop/GuiCoop.java index b1d4c32d..7ee16d77 100644 --- a/src/main/java/com/craftaro/skyblock/gui/coop/GuiCoop.java +++ b/src/main/java/com/craftaro/skyblock/gui/coop/GuiCoop.java @@ -3,10 +3,9 @@ package com.craftaro.skyblock.gui.coop; import com.craftaro.core.gui.AnvilGui; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.core.utils.TextUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; @@ -19,7 +18,6 @@ import com.craftaro.skyblock.sound.SoundManager; import com.craftaro.skyblock.utils.player.OfflinePlayer; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -28,6 +26,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class GuiCoop extends Gui { private final SkyBlock plugin; @@ -155,7 +154,18 @@ public class GuiCoop extends Gui { targetPlayerTexture = new String[]{null, null}; } } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + ItemStack phead; + if (targetPlayerTexture.length >= 1 && targetPlayerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(targetPlayerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(uuid).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + ItemMeta pheadmeta = phead.getItemMeta(); if (pheadmeta != null) { pheadmeta.setDisplayName(TextUtils.formatText(this.languageLoad.getString("Menu.Coop.Item.Coop.Displayname") diff --git a/src/main/java/com/craftaro/skyblock/gui/wip/GuiBans.java b/src/main/java/com/craftaro/skyblock/gui/wip/GuiBans.java index 432b8dd8..a4c43245 100644 --- a/src/main/java/com/craftaro/skyblock/gui/wip/GuiBans.java +++ b/src/main/java/com/craftaro/skyblock/gui/wip/GuiBans.java @@ -2,10 +2,9 @@ package com.craftaro.skyblock.gui.wip; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.core.utils.TextUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; @@ -15,7 +14,6 @@ import com.craftaro.skyblock.utils.player.OfflinePlayer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -23,6 +21,7 @@ import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class GuiBans extends Gui { private final PlayerDataManager playerDataManager; @@ -119,7 +118,17 @@ public class GuiBans extends Gui { } } - ItemStack is = SkullUtils.getSkull(targetPlayer.getUniqueId()); + ItemStack is; + if (targetPlayerTexture.length >= 1 && targetPlayerTexture[0] != null) { + is = SkullItemCreator.byTextureValue(targetPlayerTexture[0]); + } else { + try { + is = SkullItemCreator.byUuid(uuid).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + ItemMeta im = is.getItemMeta(); if (im != null) { im.setDisplayName(this.languageLoad.getString("Menu.Bans.Item.Ban.Displayname") diff --git a/src/main/java/com/craftaro/skyblock/island/Island.java b/src/main/java/com/craftaro/skyblock/island/Island.java index 0866d0ef..522f0d07 100644 --- a/src/main/java/com/craftaro/skyblock/island/Island.java +++ b/src/main/java/com/craftaro/skyblock/island/Island.java @@ -46,6 +46,7 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; @@ -60,6 +61,7 @@ public class Island { private final List islandLocations = new ArrayList<>(); private final Map coopPlayers = new HashMap<>(); private final Set whitelistedPlayers = new HashSet<>(); + private final Map> roleCache = new HashMap<>(); private UUID islandUUID; private UUID ownerUUID; @@ -203,13 +205,14 @@ public class Island { for (BasicPermission permission : allPermissions) { if (settingsDataConfig == null || settingsDataConfig.getFileConfiguration() - .getString("Settings." + roleList.getFriendlyName().toUpperCase() + "." + permission.getName()) == null) { + .getString("Settings." + roleList.getFriendlyName().toUpperCase(Locale.US) + "." + permission.getName()) == null) { + //save default value if not exist permissions.add( new IslandPermission(permission, this.plugin.getSettings() - .getBoolean("Settings." + roleList.getFriendlyName().toUpperCase() + "." + permission.getName(), true))); + .getBoolean("Settings." + roleList.getFriendlyName().toUpperCase(Locale.US) + "." + permission.getName(), permission.getDefaultValues().get(roleList)))); } else { permissions.add(new IslandPermission(permission, settingsDataConfig.getFileConfiguration() - .getBoolean("Settings." + roleList.getFriendlyName().toUpperCase() + "." + permission.getName(), true))); + .getBoolean("Settings." + roleList.getFriendlyName().toUpperCase(Locale.US) + "." + permission.getName(), true))); } } @@ -597,6 +600,11 @@ public class Island { } public Set getRole(IslandRole role) { + + if (roleCache.containsKey(role)) { + return new HashSet<>(roleCache.get(role)); // Return a copy to avoid external modification + } + Set islandRoles = new HashSet<>(); if (role == IslandRole.OWNER) { @@ -613,6 +621,8 @@ public class Island { } } + roleCache.put(role, islandRoles); + return islandRoles; } @@ -671,6 +681,9 @@ public class Island { getVisit().setMembers(getRole(IslandRole.MEMBER).size() + getRole(IslandRole.OPERATOR).size() + 1); + //Update role cache + roleCache.remove(role); + return true; } } @@ -697,6 +710,9 @@ public class Island { getVisit().setMembers(getRole(IslandRole.MEMBER).size() + getRole(IslandRole.OPERATOR).size() + 1); + //Update role cache + roleCache.remove(role); + return true; } } @@ -918,7 +934,7 @@ public class Island { for (Entry> entry : this.islandPermissions.entrySet()) { for (IslandPermission permission : entry.getValue()) { - configLoad.set("Settings." + entry.getKey() + "." + permission.getPermission().getName(), permission.getStatus()); + configLoad.set("Settings." + entry.getKey().getFriendlyName().toUpperCase(Locale.US) + "." + permission.getPermission().getName(), permission.getStatus()); } } diff --git a/src/main/java/com/craftaro/skyblock/island/IslandLevel.java b/src/main/java/com/craftaro/skyblock/island/IslandLevel.java index bd246231..6f74c01f 100644 --- a/src/main/java/com/craftaro/skyblock/island/IslandLevel.java +++ b/src/main/java/com/craftaro/skyblock/island/IslandLevel.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.island; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -104,7 +105,7 @@ public class IslandLevel { } public long getMaterialPoints(String material) { - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (material.toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -216,7 +217,7 @@ public class IslandLevel { } public void setMaterialAmount(String material, long amount) { - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (material.toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -232,7 +233,7 @@ public class IslandLevel { } public long getMaterialAmount(String material) { - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (material.toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -244,7 +245,7 @@ public class IslandLevel { } public void removeMaterial(String material) { - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (material.toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": diff --git a/src/main/java/com/craftaro/skyblock/island/IslandManager.java b/src/main/java/com/craftaro/skyblock/island/IslandManager.java index 37c01ed9..189363fd 100644 --- a/src/main/java/com/craftaro/skyblock/island/IslandManager.java +++ b/src/main/java/com/craftaro/skyblock/island/IslandManager.java @@ -5,6 +5,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.craftaro.core.compatibility.CompatibleBiome; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.nms.Nms; import com.craftaro.skyblock.SkyBlock; @@ -1502,7 +1503,7 @@ public class IslandManager { updateFlight(player); if (world == IslandWorld.NETHER) { - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13)) { return; } } @@ -1665,7 +1666,7 @@ public class IslandManager { double increment = island.getSize() % 2 != 0 ? 0.5d : 0.0d; for (IslandWorld worldList : IslandWorld.getIslandWorlds()) { - if (worldList != IslandWorld.NETHER || ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (worldList != IslandWorld.NETHER || MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { Bukkit.getScheduler().runTask(this.plugin, () -> { for (Player all : getPlayersAtIsland(island)) { Nms.getImplementations().getWorldBorder().send(all, island.getBorderColor(), island.getSize(), island.getLocation(worldManager.getIslandWorld(all.getWorld()), IslandEnvironment.ISLAND).clone().add(increment, 0, increment)); @@ -1677,7 +1678,7 @@ public class IslandManager { } } else { for (IslandWorld worldList : IslandWorld.getIslandWorlds()) { - if (worldList != IslandWorld.NETHER || ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (worldList != IslandWorld.NETHER || MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { Bukkit.getScheduler().runTask(this.plugin, () -> { for (Player all : getPlayersAtIsland(island)) { Nms.getImplementations().getWorldBorder().send(all, null, 1.4999992E7D, new Location(all.getWorld(), 0, 0, 0)); diff --git a/src/main/java/com/craftaro/skyblock/levelling/IslandLevelManager.java b/src/main/java/com/craftaro/skyblock/levelling/IslandLevelManager.java index 16be796a..fe1d1a9e 100644 --- a/src/main/java/com/craftaro/skyblock/levelling/IslandLevelManager.java +++ b/src/main/java/com/craftaro/skyblock/levelling/IslandLevelManager.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.levelling; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -260,7 +261,7 @@ public final class IslandLevelManager { // placed. // This shouldn't cause any issues besides the task number being increased // insanely fast. - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { Bukkit.getScheduler().runTask(this.plugin, () -> { updateLevelLocation(island, location); }); @@ -272,7 +273,7 @@ public final class IslandLevelManager { private void updateLevelLocation(Island island, Location location) { Block block = location.getBlock(); XMaterial material = null; - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (block.getType().toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": diff --git a/src/main/java/com/craftaro/skyblock/limit/impl/BlockLimitation.java b/src/main/java/com/craftaro/skyblock/limit/impl/BlockLimitation.java index e9de9074..fd107bf0 100644 --- a/src/main/java/com/craftaro/skyblock/limit/impl/BlockLimitation.java +++ b/src/main/java/com/craftaro/skyblock/limit/impl/BlockLimitation.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.limit.impl; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -73,7 +74,7 @@ public final class BlockLimitation extends EnumLimitation { } XMaterial material = null; - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (type.toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -111,7 +112,7 @@ public final class BlockLimitation extends EnumLimitation { totalPlaced = island.getLevel().getMaterials().entrySet().stream().filter(x -> x.getKey().contains("SPAWNER")).mapToLong(Map.Entry::getValue).sum(); } else { XMaterial material = null; - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (type.toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": diff --git a/src/main/java/com/craftaro/skyblock/listeners/BlockListeners.java b/src/main/java/com/craftaro/skyblock/listeners/BlockListeners.java index 6da81453..97e93152 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/BlockListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/BlockListeners.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.listeners; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.hooks.LogManager; import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; @@ -115,7 +116,7 @@ public class BlockListeners implements Listener { Stackable stackable = stackableManager.getStack(block.getLocation(), CompatibleMaterial.getMaterial(block.getType()).get()); if (stackable != null) { XMaterial material = null; - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (block.getType().toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -194,7 +195,7 @@ public class BlockListeners implements Listener { } XMaterial material = null; - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (block.getType().toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -271,7 +272,7 @@ public class BlockListeners implements Listener { return; } - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_8)) { if (event instanceof BlockMultiPlaceEvent) { for (BlockState blockState : ((BlockMultiPlaceEvent) event).getReplacedBlockStates()) { if (!island.equals(islandManager.getIslandAtLocation(blockState.getLocation()))) { @@ -334,13 +335,23 @@ public class BlockListeners implements Listener { isObstructing = true; } - // Specific check for beds - if (!isObstructing && event.getBlock().getState().getData() instanceof org.bukkit.material.Bed) { + // Specific check for beds using getBlockData() for versions 1.13 and above + if (!isObstructing && event.getBlock().getBlockData() instanceof org.bukkit.block.data.type.Bed && MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { + org.bukkit.block.data.type.Bed bedData = (org.bukkit.block.data.type.Bed) event.getBlock().getBlockData(); + BlockFace bedDirection = bedData.getFacing(); + org.bukkit.block.Block bedBlock = block.getRelative(bedDirection); + if (LocationUtil.isLocationAffectingIslandSpawn(bedBlock.getLocation(), island, world)) { + isObstructing = true; + } + } // Specific check for beds using getBlockData() for versions 1.12 and below + else if (MajorServerVersion.isServerVersionAtOrBelow(MajorServerVersion.V1_12)) { + if (!isObstructing && event.getBlock().getState().getData() instanceof org.bukkit.material.Bed){ BlockFace bedDirection = ((org.bukkit.material.Bed) event.getBlock().getState().getData()).getFacing(); org.bukkit.block.Block bedBlock = block.getRelative(bedDirection); if (LocationUtil.isLocationAffectingIslandSpawn(bedBlock.getLocation(), island, world)) { isObstructing = true; } + } } if (isObstructing) { @@ -360,7 +371,7 @@ public class BlockListeners implements Listener { if (limits.isBlockLimitExceeded(block, limit) && !XMaterial.ENDER_EYE.isSimilar(item)) { XMaterial material = null; - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (block.getType().toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -391,7 +402,7 @@ public class BlockListeners implements Listener { // Not util used 2 islandLevelManager if condition is true // Sponge level dupe fix - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13) && + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13) && block.getType() == XMaterial.SPONGE.parseMaterial()) { Bukkit.getScheduler().runTask(this.plugin, () -> { if (blockLoc.getBlock().getType() == XMaterial.WET_SPONGE.parseMaterial()) { @@ -454,7 +465,7 @@ public class BlockListeners implements Listener { for (Entity ent : entities) { boolean witherSkeleton; - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { witherSkeleton = ent.getType().equals(EntityType.WITHER_SKELETON); } else { witherSkeleton = ent instanceof Skeleton && ((Skeleton) ent).getSkeletonType().equals(Skeleton.SkeletonType.WITHER); @@ -464,7 +475,7 @@ public class BlockListeners implements Listener { XSound.BLOCK_FIRE_EXTINGUISH.play(block.getLocation()); event.getToBlock().getWorld().playEffect(block.getLocation(), Effect.SMOKE, 1); } else { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16)) { if (((ent instanceof Piglin || ent instanceof Hoglin) || ent instanceof Strider) || ent instanceof Zoglin) { event.setCancelled(true); XSound.BLOCK_FIRE_EXTINGUISH.play(block.getLocation()); @@ -488,7 +499,7 @@ public class BlockListeners implements Listener { return; } - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_12)) { Bukkit.getScheduler().runTaskLater(this.plugin, () -> { handleGeneration(block, island, event.getToBlock().getState()); }, 1L); @@ -719,7 +730,7 @@ public class BlockListeners implements Listener { IslandManager islandManager = this.plugin.getIslandManager(); // PortalCreateEvent.getBlocks() changed from ArrayList to // ArrayList in 1.14.1 - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_13)) { List blocks = event.getBlocks(); // TODO 1.8 if (event.getBlocks().isEmpty()) { return; @@ -828,7 +839,7 @@ public class BlockListeners implements Listener { if (CompatibleMaterial.isAir(destmaterial)) { return; } - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { switch (event.getToBlock().getType().toString().toUpperCase()) { case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -868,7 +879,7 @@ public class BlockListeners implements Listener { XMaterial material = CompatibleMaterial.getMaterial(block.getType()).orElse(null); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12) + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_12) && material != XMaterial.WATER && material != XMaterial.LAVA) { return false; @@ -952,7 +963,7 @@ public class BlockListeners implements Listener { BlockState genState = generatorManager.generateBlock(generator, block); block.setType(genState.getType()); - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13)) { BlockState tempState = block.getState(); tempState.setData(genState.getData()); tempState.update(true, true); @@ -989,7 +1000,7 @@ public class BlockListeners implements Listener { BlockState genState = generatorManager.generateBlock(generator, block); state.setType(genState.getType()); - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13)) { state.setData(genState.getData()); } islandLevelManager.updateLevel(island, genState.getLocation()); diff --git a/src/main/java/com/craftaro/skyblock/listeners/EntityListeners.java b/src/main/java/com/craftaro/skyblock/listeners/EntityListeners.java index 7aeaa741..911ada63 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/EntityListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/EntityListeners.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.listeners; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -242,7 +243,7 @@ public class EntityListeners implements Listener { return; } - if (ServerVersion.isServerVersion(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersion(MajorServerVersion.V1_8)) { return; } @@ -371,7 +372,7 @@ public class EntityListeners implements Listener { && configLoad.getBoolean("Island.Spawn.Protection")) { FallingBlock fallingBlock = (FallingBlock) event.getEntity(); if (fallingBlock.getDropItem()) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { fallingBlock.getWorld().dropItemNaturally(fallingBlock.getLocation(), new ItemStack(fallingBlock.getBlockData().getMaterial(), 1)); } else { @@ -532,25 +533,25 @@ public class EntityListeners implements Listener { return; } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_10)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_10)) { if (livingEntity instanceof Donkey || livingEntity instanceof Mule || livingEntity instanceof ElderGuardian) { return; } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { if (livingEntity instanceof Evoker) { return; } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_12)) { if (livingEntity instanceof Llama) { return; } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_14)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_14)) { if (livingEntity instanceof Ravager || livingEntity instanceof Illager) { return; } @@ -577,19 +578,19 @@ public class EntityListeners implements Listener { if (upgrades != null && !upgrades.isEmpty() && upgrades.get(0).isEnabled() && island.isUpgrade(Upgrade.Type.DROPS)) { Set dontMultiply = new HashSet<>(); - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_8)) { EntityEquipment equipment = livingEntity.getEquipment(); if (equipment != null) { for (ItemStack item : event.getDrops()) { - if (item.equals(equipment.getHelmet()) || item.equals(equipment.getChestplate()) - || item.equals(equipment.getLeggings()) || item.equals(equipment.getBoots()) - || item.equals(equipment.getItemInMainHand()) || item.equals(equipment.getItemInOffHand())) { + if (item.isSimilar(equipment.getHelmet()) || item.isSimilar(equipment.getChestplate()) + || item.isSimilar(equipment.getLeggings()) || item.isSimilar(equipment.getBoots()) + || item.isSimilar(equipment.getItemInMainHand()) || item.isSimilar(equipment.getItemInOffHand())) { dontMultiply.add(item); } } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16)) { if (livingEntity instanceof Steerable) { Steerable steerable = (Steerable) livingEntity; if (steerable.hasSaddle()) { @@ -606,12 +607,18 @@ public class EntityListeners implements Listener { } } - for (ItemStack is : event.getDrops()) { - for (ItemStack is2 : dontMultiply) { - if (!is2.isSimilar(is)) { - livingEntity.getWorld().dropItemNaturally(livingEntity.getLocation(), is); + // Only drop items that are not in the dontMultiply set + for (ItemStack item : event.getDrops()) { + boolean shouldDrop = true; + for (ItemStack dontMultiplyItem : dontMultiply) { + if (item.isSimilar(dontMultiplyItem)) { + shouldDrop = false; + break; } } + if (shouldDrop) { + livingEntity.getWorld().dropItemNaturally(livingEntity.getLocation(), item); + } } } } @@ -701,7 +708,7 @@ public class EntityListeners implements Listener { return; } Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { // getPassengers() was added in 1.11 + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { // getPassengers() was added in 1.11 for (org.bukkit.entity.Entity passenger : entity.getPassengers()) { passenger.remove(); } diff --git a/src/main/java/com/craftaro/skyblock/listeners/FallBreakListeners.java b/src/main/java/com/craftaro/skyblock/listeners/FallBreakListeners.java index aed7b78e..fe6e5c7c 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/FallBreakListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/FallBreakListeners.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.listeners; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -46,7 +47,7 @@ public class FallBreakListeners implements Listener { if (island != null) { Optional material = Optional.empty(); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { material = CompatibleMaterial.getMaterial(ent.getBlockData().getMaterial()); } else { try { diff --git a/src/main/java/com/craftaro/skyblock/listeners/GrowListeners.java b/src/main/java/com/craftaro/skyblock/listeners/GrowListeners.java index e79380e3..413c5b47 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/GrowListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/GrowListeners.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.listeners; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -105,7 +106,7 @@ public class GrowListeners implements Listener { return; } - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { try { Object blockData = block.getClass().getMethod("getBlockData").invoke(block); if (blockData instanceof org.bukkit.block.data.Ageable) { diff --git a/src/main/java/com/craftaro/skyblock/listeners/InteractListeners.java b/src/main/java/com/craftaro/skyblock/listeners/InteractListeners.java index 3b4185e4..1bc84464 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/InteractListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/InteractListeners.java @@ -170,13 +170,13 @@ public class InteractListeners implements Listener { return; } - Optional material = block == null ? Optional.empty() : CompatibleMaterial.getMaterial(block.getType()); - // Check permissions. if (!this.plugin.getPermissionManager().processPermission(event, player, island)) { return; } + Optional material = block == null ? Optional.empty() : CompatibleMaterial.getMaterial(block.getType()); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { final Optional blockType = CompatibleMaterial.getMaterial(event.getClickedBlock().getType()); final XMaterial heldType; diff --git a/src/main/java/com/craftaro/skyblock/listeners/MoveListeners.java b/src/main/java/com/craftaro/skyblock/listeners/MoveListeners.java index 6d6dd1af..c02a2e6a 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/MoveListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/MoveListeners.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.listeners; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.skyblock.SkyBlock; @@ -124,7 +125,7 @@ public class MoveListeners implements Listener { player.setLevel(0); player.setExp(0.0F); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getValue()); } else { player.setHealth(player.getMaxHealth()); diff --git a/src/main/java/com/craftaro/skyblock/listeners/SpawnerListeners.java b/src/main/java/com/craftaro/skyblock/listeners/SpawnerListeners.java index 0d2636b0..db5832bb 100644 --- a/src/main/java/com/craftaro/skyblock/listeners/SpawnerListeners.java +++ b/src/main/java/com/craftaro/skyblock/listeners/SpawnerListeners.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.listeners; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; @@ -41,7 +42,7 @@ public class SpawnerListeners implements Listener { if (upgrades != null && !upgrades.isEmpty() && upgrades.get(0).isEnabled() && island.isUpgrade(Upgrade.Type.SPAWNER)) { - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { if (spawner.getDelay() == 20) { spawner.setDelay(10); } diff --git a/src/main/java/com/craftaro/skyblock/localization/type/impl/EnumLocalization.java b/src/main/java/com/craftaro/skyblock/localization/type/impl/EnumLocalization.java index a8c7d54b..cb4b4896 100644 --- a/src/main/java/com/craftaro/skyblock/localization/type/impl/EnumLocalization.java +++ b/src/main/java/com/craftaro/skyblock/localization/type/impl/EnumLocalization.java @@ -4,6 +4,7 @@ import com.craftaro.skyblock.localization.type.Localization; import org.bukkit.configuration.ConfigurationSection; import java.util.EnumMap; +import java.util.Locale; import java.util.Map; public class EnumLocalization> extends Localization { @@ -37,6 +38,6 @@ public class EnumLocalization> extends Localization { } protected T parseEnum(String input) { - return Enum.valueOf(getType(), input.toUpperCase()); + return Enum.valueOf(getType(), input.toUpperCase(Locale.US)); } } diff --git a/src/main/java/com/craftaro/skyblock/menus/Bans.java b/src/main/java/com/craftaro/skyblock/menus/Bans.java index 97c67daf..2de3a9ed 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Bans.java +++ b/src/main/java/com/craftaro/skyblock/menus/Bans.java @@ -1,10 +1,9 @@ package com.craftaro.skyblock.menus; import com.craftaro.core.gui.AnvilGui; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; import com.craftaro.skyblock.island.IslandManager; @@ -27,6 +26,7 @@ import org.bukkit.inventory.meta.SkullMeta; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class Bans { private static Bans instance; @@ -165,23 +165,13 @@ public class Bans { int playerMenuPage = playerData.getPage(MenuType.BANS), nextEndIndex = islandBans.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Bans.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Bans.Item.Next.Displayname"), null, null, null, null), 7); } @@ -218,7 +208,18 @@ public class Bans { targetPlayerTexture = new String[]{null, null}; } } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + ItemStack phead; + if (targetPlayerTexture.length >= 1 && targetPlayerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(targetPlayerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(targetPlayerUUID).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + nInv.addItem( nInv.createItem(phead, plugin.formatText( diff --git a/src/main/java/com/craftaro/skyblock/menus/Information.java b/src/main/java/com/craftaro/skyblock/menus/Information.java index a2dc1107..5960133c 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Information.java +++ b/src/main/java/com/craftaro/skyblock/menus/Information.java @@ -1,9 +1,8 @@ package com.craftaro.skyblock.menus; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; import com.craftaro.skyblock.island.IslandManager; @@ -24,12 +23,12 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class Information { private static Information instance; @@ -343,24 +342,14 @@ public class Information { nextEndIndex = displayedMembers.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Information.Members.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Information.Members.Item.Next.Displayname"), null, null, null, null), 7); @@ -398,7 +387,18 @@ public class Information { } else { islandRole = configLoad.getString("Menu.Information.Members.Item.Member.Word.Owner"); } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + ItemStack phead; + if (playerTexture.length >= 1 && playerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(playerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(playerUUID).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + nInv.addItem( nInv.createItem(phead, configLoad.getString("Menu.Information.Members.Item.Member.Displayname") @@ -494,24 +494,14 @@ public class Information { nextEndIndex = displayedVisitors.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Information.Visitors.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Information.Visitors.Item.Next.Displayname"), null, null, null, null), 7); @@ -541,7 +531,19 @@ public class Information { playerData = plugin.getPlayerDataManager().getPlayerData(targetPlayer.getUniqueId()); playerTexture = playerData.getTexture(); } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + + ItemStack phead; + if (playerTexture.length >= 1 && playerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(playerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(playerUUID).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + nInv.addItem( nInv.createItem(phead, configLoad.getString("Menu.Information.Visitors.Item.Visitor.Displayname") diff --git a/src/main/java/com/craftaro/skyblock/menus/Leaderboard.java b/src/main/java/com/craftaro/skyblock/menus/Leaderboard.java index a325d59a..f020e2bf 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Leaderboard.java +++ b/src/main/java/com/craftaro/skyblock/menus/Leaderboard.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.menus; import com.craftaro.core.utils.NumberUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.placeholder.Placeholder; import com.craftaro.skyblock.playerdata.PlayerDataManager; @@ -8,7 +9,6 @@ import com.craftaro.skyblock.sound.SoundManager; import com.craftaro.skyblock.utils.item.nInventoryUtil; import com.craftaro.skyblock.utils.player.OfflinePlayer; import com.craftaro.skyblock.visit.Visit; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import org.bukkit.Bukkit; @@ -18,27 +18,14 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class Leaderboard { private static Leaderboard instance; - private static final String[] steveSkinTexture = new String[]{ - "otpbxDm9B+opW7jEzZF8BVDeZSqaqdF0dyLlnlyMh7Q5ysJFDL48/9J/IOHp8JqNm1oarmVdvxrroy9dlNI2Mz4BVuJM2pcCOJwk2h+aZ4dzNZGxst+MYNPSw+i4sMoYu7OV07UVHrQffolFF7MiaBUst1hFwM07IpTE6UtIQz4rqWisXe9Iz5+ooqX4wj0IB3dPntsh6u5nVlL8acWCBDAW4YqcPt2Y4CKK+KtskjzusjqGAdEO+4lRcW1S0ldo2RNtUHEzZADWQcADjg9KKiKq9QIpIpYURIoIAA+pDGb5Q8L5O6CGI+i1+FxqXbgdBvcm1EG0OPdw9WpSqAxGGeXSwlzjILvlvBzYbd6gnHFBhFO+X7iwRJYNd+qQakjUa6ZwR8NbkpbN3ABb9+6YqVkabaEmgfky3HdORE+bTp/AT6LHqEMQo0xdNkvF9gtFci7RWhFwuTLDvQ1esby1IhlgT+X32CPuVHuxEvPCjN7+lmRz2OyOZ4REo2tAIFUKakqu3nZ0NcF98b87wAdA9B9Qyd2H/rEtUToQhpBjP732Sov6TlJkb8echGYiLL5bu/Q7hum72y4+j2GNnuRiOJtJidPgDqrYMg81GfenfPyS6Ynw6KhdEhnwmJ1FJlJhYvXZyqZwLAV1c26DNYkrTMcFcv3VXmcd5/2Zn9FnZtw=", - "ewogICJ0aW1lc3RhbXAiIDogMTYyMTcxNTMxMjI5MCwKICAicHJvZmlsZUlkIiA6ICJiNTM5NTkyMjMwY2I0MmE0OWY5YTRlYmYxNmRlOTYwYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJtYXJpYW5hZmFnIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzFhNGFmNzE4NDU1ZDRhYWI1MjhlN2E2MWY4NmZhMjVlNmEzNjlkMTc2OGRjYjEzZjdkZjMxOWE3MTNlYjgxMGIiCiAgICB9CiAgfQp9" - }; - private static final String[] alexSkinTexture = new String[]{ - "rZvLQoZsgLYaoKqEuASopYAs7IAlZlsGkwagoM8ZX38cP9kalseZrWY5OHZVfoiftdQJ+lGOzkiFfyx6kNJDTZniLrnRa8sd3X6D65ZihT1sOm/RInCwxpS1K0zGCM2h9ErkWswfwaviIf7hJtrwk8/zL0bfzDk2IgX/IBvIZpVoYTfmQsVY9jgSwORrS9ObePGIfFgmThMoZnCYWQMVpS2+yTFA2wnw9hmisQK9UWBU+iBZv55bMmkMcyEuXw1w14DaEu+/M0UGD91LU4GmJLPA9T4GCuIV8GxOcraSVIajki1cMlOBQwIaibB2NE6KAwq1Zh6NnsNYucy6qFM+136lXfBchQ1Nx4FDRZQgt8VRqTMy/OQFpr2nTbWWbRU4gRFpKC3R0518DqUH0Qm612kPWniKku/QzUUBSe1PSVljBaZCyyRx0OB1a1/8MexboKRnPXuTDnmPa9UPfuH4VO0q+qYkjV2KUzP6e5vIP5aQ6USPrMie7MmAHFJzwAMIbLjgkTVx91GWtYqg/t7qBlvrdBRLIPPsy/DSOqa+2+4hABouVCPZrBMCMLzstPPQoqZAyiCqcKb2HqWSU0h9Bhx19yoIcbHCeI3zsQs8PqIBjUL4mO6VQT4lzHy0e3M61Xsdd8S1GtsakSetTvEtMdUwCEDfBA5PRRTLOVYTY+g=", - "ewogICJ0aW1lc3RhbXAiIDogMTYyMTcxNTQ5ODM0MywKICAicHJvZmlsZUlkIiA6ICIxYTc1ZTNiYmI1NTk0MTc2OTVjMmY4NTY1YzNlMDAzZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUZXJvZmFyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNiNjBhMWY2ZDU2MmY1MmFhZWJiZjE0MzRmMWRlMTQ3OTMzYTNhZmZlMGU3NjRmYTQ5ZWEwNTc1MzY2MjNjZDMiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==" - }; - private static final String[] questionMarkSkinTexture = new String[]{ - "gi+wnQt/y4Z6E9rn65iDWmt8vUOM2WXY66XvtydqDJZTzwgFrjVcx2c5YwdzvtOIRtiX2nZt4n2uWesUFKb59xS24YWbxCDXnalHhCpPFcIP58SQbCm9AYp3UPzkcRNWzuV4BddrS608QQZGyIFOUaLPOPasGITZu51VLcOKcTyFOCKu1QE2yRo1orTH8bWfdpE769BB/VYGdny0qJtm1amc12wGiVifMJRutZmYo2ZdA0APhIJVaNsPppNESVcbeBCvk60l4QK43C/p98/QEe5U6UJ6Z6N01pBQcswubMu8lCuPLasep+vX3v2K+Ui9jnTQNreGNIZPWVjf6V1GH4xMbbUVQJsoPdcaXG855VdzyoW+kyHdWYEojSn0qAY/moH6JCLnx6PLCv9mITSvOIUHq8ITet0M7Z9KALY5s6eg6VdA8TvClRy2TTm9tIRt//TJo5JxBoTYujawGNSR7ryODj2UEDQ2xOyWSagxAXZpispdrO5jHxRmBZUwX9vxnAp+CNWxifpu9sINJTlqYsT/KlGOJQC483gv5B6Nm5VBB1DRFmQkohzO6Wc2eDixgEbaU795GlLxrNaFfNjVH6Bwr1e7df2H3nE0P0bexs4wYdWplijn4gPyHwjT2LDBPGFQK3Vo2SlaXfPYbkIHX21c9qaz3eWHpLEXUBQfnWc=", - "eyJ0aW1lc3RhbXAiOjE1MzE3MTcxNjY3MDAsInByb2ZpbGVJZCI6IjYwNmUyZmYwZWQ3NzQ4NDI5ZDZjZTFkMzMyMWM3ODM4IiwicHJvZmlsZU5hbWUiOiJNSEZfUXVlc3Rpb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2QzNGUwNjNjYWZiNDY3YTVjOGRlNDNlYzc4NjE5Mzk5ZjM2OWY0YTUyNDM0ZGE4MDE3YTk4M2NkZDkyNTE2YTAifX19" - }; - public static Leaderboard getInstance() { if (instance == null) { instance = new Leaderboard(); @@ -301,15 +288,18 @@ public class Leaderboard { } } - if (playerTexture[0] == null || playerTexture[1] == null) { - if ((visit.getOwnerUUID().hashCode() & 1) != 0) { - playerTexture = alexSkinTexture; - } else { - playerTexture = steveSkinTexture; + + ItemStack phead; + if (playerTexture.length >= 1 && playerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(playerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(visit.getOwnerUUID()).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); } } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); nInv.addItem( nInv.createItem(phead, configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Displayname") @@ -332,10 +322,7 @@ public class Leaderboard { for (int i = 0; i < itemSlots.length; i++) { if (!nInv.getItems().containsKey(itemSlots[i])) { - ItemStack qhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta qskullMeta = (SkullMeta) qhead.getItemMeta(); - SkullUtils.setSkullBase64(qskullMeta,questionMarkSkinTexture[1],questionMarkSkinTexture[0]); - qhead.setItemMeta(qskullMeta); + ItemStack qhead = SkullItemCreator.byTextureUrlHash("d34e063cafb467a5c8de43ec78619399f369f4a52434da8017a983cdd92516a0"); nInv.addItem(nInv.createItem(qhead, configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Empty.Displayname") .replace("%position", "" + (i + 1)), diff --git a/src/main/java/com/craftaro/skyblock/menus/Levelling.java b/src/main/java/com/craftaro/skyblock/menus/Levelling.java index 4bca397f..5a7b69ad 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Levelling.java +++ b/src/main/java/com/craftaro/skyblock/menus/Levelling.java @@ -1,8 +1,9 @@ package com.craftaro.skyblock.menus; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.core.utils.ItemUtils; @@ -32,7 +33,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; import java.util.LinkedHashMap; import java.util.List; @@ -190,6 +190,7 @@ public class Levelling { long value = testIslandMaterials.get(materialName); Optional materials = CompatibleMaterial.getMaterial(materialName); + if (!materials.isPresent()) { continue; } @@ -225,23 +226,13 @@ public class Levelling { nInv.addItem(nInv.createItem(XMaterial.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Levelling.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17); if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Levelling.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Levelling.Item.Next.Displayname"), null, null, null, null), 7); } @@ -289,7 +280,7 @@ public class Levelling { String name = plugin.getLocalizationManager().getLocalizationFor(XMaterial.class).getLocale(materials.get()); - if (materials.get() == XMaterial.FARMLAND && ServerVersion.isServerVersionBelow(ServerVersion.V1_9)) { + if (materials.get() == XMaterial.FARMLAND && MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_9)) { materials = Optional.of(XMaterial.DIRT); } diff --git a/src/main/java/com/craftaro/skyblock/menus/Members.java b/src/main/java/com/craftaro/skyblock/menus/Members.java index 35eabc56..fd142f4a 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Members.java +++ b/src/main/java/com/craftaro/skyblock/menus/Members.java @@ -1,9 +1,6 @@ package com.craftaro.skyblock.menus; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; -import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.config.FileManager; import com.craftaro.skyblock.island.Island; @@ -18,6 +15,8 @@ import com.craftaro.skyblock.utils.NumberUtil; import com.craftaro.skyblock.utils.StringUtil; import com.craftaro.skyblock.utils.item.nInventoryUtil; import com.craftaro.skyblock.utils.player.OfflinePlayer; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -26,7 +25,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; import java.io.File; import java.text.ParseException; @@ -38,6 +36,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class Members { private static Members instance; @@ -353,23 +352,13 @@ public class Members { 9, 10, 11, 12, 13, 14, 15, 16, 17); if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Members.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Members.Item.Next.Displayname"), null, null, null, null), 7); } @@ -572,7 +561,12 @@ public class Members { } } - ItemStack phead = SkullUtils.getSkull(Bukkit.getPlayerUniqueId(playerName)); + ItemStack phead; + try { + phead = SkullItemCreator.byUuid(playerUUID).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } nInv.addItem( nInv.createItem(phead, configLoad.getString("Menu.Members.Item.Member.Displayname").replace("%player", diff --git a/src/main/java/com/craftaro/skyblock/menus/Ownership.java b/src/main/java/com/craftaro/skyblock/menus/Ownership.java index 9dc7464f..e8cdf3e6 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Ownership.java +++ b/src/main/java/com/craftaro/skyblock/menus/Ownership.java @@ -1,10 +1,9 @@ package com.craftaro.skyblock.menus; import com.craftaro.core.gui.AnvilGui; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; import com.craftaro.skyblock.island.IslandManager; @@ -27,6 +26,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class Ownership { private static Ownership instance; @@ -215,7 +215,7 @@ public class Ownership { String originalOwnerName, ownershipPassword = island.getPassword(); String[] playerTexture; - org.bukkit.OfflinePlayer targetPlayer = Bukkit.getServer().getPlayer(island.getOriginalOwnerUUID()); + org.bukkit.OfflinePlayer targetPlayer = Bukkit.getServer().getPlayer(originalOwnerUUID); if (targetPlayer == null) { OfflinePlayer offlinePlayer = new OfflinePlayer(originalOwnerUUID); @@ -225,7 +225,19 @@ public class Ownership { originalOwnerName = targetPlayer.getName(); playerTexture = playerDataManager.getPlayerData(targetPlayer.getUniqueId()).getTexture(); } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + + ItemStack phead; + if (playerTexture.length >= 1 && playerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(playerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(originalOwnerUUID).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + nInv.addItem(nInv.createItem(XMaterial.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Ownership.Item.Exit.Displayname"), null, null, null, null), 0); nInv.addItem(nInv.createItem(phead, diff --git a/src/main/java/com/craftaro/skyblock/menus/Upgrade.java b/src/main/java/com/craftaro/skyblock/menus/Upgrade.java index ced41e58..1e5b2741 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Upgrade.java +++ b/src/main/java/com/craftaro/skyblock/menus/Upgrade.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.menus; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.hooks.economies.Economy; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -495,10 +496,10 @@ public class Upgrade { if (upgrades != null && !upgrades.isEmpty() && upgrades.get(0).isEnabled()) { com.craftaro.skyblock.upgrade.Upgrade upgrade = upgrades.get(0); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { PotionMeta pm = (PotionMeta) potion.getItemMeta(); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_10)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_10)) { pm.setBasePotionData(new PotionData(PotionType.SPEED)); } else { pm.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 1, 0), true); @@ -547,11 +548,11 @@ public class Upgrade { if (upgrades != null && !upgrades.isEmpty() && upgrades.get(0).isEnabled()) { com.craftaro.skyblock.upgrade.Upgrade upgrade = upgrades.get(0); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_8)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_8)) { potion = new ItemStack(Material.POTION); PotionMeta pm = (PotionMeta) potion.getItemMeta(); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { pm.setBasePotionData(new PotionData(PotionType.JUMP)); } else { pm.addCustomEffect(new PotionEffect(PotionEffectType.JUMP, 1, 0), true); diff --git a/src/main/java/com/craftaro/skyblock/menus/Visit.java b/src/main/java/com/craftaro/skyblock/menus/Visit.java index 7d735acf..d7a516dd 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Visit.java +++ b/src/main/java/com/craftaro/skyblock/menus/Visit.java @@ -1,9 +1,8 @@ package com.craftaro.skyblock.menus; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.core.utils.NumberUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.api.event.player.PlayerVoteEvent; @@ -28,12 +27,12 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ExecutionException; public class Visit { private static Visit instance; @@ -355,23 +354,13 @@ public class Visit { 9, 10, 11, 12, 13, 14, 15, 16, 17); if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Visit.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Visit.Item.Next.Displayname"), null, null, null, null), 7); } @@ -476,7 +465,19 @@ public class Visit { "Menu.Visit.Item.Island.Vote.Enabled.Signature.Disabled.Visitor.Lore")); } } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + + ItemStack phead; + if (targetPlayerTexture.length >= 1 && targetPlayerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(targetPlayerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(visit.getOwnerUUID()).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + nInv.addItem(nInv.createItem(phead, configLoad.getString("Menu.Visit.Item.Island.Displayname").replace("%player", targetPlayerName), @@ -512,7 +513,18 @@ public class Visit { itemLore.addAll(configLoad .getStringList("Menu.Visit.Item.Island.Vote.Disabled.Signature.Disabled.Lore")); } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + ItemStack phead; + if (targetPlayerTexture.length >= 1 && targetPlayerTexture[0] != null) { + phead = SkullItemCreator.byTextureValue(targetPlayerTexture[0]); + } else { + try { + phead = SkullItemCreator.byUuid(visit.getOwnerUUID()).get(); + } catch (InterruptedException | ExecutionException ex) { + throw new RuntimeException(ex); + } + } + nInv.addItem(nInv.createItem(phead, configLoad.getString("Menu.Visit.Item.Island.Displayname").replace("%player", targetPlayerName), diff --git a/src/main/java/com/craftaro/skyblock/menus/Visitors.java b/src/main/java/com/craftaro/skyblock/menus/Visitors.java index ff5a8d71..1427ff05 100644 --- a/src/main/java/com/craftaro/skyblock/menus/Visitors.java +++ b/src/main/java/com/craftaro/skyblock/menus/Visitors.java @@ -1,9 +1,8 @@ package com.craftaro.skyblock.menus; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.Island; import com.craftaro.skyblock.island.IslandManager; @@ -18,12 +17,10 @@ import com.craftaro.skyblock.utils.item.nInventoryUtil; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; import java.util.ArrayList; import java.util.List; @@ -189,23 +186,13 @@ public class Visitors { int playerMenuPage = playerData.getPage(MenuType.VISITORS), nextEndIndex = sortedIslandVisitors.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Visitors.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Visitors.Item.Next.Displayname"), null, null, null, null), 7); } @@ -229,7 +216,7 @@ public class Visitors { if (islandVisitors.size() > index) { inventorySlot++; - OfflinePlayer targetPlayer = Bukkit.getServer().getPlayer((UUID) islandVisitors.toArray()[index]); + Player targetPlayer = Bukkit.getServer().getPlayer((UUID) islandVisitors.toArray()[index]); PlayerData targetPlayerData = playerDataManager.getPlayerData(targetPlayer.getUniqueId()); String[] targetPlayerTexture = targetPlayerData.getTexture(); @@ -282,7 +269,8 @@ public class Visitors { "Menu.Visitors.Item.Visitor.Kick.NoPermission.Ban.NoPermission.Lore")); } } - ItemStack phead = SkullUtils.getSkull(targetPlayer.getUniqueId()); + + ItemStack phead = SkullItemCreator.byPlayer(targetPlayer); nInv.addItem( nInv.createItem(phead, ChatColor.translateAlternateColorCodes('&', diff --git a/src/main/java/com/craftaro/skyblock/menus/admin/Creator.java b/src/main/java/com/craftaro/skyblock/menus/admin/Creator.java index ca46baf2..8acc2b12 100644 --- a/src/main/java/com/craftaro/skyblock/menus/admin/Creator.java +++ b/src/main/java/com/craftaro/skyblock/menus/admin/Creator.java @@ -1,12 +1,10 @@ package com.craftaro.skyblock.menus.admin; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.gui.AnvilGui; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; -import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.config.FileManager; import com.craftaro.skyblock.config.FileManager.Config; @@ -19,6 +17,8 @@ import com.craftaro.skyblock.sound.SoundManager; import com.craftaro.skyblock.structure.Structure; import com.craftaro.skyblock.structure.StructureManager; import com.craftaro.skyblock.utils.item.nInventoryUtil; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; @@ -31,7 +31,6 @@ import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; import java.io.File; import java.io.IOException; @@ -80,24 +79,14 @@ public class Creator implements Listener { int playerMenuPage = playerData.getPage(MenuType.ADMIN_CREATOR), nextEndIndex = structures.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Admin.Creator.Browse.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Admin.Creator.Browse.Item.Next.Displayname"), null, null, null, null), 7); @@ -277,7 +266,7 @@ public class Creator implements Listener { FileConfiguration configLoad = config.getFileConfiguration(); String inventoryName = ""; - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_13)) { inventoryName = event.getView().getTitle(); } else { try { @@ -1224,7 +1213,7 @@ public class Creator implements Listener { FileConfiguration configLoad = config.getFileConfiguration(); String inventoryName = ""; - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_13)) { inventoryName = event.getView().getTitle(); } else { try { diff --git a/src/main/java/com/craftaro/skyblock/menus/admin/Generator.java b/src/main/java/com/craftaro/skyblock/menus/admin/Generator.java index 1420598c..82094eef 100644 --- a/src/main/java/com/craftaro/skyblock/menus/admin/Generator.java +++ b/src/main/java/com/craftaro/skyblock/menus/admin/Generator.java @@ -1,12 +1,12 @@ package com.craftaro.skyblock.menus.admin; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.gui.AnvilGui; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.config.FileManager; import com.craftaro.skyblock.config.FileManager.Config; @@ -31,7 +31,6 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; import java.io.File; import java.io.IOException; @@ -80,24 +79,14 @@ public class Generator implements Listener { int playerMenuPage = playerData.getPage(MenuType.ADMIN_GENERATOR), nextEndIndex = generators.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Admin.Generator.Browse.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Admin.Generator.Browse.Item.Next.Displayname"), null, null, null, null), 7); @@ -206,7 +195,7 @@ public class Generator implements Listener { FileConfiguration configLoad = plugin.getLanguage(); String inventoryName = ""; - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_13)) { inventoryName = event.getView().getTitle(); } else { try { diff --git a/src/main/java/com/craftaro/skyblock/menus/admin/Levelling.java b/src/main/java/com/craftaro/skyblock/menus/admin/Levelling.java index 7cd344cf..3823b18a 100644 --- a/src/main/java/com/craftaro/skyblock/menus/admin/Levelling.java +++ b/src/main/java/com/craftaro/skyblock/menus/admin/Levelling.java @@ -1,12 +1,12 @@ package com.craftaro.skyblock.menus.admin; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.gui.AnvilGui; -import com.craftaro.third_party.com.cryptomorin.xseries.SkullUtils; +import com.craftaro.core.utils.SkullItemCreator; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; -import com.craftaro.core.utils.ItemUtils; import com.craftaro.core.utils.NumberUtils; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.config.FileManager; @@ -31,7 +31,6 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; import java.io.File; import java.io.IOException; @@ -105,23 +104,13 @@ public class Levelling implements Listener { int playerMenuPage = playerData.getPage(MenuType.ADMIN_LEVELLING), nextEndIndex = levellingMaterials.size() - playerMenuPage * 36; if (playerMenuPage != 1) { - ItemStack Lhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta LskullMeta = (SkullMeta) Lhead.getItemMeta(); - SkullUtils.setSkullBase64(LskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ==", - "ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k="); - Lhead.setItemMeta(LskullMeta); + ItemStack Lhead = SkullItemCreator.byTextureUrlHash("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); nInv.addItem(nInv.createItem(Lhead, configLoad.getString("Menu.Admin.Levelling.Item.Previous.Displayname"), null, null, null, null), 1); } if (!(nextEndIndex == 0 || nextEndIndex < 0)) { - ItemStack Rhead = XMaterial.PLAYER_HEAD.parseItem(); - SkullMeta RskullMeta = (SkullMeta) Rhead.getItemMeta(); - SkullUtils.setSkullBase64(RskullMeta, - "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", - "wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8="); - Rhead.setItemMeta(RskullMeta); + ItemStack Rhead = SkullItemCreator.byTextureUrlHash("1b6f1a25b6bc199946472aedb370522584ff6f4e83221e5946bd2e41b5ca13b"); nInv.addItem(nInv.createItem(Rhead, configLoad.getString("Menu.Admin.Levelling.Item.Next.Displayname"), null, null, null, null), 7); } @@ -180,7 +169,7 @@ public class Levelling implements Listener { FileConfiguration configLoad = plugin.getLanguage(); String inventoryName = ""; - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_13)) { inventoryName = event.getView().getTitle(); } else { try { @@ -410,7 +399,7 @@ public class Levelling implements Listener { XMaterial materials = CompatibleMaterial.getMaterial(event.getCurrentItem().getType()).get(); - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13)) { materials.parseItem().setData(event.getCurrentItem().getData()); } diff --git a/src/main/java/com/craftaro/skyblock/menus/admin/Upgrade.java b/src/main/java/com/craftaro/skyblock/menus/admin/Upgrade.java index 044e841f..7418447f 100644 --- a/src/main/java/com/craftaro/skyblock/menus/admin/Upgrade.java +++ b/src/main/java/com/craftaro/skyblock/menus/admin/Upgrade.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.menus.admin; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.gui.AnvilGui; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -240,7 +241,7 @@ public class Upgrade { ItemStack jumpPotion = new ItemStack(Material.POTION); com.craftaro.skyblock.upgrade.Upgrade upgrade; - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { PotionMeta pm = (PotionMeta) speedPotion.getItemMeta(); pm.setBasePotionData(new PotionData(PotionType.SPEED)); speedPotion.setItemMeta(pm); @@ -258,7 +259,7 @@ public class Upgrade { new Placeholder("%status", getStatus(upgrade))}, null, new ItemFlag[]{ItemFlag.HIDE_POTION_EFFECTS}), 0); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { PotionMeta pm = (PotionMeta) jumpPotion.getItemMeta(); pm.setBasePotionData(new PotionData(PotionType.JUMP)); jumpPotion.setItemMeta(pm); diff --git a/src/main/java/com/craftaro/skyblock/permission/BasicPermission.java b/src/main/java/com/craftaro/skyblock/permission/BasicPermission.java index 90dbdc47..b949d2ff 100644 --- a/src/main/java/com/craftaro/skyblock/permission/BasicPermission.java +++ b/src/main/java/com/craftaro/skyblock/permission/BasicPermission.java @@ -12,17 +12,37 @@ import org.bukkit.inventory.meta.ItemMeta; import javax.annotation.Nonnull; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public abstract class BasicPermission { private final String name; private final XMaterial icon; private final PermissionType type; + //It used to write the permission's value + //to the global settings.yml which will be defaulted on all islands + private final Map defaultValues; + protected BasicPermission(@Nonnull String name, @Nonnull XMaterial icon, @Nonnull PermissionType type) { + this(name, icon, type, new HashMap<>()); + } + + protected BasicPermission(@Nonnull String name, @Nonnull XMaterial icon, @Nonnull PermissionType type, Map defaultValues) { this.name = name; this.icon = icon; this.type = type; + if (defaultValues.isEmpty()) { + this.defaultValues = new HashMap<>(); + this.defaultValues.put(IslandRole.VISITOR, false); + this.defaultValues.put(IslandRole.MEMBER, true); + this.defaultValues.put(IslandRole.OPERATOR, true); + this.defaultValues.put(IslandRole.COOP, true); + this.defaultValues.put(IslandRole.OWNER, true); + } else { + this.defaultValues = defaultValues; + } } public ItemStack getItem(Island island, IslandRole role) { @@ -72,4 +92,8 @@ public abstract class BasicPermission { public PermissionType getType() { return this.type; } + + public Map getDefaultValues() { + return defaultValues; + } } diff --git a/src/main/java/com/craftaro/skyblock/permission/ListeningPermission.java b/src/main/java/com/craftaro/skyblock/permission/ListeningPermission.java index 5ee20e70..c4bc7b23 100644 --- a/src/main/java/com/craftaro/skyblock/permission/ListeningPermission.java +++ b/src/main/java/com/craftaro/skyblock/permission/ListeningPermission.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.permission; +import com.craftaro.skyblock.island.IslandRole; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.skyblock.SkyBlock; @@ -34,11 +35,17 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; +import java.util.Map; + public abstract class ListeningPermission extends BasicPermission { protected ListeningPermission(String name, XMaterial icon, PermissionType type) { super(name, icon, type); } + protected ListeningPermission(String name, XMaterial icon, PermissionType type, Map defaultValues) { + super(name, icon, type, defaultValues); + } + public void onInteract(PlayerInteractEvent event) { } diff --git a/src/main/java/com/craftaro/skyblock/permission/PermissionManager.java b/src/main/java/com/craftaro/skyblock/permission/PermissionManager.java index 9db2e4aa..433c2ae3 100644 --- a/src/main/java/com/craftaro/skyblock/permission/PermissionManager.java +++ b/src/main/java/com/craftaro/skyblock/permission/PermissionManager.java @@ -1,5 +1,7 @@ package com.craftaro.skyblock.permission; +import com.craftaro.core.compatibility.MajorServerVersion; +import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.config.FileManager; import com.craftaro.skyblock.island.Island; @@ -141,6 +143,10 @@ public class PermissionManager { registerPermission(new HungerPermission(plugin)); } + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_20)) { + registerPermission(new SignEditPermission(plugin)); + } + this.registeredHandlers = this.registeredHandlers.stream() .sorted(Comparator.comparingInt(h -> h.getHandler().getAnnotation(PermissionHandler.class).priority().ordinal())) .collect(Collectors.toList()); @@ -153,13 +159,16 @@ public class PermissionManager { switch (permission.getType()) { case GENERIC: if (settingsConfigLoad.getString("Settings.Visitor." + permission.getName()) == null) { - settingsConfigLoad.set("Settings.Visitor." + permission.getName(), true); + settingsConfigLoad.set("Settings.Visitor." + permission.getName(), permission.getDefaultValues().get(IslandRole.VISITOR)); + if (permission.getName().equals("EditSign")) { + System.err.println("Default EditSign Visitor permission set to: " + permission.getDefaultValues().get(IslandRole.VISITOR)); + } } if (settingsConfigLoad.getString("Settings.Member." + permission.getName()) == null) { - settingsConfigLoad.set("Settings.Member." + permission.getName(), true); + settingsConfigLoad.set("Settings.Member." + permission.getName(), permission.getDefaultValues().get(IslandRole.MEMBER)); } if (settingsConfigLoad.getString("Settings.Coop." + permission.getName()) == null) { - settingsConfigLoad.set("Settings.Coop." + permission.getName(), true); + settingsConfigLoad.set("Settings.Coop." + permission.getName(), permission.getDefaultValues().get(IslandRole.COOP)); } break; case OPERATOR: diff --git a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/AnimalBreedingPermission.java b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/AnimalBreedingPermission.java index 615071ee..444360fe 100644 --- a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/AnimalBreedingPermission.java +++ b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/AnimalBreedingPermission.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.permission.permissions.listening; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -49,7 +50,7 @@ public class AnimalBreedingPermission extends ListeningPermission { } else if (entity.getType() == EntityType.CHICKEN) { if (!(XMaterial.WHEAT_SEEDS.isSimilar(is) || XMaterial.PUMPKIN_SEEDS.isSimilar(is) || XMaterial.MELON_SEEDS.isSimilar(is))) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { if (!(XMaterial.BEETROOT_SEEDS.isSimilar(is))) { return; } @@ -86,12 +87,12 @@ public class AnimalBreedingPermission extends ListeningPermission { return; } } else { - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_10)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_10)) { if (entity.getType() == EntityType.LLAMA) { if (!(XMaterial.HAY_BLOCK.isSimilar(is))) { return; } - } else if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { + } else if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { if (entity.getType() == EntityType.TURTLE) { if (!(XMaterial.SEAGRASS.isSimilar(is))) { return; diff --git a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/DamagePermission.java b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/DamagePermission.java index da79ef49..f358f954 100644 --- a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/DamagePermission.java +++ b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/DamagePermission.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.permission.permissions.listening; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -37,7 +38,7 @@ public class DamagePermission extends ListeningPermission { return; } } else { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_12)) { if (event.getCause() == EntityDamageEvent.DamageCause.valueOf("ENTITY_SWEEP_ATTACK")) { EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) event; diff --git a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/PortalPermission.java b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/PortalPermission.java index 2115b499..537a148e 100644 --- a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/PortalPermission.java +++ b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/PortalPermission.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.permission.permissions.listening; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -59,7 +60,7 @@ public class PortalPermission extends ListeningPermission { if (event.getCause() == PlayerTeleportEvent.TeleportCause.ENDER_PEARL || event.getCause() == PlayerTeleportEvent.TeleportCause.NETHER_PORTAL || event.getCause() == PlayerTeleportEvent.TeleportCause.END_PORTAL - || (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9) + || (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9) && event.getCause() == PlayerTeleportEvent.TeleportCause.END_GATEWAY)) { /*event.getPlayer().teleport(getToLocation(event.getFrom(), event.getPlayer())); Location to = getToLocation(event.getFrom(), event.getPlayer()); diff --git a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/SignEditPermission.java b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/SignEditPermission.java new file mode 100644 index 00000000..6aa3a57d --- /dev/null +++ b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/SignEditPermission.java @@ -0,0 +1,42 @@ +package com.craftaro.skyblock.permission.permissions.listening; + +import com.craftaro.skyblock.SkyBlock; +import com.craftaro.skyblock.island.IslandRole; +import com.craftaro.skyblock.permission.ListeningPermission; +import com.craftaro.skyblock.permission.PermissionHandler; +import com.craftaro.skyblock.permission.PermissionType; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerInteractEvent; + +import java.util.HashMap; +import java.util.Map; + +public class SignEditPermission extends ListeningPermission { + + private final SkyBlock plugin; + + public SignEditPermission(SkyBlock plugin) { + super("EditSign", XMaterial.OAK_SIGN, PermissionType.GENERIC, new HashMap() {{ + put(IslandRole.VISITOR, false); + put(IslandRole.MEMBER, true); + put(IslandRole.OPERATOR, true); + put(IslandRole.COOP, true); + put(IslandRole.OWNER, true); + }}); + this.plugin = plugin; + } + + @PermissionHandler + public void onInteract(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + + Player player = event.getPlayer(); + + if (event.getClickedBlock().getType().name().contains("SIGN")) { + cancelAndMessage(event, player, this.plugin, this.plugin.getMessageManager()); + } + } +} diff --git a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/TradingPermission.java b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/TradingPermission.java index 734f36f0..0b9b448b 100644 --- a/src/main/java/com/craftaro/skyblock/permission/permissions/listening/TradingPermission.java +++ b/src/main/java/com/craftaro/skyblock/permission/permissions/listening/TradingPermission.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.permission.permissions.listening; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -26,7 +27,7 @@ public class TradingPermission extends ListeningPermission { Player player = event.getPlayer(); if (event.getRightClicked().getType() == EntityType.VILLAGER - || ServerVersion.isServerVersionAtLeast(ServerVersion.V1_14) + || MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_14) && event.getRightClicked().getType() == EntityType.WANDERING_TRADER) { cancelAndMessage(event, player, this.plugin, this.messageManager); } diff --git a/src/main/java/com/craftaro/skyblock/scoreboard/Board.java b/src/main/java/com/craftaro/skyblock/scoreboard/Board.java index 014e86ea..a919eeea 100644 --- a/src/main/java/com/craftaro/skyblock/scoreboard/Board.java +++ b/src/main/java/com/craftaro/skyblock/scoreboard/Board.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.scoreboard; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.placeholder.PlaceholderManager; @@ -24,7 +25,7 @@ class Board { this.player = player; this.plugin = plugin; this.board = this.plugin.getServer().getScoreboardManager().getNewScoreboard(); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { this.objective = this.board.registerNewObjective("sb1", "sb2", "sb3"); } else { this.objective = this.board.registerNewObjective("sb1", "sb2"); @@ -66,7 +67,7 @@ class Board { this.cache.put(line, string); ScoreboardLine parts; - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { parts = convertIntoPieces(string, 64); } else { parts = convertIntoPieces(string, 16); diff --git a/src/main/java/com/craftaro/skyblock/stackable/Stackable.java b/src/main/java/com/craftaro/skyblock/stackable/Stackable.java index 7237e98b..2c622c87 100644 --- a/src/main/java/com/craftaro/skyblock/stackable/Stackable.java +++ b/src/main/java/com/craftaro/skyblock/stackable/Stackable.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.stackable; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.third_party.com.cryptomorin.xseries.XSound; @@ -147,7 +148,7 @@ public class Stackable { as.setVisible(false); as.setGravity(false); as.setSmall(true); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { as.setMarker(true); } as.setBasePlate(true); diff --git a/src/main/java/com/craftaro/skyblock/tasks/MobNetherWaterTask.java b/src/main/java/com/craftaro/skyblock/tasks/MobNetherWaterTask.java index 4d56fa2e..ee304af5 100644 --- a/src/main/java/com/craftaro/skyblock/tasks/MobNetherWaterTask.java +++ b/src/main/java/com/craftaro/skyblock/tasks/MobNetherWaterTask.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.tasks; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.island.IslandWorld; @@ -50,7 +51,7 @@ public class MobNetherWaterTask extends BukkitRunnable { if (ent instanceof Blaze || ent instanceof MagmaCube || ent instanceof Wither || ent instanceof Ghast) return true; - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { return ent.getType() == EntityType.WITHER_SKELETON; } else { return ent instanceof Skeleton && ((Skeleton) ent).getSkeletonType() == Skeleton.SkeletonType.WITHER; diff --git a/src/main/java/com/craftaro/skyblock/utils/item/InventoryUtil.java b/src/main/java/com/craftaro/skyblock/utils/item/InventoryUtil.java index b1405676..dec8f430 100644 --- a/src/main/java/com/craftaro/skyblock/utils/item/InventoryUtil.java +++ b/src/main/java/com/craftaro/skyblock/utils/item/InventoryUtil.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.utils.item; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import org.bukkit.GameMode; import org.bukkit.Material; @@ -20,7 +21,7 @@ public class InventoryUtil { ItemStack is = ammo.get(index); ItemMeta im = is.getItemMeta(); - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { if (((Damageable) im).getDamage() != 0) { continue; } @@ -56,7 +57,7 @@ public class InventoryUtil { ItemMeta im = is.getItemMeta(); if (!im.hasDisplayName()) { - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { if (((Damageable) im).getDamage() != 0) { continue; } diff --git a/src/main/java/com/craftaro/skyblock/utils/item/ItemStackUtil.java b/src/main/java/com/craftaro/skyblock/utils/item/ItemStackUtil.java index 9d43f03c..73ae7d1b 100644 --- a/src/main/java/com/craftaro/skyblock/utils/item/ItemStackUtil.java +++ b/src/main/java/com/craftaro/skyblock/utils/item/ItemStackUtil.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.utils.item; import com.craftaro.core.compatibility.ClassMapping; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.MethodMapping; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -15,10 +16,12 @@ import java.io.DataInputStream; import java.io.DataOutput; import java.io.DataOutputStream; import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.math.BigInteger; +import java.util.Arrays; public class ItemStackUtil { - private static final boolean isAbove1_16_R1 = ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16) + private static final boolean isAbove1_16_R1 = MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16) && !ServerVersion.getServerVersionString().equals("v1_16_R1"); public static ItemStack deserializeItemStack(String data) { @@ -27,47 +30,59 @@ public class ItemStackUtil { ItemStack itemStack = null; - try { - Class NBTTagCompoundClass = ClassMapping.NBT_TAG_COMPOUND.getClazz(); - Class NMSItemStackClass = ClassMapping.ITEM_STACK.getClazz(); - Object NBTTagCompound = isAbove1_16_R1 ? ClassMapping.NBT_COMPRESSED_STREAM_TOOLS.getClazz() - .getMethod("a", DataInput.class).invoke(null, dataInputStream) - : ClassMapping.NBT_COMPRESSED_STREAM_TOOLS.getClazz() - .getMethod("a", DataInputStream.class).invoke(null, dataInputStream); - Object craftItemStack; + if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_20_5)) { + //We need net.minecraft.nbt.NbtIo class in this version + byte[] bytes = new BigInteger(data, 32).toByteArray(); + itemStack = ItemStack.deserializeBytes(bytes); + } else { + try { + Class NBTTagCompoundClass = ClassMapping.NBT_TAG_COMPOUND.getClazz(); + Class NMSItemStackClass = ClassMapping.ITEM_STACK.getClazz(); + Object NBTTagCompound = isAbove1_16_R1 ? ClassMapping.NBT_COMPRESSED_STREAM_TOOLS.getClazz() + .getMethod("a", DataInput.class).invoke(null, dataInputStream) + : ClassMapping.NBT_COMPRESSED_STREAM_TOOLS.getClazz() + .getMethod("a", DataInputStream.class).invoke(null, dataInputStream); + Object craftItemStack; - assert NMSItemStackClass != null; - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { - craftItemStack = NMSItemStackClass.getMethod("a", NBTTagCompoundClass).invoke(null, NBTTagCompound); - } else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { - craftItemStack = NMSItemStackClass.getConstructor(NBTTagCompoundClass).newInstance(NBTTagCompound); - } else { - craftItemStack = NMSItemStackClass.getMethod("createStack", NBTTagCompoundClass).invoke(null, - NBTTagCompound); - } - - itemStack = (ItemStack) NMSUtils.getCraftClass("inventory.CraftItemStack") - .getMethod("asBukkitCopy", NMSItemStackClass).invoke(null, craftItemStack); - - // TODO: This method of serialization has some issues. Not all the names are the same between versions - // Make an exception for reeds/melon, they NEED to load in the island chest - // This code is here SPECIFICALLY to get the default.structure to load properly in all versions - // Other structures people make NEED to be saved from the version that they will be using so everything loads properly - if (itemStack.getType() == Material.AIR) { - if (NBTTagCompound.toString().equals("{id:\"minecraft:sugar_cane\",Count:1b}")) { - itemStack = XMaterial.SUGAR_CANE.parseItem(); - } else if (NBTTagCompound.toString().equals("{id:\"minecraft:melon_slice\",Count:1b}")) { - itemStack = XMaterial.MELON_SLICE.parseItem(); + assert NMSItemStackClass != null; + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { + craftItemStack = NMSItemStackClass.getMethod("a", NBTTagCompoundClass).invoke(null, NBTTagCompound); + } else if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { + craftItemStack = NMSItemStackClass.getConstructor(NBTTagCompoundClass).newInstance(NBTTagCompound); + } else { + craftItemStack = NMSItemStackClass.getMethod("createStack", NBTTagCompoundClass).invoke(null, + NBTTagCompound); } + + itemStack = (ItemStack) NMSUtils.getCraftClass("inventory.CraftItemStack") + .getMethod("asBukkitCopy", NMSItemStackClass).invoke(null, craftItemStack); + + // TODO: This method of serialization has some issues. Not all the names are the same between versions + // Make an exception for reeds/melon, they NEED to load in the island chest + // This code is here SPECIFICALLY to get the default.structure to load properly in all versions + // Other structures people make NEED to be saved from the version that they will be using so everything loads properly + if (itemStack.getType() == Material.AIR) { + if (NBTTagCompound.toString().equals("{id:\"minecraft:sugar_cane\",Count:1b}")) { + itemStack = XMaterial.SUGAR_CANE.parseItem(); + } else if (NBTTagCompound.toString().equals("{id:\"minecraft:melon_slice\",Count:1b}")) { + itemStack = XMaterial.MELON_SLICE.parseItem(); + } + } + } catch (Exception ex) { + ex.printStackTrace(); } - } catch (Exception ex) { - ex.printStackTrace(); } return itemStack; } public static String serializeItemStack(ItemStack item) { + if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_20_5)) { + //We need net.minecraft.nbt.NbtIo class in this version + byte[] bytes = item.serializeAsBytes(); + return new BigInteger(bytes).toString(32); + } + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); DataOutputStream dataOutput = new DataOutputStream(outputStream); diff --git a/src/main/java/com/craftaro/skyblock/utils/structure/SchematicUtil.java b/src/main/java/com/craftaro/skyblock/utils/structure/SchematicUtil.java index ff02e9af..19ed1906 100644 --- a/src/main/java/com/craftaro/skyblock/utils/structure/SchematicUtil.java +++ b/src/main/java/com/craftaro/skyblock/utils/structure/SchematicUtil.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.utils.structure; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.skyblock.SkyBlock; import org.bukkit.Bukkit; @@ -20,7 +21,7 @@ public class SchematicUtil { } Runnable pasteTask = () -> { - if (ServerVersion.isServerVersionAbove(ServerVersion.V1_12)) { // WorldEdit 7 + if (MajorServerVersion.isServerVersionAbove(MajorServerVersion.V1_12)) { // WorldEdit 7 com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat format = com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats.findByFile(schematicFile); try (com.sk89q.worldedit.extent.clipboard.io.ClipboardReader reader = format.getReader(Files.newInputStream(schematicFile.toPath()))) { com.sk89q.worldedit.extent.clipboard.Clipboard clipboard = reader.read(); diff --git a/src/main/java/com/craftaro/skyblock/utils/version/CompatibleSpawners.java b/src/main/java/com/craftaro/skyblock/utils/version/CompatibleSpawners.java index d72d8288..f95dc6b2 100644 --- a/src/main/java/com/craftaro/skyblock/utils/version/CompatibleSpawners.java +++ b/src/main/java/com/craftaro/skyblock/utils/version/CompatibleSpawners.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.utils.version; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.Material; @@ -197,7 +198,7 @@ public enum CompatibleSpawners { } public static CompatibleSpawners getMaterials(Material material, byte data) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { return fromString(material.name()); } diff --git a/src/main/java/com/craftaro/skyblock/utils/version/SBiome.java b/src/main/java/com/craftaro/skyblock/utils/version/SBiome.java index ae5920ef..9eaa7eac 100644 --- a/src/main/java/com/craftaro/skyblock/utils/version/SBiome.java +++ b/src/main/java/com/craftaro/skyblock/utils/version/SBiome.java @@ -1,5 +1,6 @@ package com.craftaro.skyblock.utils.version; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.utils.StringUtil; @@ -34,7 +35,7 @@ public enum SBiome { THE_VOID("SKY", XMaterial.OBSIDIAN), WARM_OCEAN(true, XMaterial.TROPICAL_FISH); - private static final boolean isPostVersion = ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13); + private static final boolean isPostVersion = MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13); private final String legacyName; private final boolean isPost13; diff --git a/src/main/java/com/craftaro/skyblock/utils/world/LocationUtil.java b/src/main/java/com/craftaro/skyblock/utils/world/LocationUtil.java index 8d29457e..8fccf4e8 100644 --- a/src/main/java/com/craftaro/skyblock/utils/world/LocationUtil.java +++ b/src/main/java/com/craftaro/skyblock/utils/world/LocationUtil.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.utils.world; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -35,7 +36,7 @@ public final class LocationUtil { Location tempLoc = LocationUtil.getDefinitiveLocation(loc.clone()); if (tempLoc.getBlock().getType() == Material.WATER) { tempLoc.getBlock().setType(Material.AIR); - } else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + } else if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { LocationUtil113.removeWaterLoggedFromLocation(tempLoc); } } @@ -72,7 +73,7 @@ public final class LocationUtil { for (locWorking.setY(locWorking.getBlockY()); locWorking.getBlockY() >= 0; locWorking.setY(locWorking.getBlockY() - 1)) { if (!locWorking.getBlock().isEmpty()) { if (locWorking.getBlock().getType() == XMaterial.WATER.parseMaterial() || - (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) && + (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13) && locWorking.getBlock().getBlockData() instanceof org.bukkit.block.data.Waterlogged)) { loc = locWorking; } @@ -90,7 +91,7 @@ public final class LocationUtil { locChecked.getBlock().getType().isBlock() && locChecked.add(0d, 1d, 0d).getBlock().getType() == XMaterial.AIR.parseMaterial() && locChecked.add(0d, 2d, 0d).getBlock().getType() == XMaterial.AIR.parseMaterial() && - !(ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) && locChecked.getBlock().getBlockData() instanceof org.bukkit.block.data.Waterlogged)) { + !(MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13) && locChecked.getBlock().getBlockData() instanceof org.bukkit.block.data.Waterlogged)) { safe = true; switch (CompatibleMaterial.getMaterial(locChecked.getBlock().getType()).orElse(XMaterial.AIR)) { case ACACIA_DOOR: // <= 1.8.8 diff --git a/src/main/java/com/craftaro/skyblock/utils/world/block/BlockUtil.java b/src/main/java/com/craftaro/skyblock/utils/world/block/BlockUtil.java index 6696f1cc..94945d1f 100644 --- a/src/main/java/com/craftaro/skyblock/utils/world/block/BlockUtil.java +++ b/src/main/java/com/craftaro/skyblock/utils/world/block/BlockUtil.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.utils.world.block; import com.craftaro.core.compatibility.ClassMapping; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.MethodMapping; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; @@ -54,7 +55,7 @@ public final class BlockUtil extends BlockUtils { blockData.setVersion(Integer.parseInt(ServerVersion.getVersionReleaseNumber())); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { blockData.setBlockData(block.getBlockData().getAsString()); } @@ -77,7 +78,7 @@ public final class BlockUtil extends BlockUtils { blockData.setPotionEffect(primaryEffectName + ":" + secondaryEffectName); blockData.setStateType(BlockStateType.BEACON.toString()); - } else if (blockState instanceof BrewingStand && ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) { + } else if (blockState instanceof BrewingStand && MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_12)) { BrewingStand brewingStand = (BrewingStand) blockState; blockData.setBrewingTime(brewingStand.getBrewingTime()); blockData.setFuelLevel(brewingStand.getFuelLevel()); @@ -191,7 +192,7 @@ public final class BlockUtil extends BlockUtils { blockData.setRotateFace(skull.getRotation().toString()); blockData.setStateType(BlockStateType.SKULL.toString()); } else { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { if (blockState instanceof EndGateway) { EndGateway endGateway = (EndGateway) blockState; blockData.setExactTeleport(endGateway.isExactTeleport()); @@ -201,7 +202,7 @@ public final class BlockUtil extends BlockUtils { blockData.setStateType(BlockStateType.ENDGATEWAY.toString()); } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { if (blockState instanceof ShulkerBox) { ShulkerBox shulkerBox = (ShulkerBox) blockState; @@ -217,7 +218,7 @@ public final class BlockUtil extends BlockUtils { } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_14)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_14)) { if (blockState instanceof Barrel) { Barrel barrel = (Barrel) blockState; @@ -232,7 +233,7 @@ public final class BlockUtil extends BlockUtils { blockData.setStateType(BlockStateType.BARREL.toString()); } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16)) { if (blockState instanceof RespawnAnchor) { RespawnAnchor respawnAnchor = (RespawnAnchor) blockState; blockData.setCharges(respawnAnchor.getCharges()); @@ -247,7 +248,7 @@ public final class BlockUtil extends BlockUtils { blockData.setFacing(((Stairs) materialData).getFacing().toString()); blockData.setDataType(BlockDataType.STAIRS.toString()); } else if (materialData instanceof org.bukkit.material.FlowerPot) { - if (ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAtOrBelow(MajorServerVersion.V1_12)) { try { World world = block.getWorld(); @@ -301,7 +302,7 @@ public final class BlockUtil extends BlockUtils { return; } - if (ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAtOrBelow(MajorServerVersion.V1_12)) { setBlockFast(block.getWorld(), block.getX(), block.getY(), block.getZ(), material, blockData.getData()); } else { block.setBlockData(Bukkit.getServer().createBlockData(blockData.getBlockData())); @@ -334,7 +335,7 @@ public final class BlockUtil extends BlockUtils { beacon.setSecondaryEffect(PotionEffectType.getByName(potionEffect[1].toUpperCase())); } state.update(); - } else if (blockTypeState == BlockStateType.BREWINGSTAND && ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) { + } else if (blockTypeState == BlockStateType.BREWINGSTAND && MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_12)) { BrewingStand brewingStand = (BrewingStand) state; brewingStand.setBrewingTime(blockData.getBrewingTime()); brewingStand.setFuelLevel(blockData.getFuelLevel()); @@ -422,14 +423,14 @@ public final class BlockUtil extends BlockUtils { skull.setRotation(BlockFace.valueOf(blockData.getRotateFace().toUpperCase())); skull.setSkullType(SkullType.valueOf(blockData.getSkullType().toUpperCase())); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_10)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_10)) { skull.setOwningPlayer(Bukkit.getServer().getOfflinePlayer(blockData.getSkullOwner())); } else { skull.setOwner(blockData.getSkullOwner()); } state.update(); } else { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { if (blockTypeState == BlockStateType.ENDGATEWAY) { EndGateway endGateway = (EndGateway) state; endGateway.setExactTeleport(blockData.isExactTeleport()); @@ -445,7 +446,7 @@ public final class BlockUtil extends BlockUtils { state.update(); } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { if (blockTypeState == BlockStateType.SHULKERBOX) { ShulkerBox shulkerBox = (ShulkerBox) state; @@ -456,7 +457,7 @@ public final class BlockUtil extends BlockUtils { } } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_14)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_14)) { if (blockTypeState == BlockStateType.BARREL) { Barrel barrel = (Barrel) state; @@ -469,7 +470,7 @@ public final class BlockUtil extends BlockUtils { } } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16)) { if (blockTypeState == BlockStateType.RESPAWN_ANCHOR) { RespawnAnchor respawnAnchor = (RespawnAnchor) state; respawnAnchor.setCharges(blockData.getCharges()); @@ -488,7 +489,7 @@ public final class BlockUtil extends BlockUtils { state.setData(stairs); } else if (blockDataType == BlockDataType.FLOWERPOT) { setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), XMaterial.STONE, (byte) 0); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_8) && ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_12)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_8) && MajorServerVersion.isServerVersionAtOrBelow(MajorServerVersion.V1_12)) { if (block.getLocation().clone().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.AIR) { setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), XMaterial.STONE, (byte) 0); } @@ -533,11 +534,11 @@ public final class BlockUtil extends BlockUtils { materialStr = null; if (blockData.getVersion() > 12) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { materialStr = flower[0].toUpperCase(); } } else { - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13)) { materialStr = flower[0].toUpperCase(); } } @@ -558,7 +559,7 @@ public final class BlockUtil extends BlockUtils { if (bottomBlock.getType() == Material.AIR && !topBlock.getType().name().equals("DOUBLE_PLANT")) { bottomBlock.setType(XMaterial.LARGE_FERN.parseMaterial()); - if (ServerVersion.isServerVersionBelow(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionBelow(MajorServerVersion.V1_13)) { try { bottomBlock.getClass().getMethod("setData", byte.class).invoke(bottomBlock, (byte) 2); } catch (Exception ex) { diff --git a/src/main/java/com/craftaro/skyblock/utils/world/entity/EntityUtil.java b/src/main/java/com/craftaro/skyblock/utils/world/entity/EntityUtil.java index f8f4e35f..0b3b16b0 100644 --- a/src/main/java/com/craftaro/skyblock/utils/world/entity/EntityUtil.java +++ b/src/main/java/com/craftaro/skyblock/utils/world/entity/EntityUtil.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.utils.world.entity; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.nms.Nms; import com.craftaro.skyblock.utils.item.ItemStackUtil; @@ -119,8 +120,8 @@ public final class EntityUtil { LivingEntity livingEntity = (LivingEntity) entity; EntityEquipment entityEquipment = livingEntity.getEquipment(); - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_10)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_9)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_10)) { livingEntity.setAI(entityData.hasAI()); } @@ -175,7 +176,7 @@ public final class EntityUtil { Material material = CompatibleMaterial.getMaterial(materialData[0].toUpperCase()).get().parseMaterial(); if (material != null) { - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_13)) { ((Enderman) entity).setCarriedBlock(Bukkit.getServer().createBlockData(material)); } else { ((Enderman) entity).setCarriedMaterial(new MaterialData(material, data)); @@ -229,7 +230,7 @@ public final class EntityUtil { villager.getInventory().setContents(items.toArray(new ItemStack[0])); } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { if (entity instanceof Llama) { Llama llama = ((Llama) entity); llama.setColor(Llama.Color.valueOf(entityData.getLlamaColor().toUpperCase())); @@ -244,7 +245,7 @@ public final class EntityUtil { llama.getInventory().setContents(items.toArray(new ItemStack[0])); } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_11)) { if (entity instanceof Parrot) { ((Parrot) entity) .setVariant(Parrot.Variant.valueOf(entityData.getParrotVariant().toUpperCase())); diff --git a/src/main/java/com/craftaro/skyblock/world/generator/VoidGenerator.java b/src/main/java/com/craftaro/skyblock/world/generator/VoidGenerator.java index b70efbbf..c25fbb43 100644 --- a/src/main/java/com/craftaro/skyblock/world/generator/VoidGenerator.java +++ b/src/main/java/com/craftaro/skyblock/world/generator/VoidGenerator.java @@ -1,6 +1,7 @@ package com.craftaro.skyblock.world.generator; import com.craftaro.core.compatibility.CompatibleBiome; +import com.craftaro.core.compatibility.MajorServerVersion; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.skyblock.SkyBlock; @@ -56,7 +57,7 @@ public class VoidGenerator extends ChunkGenerator { throw new IllegalStateException("Unexpected value: " + world.getEnvironment()); } - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) { // TODO Should be 1.15 but it works fine there + if (MajorServerVersion.isServerVersionAtLeast(MajorServerVersion.V1_16)) { // TODO Should be 1.15 but it works fine there setChunkBiome3D(biome, biomeGrid, world); } else { setChunkBiome2D(biome, biomeGrid); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3fe97d68..1084189d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -19,7 +19,6 @@ softdepend: - WorldEdit loadbefore: - Multiverse-Core - - ProtocolLib author: Craftaro authors: [ Fabrimat ] diff --git a/src/main/resources/structures/default_1_20_5.structure b/src/main/resources/structures/default_1_20_5.structure new file mode 100644 index 00000000..79a73d03 --- /dev/null +++ b/src/main/resources/structures/default_1_20_5.structure @@ -0,0 +1 @@ +eyJibG9ja3MiOiJbe1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoxLFwieVwiOi05LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjEsXCJ5XCI6LTgsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MSxcInlcIjotOCxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoxLFwieVwiOi04LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjEsXCJ5XCI6LTgsXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MSxcInlcIjotOCxcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi0xMCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi05LFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTksXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotOSxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi05LFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTksXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotOCxcInpcIjotNixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi04LFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTgsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotOCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi04LFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTgsXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotOCxcInpcIjowLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotMyxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTMsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDMscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi0zLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotMixcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTIsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDQscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi0yLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q1LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MixcInlcIjotMSxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjIsXCJ5XCI6LTEsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDUscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjoyLFwieVwiOi0xLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTExLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTEwLFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTEwLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTEwLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTksXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotOSxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi05LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTksXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotOSxcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi04LFwielwiOi02LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTgsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotOCxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi04LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTgsXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotOCxcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi04LFwielwiOjAsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDEscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi00LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotMyxcInpcIjotNSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTMsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDEscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi0zLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QyLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotMyxcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTMsXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDQscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi0yLFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotMixcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTIsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDMscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi0yLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotMixcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNSxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTEsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDQscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi0xLFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjotMSxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjMsXCJ5XCI6LTEsXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDUscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjozLFwieVwiOi0xLFwielwiOi0xLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6MyxcInlcIjowLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEyLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTExLFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiU0FORFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6c2FuZFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTExLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTExLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEwLFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEwLFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiU0FORFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6c2FuZFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEwLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEwLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEwLFwielwiOi0xLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTksXCJ6XCI6LTYsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotOSxcInpcIjotNSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi05LFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiU0FORFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6c2FuZFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTksXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotOSxcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi05LFwielwiOi0xLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTksXCJ6XCI6MCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi04LFwielwiOi02LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTgsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotOCxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi04LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTgsXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotOCxcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi04LFwielwiOjAsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJBSVJcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmFpclwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTcsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJDSEVTVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Y2hlc3RbZmFjaW5nXFx1MDAzZG5vcnRoLHR5cGVcXHUwMDNkc2luZ2xlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJDSEVTVFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOntcIjBcIjpcImZvbTIwMDAwMDAwMDAwdnZobTRvMzBjcmc3Y2k5Yzk0NjRtYjlhcHI2Y3VvcjBzMG51Y28zMHA5NjYzbzZkcG42NG1qOWU5OTYybmNlYTloNzZhcGowOW43MnZqOWJjNWc2MG8zMjAwMGVqbzA1NmNyMDAwMDBcIixcIjFcIjpcIjdzYjEwMDAwMDAwMDAwZnZvcjJjMWc2ZG8zbTk0bTRpMzJiNWtsY3RqNmZjZGdlMGJ2NmMxZ2NrajMxMjM2c3JqMmI5a240a2oxYm03NTRyamU5cHU1aXZqbTk5aDc2YXBqMDluNzJ2ajliYzVnNjBvMzQwMDAwNmZ0a2JvdjAwMDAwXCIsXCIyXCI6XCJ2aGM0MDAwMDAwMDAwMXZ2M2M5ZzYwcG4wZXA0aW9pOGM5Y21pbGptY3B0aG0xbzFmc3BnNjFpaWNjN2djdmplYzlkNmlzaWljNWVvaWxpOWY5Yjc2MHBqMDluNzJ2ajliYzVnNjBvMzIwMDA1ZWkxMmQ0czAwMDAwXCIsXCIzXCI6XCIzdTVnZzAwMDAwMDAwMDd2c2RoNjBvMzZzMXI0aWIyOTFoNWlxYW1lcGo3bTZvNzA1dmo2MG82YTloZ3UxaXVkcGg1a3FiaWE5Z2xyMmltYXB0NW1hcGowOW43MnZqOWJjNWc2MG8zNDAwMGU4ZWZqY3NyZzAwMDBcIixcIjRcIjpcIjdzYjEwMDAwMDAwMDAwZnZvcjJjMWc2ZG8zbTk0bTRpMzJiNWtsY3RqNmZjZGdlMGJ2NmMxZ2NrajMxMjM2c3JqMmI5a240a2oxYm03NTRpYjJiaGg3aWtqZWU5b21tMnBqMDluNzJ2ajliYzVnNjBvMzQwMDA1OXIyZjc0djAwMDAwXCIsXCI1XCI6XCJmb20yMDAwMDAwMDAwMHZ2aG00bzMwY3JnN2NpOWM5NDY0bWI5YXByNmN1b3IwczBudWNvMzBwOTY2MjQ2ZnBuNjRtajllOTk2Mm5jOWE1MzZpcmk2ZXBpNWl1amlkOWtrbWNwajA5bjcydmo5YmM1ZzYwbzM0MDAwOXV0bDNuNTAwMDAwMFwiLFwiNlwiOlwidmhjNDAwMDAwMDAwMDF2djNjOWc2MHBuMGVwNGlvaThjOWNtaWxqbWNwdGhtMW8xZnNwZzYxaWljYzQ4Y2pqZWM5ZDZpc2lpYzVlb2lrYmlkOXNtOGtqcWVwaDVtYXBqMDluNzJ2ajliYzVnNjBvMzQwMDBjdG1oYzJzdWcwMDAwXCIsXCI3XCI6XCIxdjJvODAwMDAwMDAwMDN2dTZvajBjMWplMHRpOTVoNGdvaXBkNWI3Y3BqcjNjM2cydnBqMGMzNTRvbzhncGY2c29pcWQ1cDU0b2F0aDU5NTRyMmVmNWttc3NhNmFwdjdtYXBqMDluNzJ2ajliYzVnNjBvMzQwMDA3bXFvOGYwdmcwMDAwXCIsXCI4XCI6XCIzdTVnZzAwMDAwMDAwMDd2c2RoNjBvMzZzMXI0aWIyOTFoNWlxYW1lcGo3bTZvNzA1dmo2MG82YTloZ3AxaTZkcGg1a3FiaWE5Z2xyMmloYXA4bnN2MnVmNWttc3NhNmFwdjdtYXBqMDluNzJ2ajliYzVnNjBvMzQwMDAyZHM4ZjNkMGcwMDAwXCIsXCI5XCI6XCI3c2IxMDAwMDAwMDAwMGZ2b3IyYzFnNmRvM205NG00aTMyYjVrbGN0ajZmY2RnZTBidjZjMWdja2ozMTIzNGNyajJiOWtuNGtqMWJtNTU0c2oxZTU0bW1jcGowOW43MnZqOWJjNWc2MG8zNDAwMDc3ZzllaWtzZzAwMDBcIixcIjEwXCI6XCJ2aGM0MDAwMDAwMDAwMXZ2M2M5ZzYwcG4wZXA0aW9pOGM5Y21pbGptY3B0aG0xbzFmc3BnNjFpaWNjN2djdmplYzlkNmlzaWljNWVva2thaWE5bDY2MnBqMDluNzJ2ajliYzVnNjBvMzQwMDAzMjlzaXZvczAwMDAwXCIsXCIxMVwiOlwidmhjNDAwMDAwMDAwMDF2djNjOWc2MHBuMGVwNGlvaThjOWNtaWxqbWNwdGhtMW8xZnNwZzYxaWljYzdnY3ZqZWM5ZDZpc2lpYzVlb2lsanE4OWttNjJwajA5bjcydmo5YmM1ZzYwbzM0MDAwOGNvMDRlc3MwMDAwMFwiLFwiMTJcIjpcIjN1NWdnMDAwMDAwMDAwN3ZzZGg2MG8zNnMxcjRpYjI5MWg1aXFhbWVwajdtNm83MDV2ajYwbzZhOWhncDFpNmRwaDVrcWJpYTlnbHIzaWk5OWttY2lpMWRoYjdraGplOTlrbW0ycGowOW43MnZqOWJjNWc2MG8zNDAwMGZwYzgyNWwwZzAwMDBcIixcIjEzXCI6XCIxdjJvODAwMDAwMDAwMDN2Z2JnZTExNjAzMDMwNXEybmthNDF0bjIwOTZ1M20wcW5oNG9sNGc2ZDRrNm5udXV1Z2lpNG9lczUzbGg0cmFvMXBjZGwycXM1dW44cDZ0aHFjZWxrNDRhNXB2NzU1b2xkaWc5MzFzM3Q1aTA3OHUwMWg4M3I3bjkyZzAwMDBcIixcIjE0XCI6XCJ2aGM0MDAwMDAwMDAwMXZvNW80b2dsMDFnMWcydDFicTUyMGV0b2ZjYW1kam4xNWFnY2M2ZDg1NmlmMXZ0djZzMGdoc3FmODQzbmxramFvMzk0ZHRicmM1dWRhZTlycm1vMTk5anByMzdjNDhqYXE4OThlbjl1MWMwMW92dG9sNWJzbDFnMDAwMFwiLFwiMTVcIjpcImZvbTIwMDAwMDAwMDAwdnZobTRvMzBjcmc3Y2k5Yzk0NjRtYjlhcHI2Y3VvcjBzMG51Y28zMHA5NjYyNDZmcG42NG1qOWU5OTYybmNlYTk1NmlwaWE4NW01NHZpbWY1c2ttY3BqMDluNzJ2ajliYzVnNjBvMzQwMDAxajU0M3U1MDAwMDAwXCJ9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotNyxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MT0dcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sb2dbYXhpc1xcdTAwM2R5XVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTcsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTE9HXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbG9nW2F4aXNcXHUwMDNkeV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi02LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xPR1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xvZ1theGlzXFx1MDAzZHldXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotNSxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMSxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTQsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTE9HXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbG9nW2F4aXNcXHUwMDNkeV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi00LFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QxLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotNCxcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTMsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDEscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi0zLFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xPR1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xvZ1theGlzXFx1MDAzZHldXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotMyxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMSxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTMsXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDIscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi0zLFwielwiOi0xLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotMixcInpcIjotNSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTIsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDEscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi0yLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QyLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotMixcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTIsXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDQscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi0xLFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotMSxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6LTEsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDMscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo0LFwieVwiOi0xLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NCxcInlcIjotMSxcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6MCxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6MCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjQsXCJ5XCI6MCxcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0xMSxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0xMCxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0xMCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0xMCxcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi05LFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTksXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotOSxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi05LFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTksXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotOCxcInpcIjotNixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi04LFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTgsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotOCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi04LFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTgsXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotOCxcInpcIjowLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QxLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotNCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTMsXCJ6XCI6LTUsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDIscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0zLFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QxLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotMyxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTMsXCJ6XCI6LTIsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDMscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0zLFwielwiOi0xLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotMixcInpcIjotNSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTIsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDIscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0yLFwielwiOi0zLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotMixcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTIsXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDUscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0xLFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotMSxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6LTEsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDQscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo1LFwieVwiOi0xLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q1LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NSxcInlcIjotMSxcInpcIjotMSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjUsXCJ5XCI6MCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi0xMCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi05LFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTksXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJESVJUXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpkaXJ0XCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotOSxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkRJUlRcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmRpcnRcIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi05LFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTksXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotOCxcInpcIjotNixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi04LFwielwiOi01LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTgsXCJ6XCI6LTQsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotOCxcInpcIjotMyxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi04LFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTgsXCJ6XCI6LTEsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotOCxcInpcIjowLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2QzLHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotMyxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMixwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTMsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDMscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi0zLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q0LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotMixcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkMyxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTIsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDQscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi0yLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiT0FLX0xFQVZFU1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6b2FrX2xlYXZlc1tkaXN0YW5jZVxcdTAwM2Q1LHBlcnNpc3RlbnRcXHUwMDNkZmFsc2Usd2F0ZXJsb2dnZWRcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NixcInlcIjotMSxcInpcIjotNCxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIk9BS19MRUFWRVNcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0Om9ha19sZWF2ZXNbZGlzdGFuY2VcXHUwMDNkNCxwZXJzaXN0ZW50XFx1MDAzZGZhbHNlLHdhdGVybG9nZ2VkXFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjYsXCJ5XCI6LTEsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJPQUtfTEVBVkVTXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpvYWtfbGVhdmVzW2Rpc3RhbmNlXFx1MDAzZDUscGVyc2lzdGVudFxcdTAwM2RmYWxzZSx3YXRlcmxvZ2dlZFxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo2LFwieVwiOi0xLFwielwiOi0yLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiRElSVFwiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6ZGlydFwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjcsXCJ5XCI6LTksXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NyxcInlcIjotOCxcInpcIjotNSxcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo3LFwieVwiOi04LFwielwiOi00LFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfSx7XCJtYXRlcmlhbFwiOlwiR1JBU1NfQkxPQ0tcIixcImJsb2NrRGF0YVwiOlwibWluZWNyYWZ0OmdyYXNzX2Jsb2NrW3Nub3d5XFx1MDAzZGZhbHNlXVwiLFwiYmlvbWVcIjpcIlBMQUlOU1wiLFwic3RhdGVUeXBlXCI6XCJOT1JNQUxcIixcImRhdGFUeXBlXCI6XCJOT1JNQUxcIixcImJhc2VDb2xvclwiOlwiQ29sb3I6W2FyZ2IweEZGRkZGRkZGXVwiLFwicG90aW9uRWZmZWN0XCI6XCJDcmFmdFBvdGlvbkVmZmVjdFR5cGVbbWluZWNyYWZ0OnNwZWVkXVwiLFwiY29tbWFuZFwiOlwiXCIsXCJjb21tYW5kQmxvY2tOYW1lXCI6XCJcIixcImVudGl0eVwiOlwiQ09XXCIsXCJleGl0TG9jYXRpb25cIjpcIlwiLFwiZmxvd2VyXCI6XCJSRURfRFlFOjBcIixcInBsYXlpbmdcIjpcIk1VU0lDX0RJU0NfQ0hJUlBcIixcInNpZ25MaW5lc1wiOltdLFwicm90YXRlRmFjZVwiOlwiTk9SVEhcIixcInNrdWxsT3duZXJcIjpcIk5vdGNoXCIsXCJza3VsbFR5cGVcIjpcIlBMQVlFUlwiLFwiY2hhcmdlc1wiOjAsXCJpbnZlbnRvcnlcIjp7fSxcInZlcnNpb25cIjoxLFwieFwiOjcsXCJ5XCI6LTgsXCJ6XCI6LTMsXCJicmV3aW5nVGltZVwiOjAsXCJmdWVsTGV2ZWxcIjowLFwiZGVsYXlcIjowLFwiZGF0YVwiOjAsXCJidXJuVGltZVwiOjAsXCJjb29rVGltZVwiOjAsXCJwYXR0ZXJuc1wiOltdLFwiZXhhY3RUZWxlcG9ydFwiOnRydWV9LHtcIm1hdGVyaWFsXCI6XCJHUkFTU19CTE9DS1wiLFwiYmxvY2tEYXRhXCI6XCJtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2tbc25vd3lcXHUwMDNkZmFsc2VdXCIsXCJiaW9tZVwiOlwiUExBSU5TXCIsXCJzdGF0ZVR5cGVcIjpcIk5PUk1BTFwiLFwiZGF0YVR5cGVcIjpcIk5PUk1BTFwiLFwiYmFzZUNvbG9yXCI6XCJDb2xvcjpbYXJnYjB4RkZGRkZGRkZdXCIsXCJwb3Rpb25FZmZlY3RcIjpcIkNyYWZ0UG90aW9uRWZmZWN0VHlwZVttaW5lY3JhZnQ6c3BlZWRdXCIsXCJjb21tYW5kXCI6XCJcIixcImNvbW1hbmRCbG9ja05hbWVcIjpcIlwiLFwiZW50aXR5XCI6XCJDT1dcIixcImV4aXRMb2NhdGlvblwiOlwiXCIsXCJmbG93ZXJcIjpcIlJFRF9EWUU6MFwiLFwicGxheWluZ1wiOlwiTVVTSUNfRElTQ19DSElSUFwiLFwic2lnbkxpbmVzXCI6W10sXCJyb3RhdGVGYWNlXCI6XCJOT1JUSFwiLFwic2t1bGxPd25lclwiOlwiTm90Y2hcIixcInNrdWxsVHlwZVwiOlwiUExBWUVSXCIsXCJjaGFyZ2VzXCI6MCxcImludmVudG9yeVwiOnt9LFwidmVyc2lvblwiOjEsXCJ4XCI6NyxcInlcIjotOCxcInpcIjotMixcImJyZXdpbmdUaW1lXCI6MCxcImZ1ZWxMZXZlbFwiOjAsXCJkZWxheVwiOjAsXCJkYXRhXCI6MCxcImJ1cm5UaW1lXCI6MCxcImNvb2tUaW1lXCI6MCxcInBhdHRlcm5zXCI6W10sXCJleGFjdFRlbGVwb3J0XCI6dHJ1ZX0se1wibWF0ZXJpYWxcIjpcIkdSQVNTX0JMT0NLXCIsXCJibG9ja0RhdGFcIjpcIm1pbmVjcmFmdDpncmFzc19ibG9ja1tzbm93eVxcdTAwM2RmYWxzZV1cIixcImJpb21lXCI6XCJQTEFJTlNcIixcInN0YXRlVHlwZVwiOlwiTk9STUFMXCIsXCJkYXRhVHlwZVwiOlwiTk9STUFMXCIsXCJiYXNlQ29sb3JcIjpcIkNvbG9yOlthcmdiMHhGRkZGRkZGRl1cIixcInBvdGlvbkVmZmVjdFwiOlwiQ3JhZnRQb3Rpb25FZmZlY3RUeXBlW21pbmVjcmFmdDpzcGVlZF1cIixcImNvbW1hbmRcIjpcIlwiLFwiY29tbWFuZEJsb2NrTmFtZVwiOlwiXCIsXCJlbnRpdHlcIjpcIkNPV1wiLFwiZXhpdExvY2F0aW9uXCI6XCJcIixcImZsb3dlclwiOlwiUkVEX0RZRTowXCIsXCJwbGF5aW5nXCI6XCJNVVNJQ19ESVNDX0NISVJQXCIsXCJzaWduTGluZXNcIjpbXSxcInJvdGF0ZUZhY2VcIjpcIk5PUlRIXCIsXCJza3VsbE93bmVyXCI6XCJOb3RjaFwiLFwic2t1bGxUeXBlXCI6XCJQTEFZRVJcIixcImNoYXJnZXNcIjowLFwiaW52ZW50b3J5XCI6e30sXCJ2ZXJzaW9uXCI6MSxcInhcIjo3LFwieVwiOi04LFwielwiOi0xLFwiYnJld2luZ1RpbWVcIjowLFwiZnVlbExldmVsXCI6MCxcImRlbGF5XCI6MCxcImRhdGFcIjowLFwiYnVyblRpbWVcIjowLFwiY29va1RpbWVcIjowLFwicGF0dGVybnNcIjpbXSxcImV4YWN0VGVsZXBvcnRcIjp0cnVlfV0iLCJlbnRpdGllcyI6IltdIiwib3JpZ2luTG9jYXRpb24iOiI0Oi03Oi01OmlzbGFuZF9ub3JtYWxfd29ybGQ6LTAuMDc5MzM4NzoyLjI0OTk3OTciLCJ0aW1lIjoxNzI1NjA1OTk5MDA0LCJ2ZXJzaW9uIjoxfQ== \ No newline at end of file