diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..11042b92 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: Berserker55 # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore index c4ce894b..de385a79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .idea .vscode *_Spoiler.txt +*.bmbp *.pyc *.sfc *.wixobj @@ -12,4 +13,10 @@ README.html *multidata *multisave EnemizerCLI/ -.mypy_cache/ \ No newline at end of file +.mypy_cache/ +RaceRom.py +weights/ +/MultiMystery/ +/Players/ +/QUsb2Snes/ +/options.yaml diff --git a/Adjuster.py b/Adjuster.py index 4ab61b8c..570bcef9 100755 --- a/Adjuster.py +++ b/Adjuster.py @@ -6,6 +6,7 @@ import textwrap import sys from AdjusterMain import adjust +from Rom import get_sprite_from_name class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter): @@ -15,7 +16,8 @@ class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter): def main(): parser = argparse.ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--rom', default='ER_base.sfc', help='Path to an ALttP JAP(1.0) rom to use as a base.') + parser.add_argument('--rom', default='ER_base.sfc', help='Path to an ALttPR rom to adjust.') + parser.add_argument('--baserom', default='Zelda no Densetsu - Kamigami no Triforce (Japan).sfc', help='Path to an ALttP JAP(1.0) rom to use as a base.') parser.add_argument('--loglevel', default='info', const='info', nargs='?', choices=['error', 'info', 'warning', 'debug'], help='Select level of logging for output.') parser.add_argument('--fastmenu', default='normal', const='normal', nargs='?', choices=['normal', 'instant', 'double', 'triple', 'quadruple', 'half'], help='''\ @@ -31,6 +33,8 @@ def main(): ''') parser.add_argument('--heartcolor', default='red', const='red', nargs='?', choices=['red', 'blue', 'green', 'yellow', 'random'], help='Select the color of Link\'s heart meter. (default: %(default)s)') + parser.add_argument('--ow_palettes', default='default', choices=['default', 'random', 'blackout']) + parser.add_argument('--uw_palettes', default='default', choices=['default', 'random', 'blackout']) parser.add_argument('--sprite', help='''\ Path to a sprite sheet to use for Link. Needs to be in binary format and have a length of 0x7000 (28672) bytes, @@ -38,14 +42,15 @@ def main(): Alternatively, can be a ALttP Rom patched with a Link sprite that will be extracted. ''') + parser.add_argument('--names', default='', type=str) args = parser.parse_args() # ToDo: Validate files further than mere existance if not os.path.isfile(args.rom): - input('Could not find valid base rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom) + input('Could not find valid rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom) sys.exit(1) - if args.sprite is not None and not os.path.isfile(args.sprite): - input('Could not find link sprite sheet at given location. \nPress Enter to exit.' % args.sprite) + if args.sprite is not None and not os.path.isfile(args.sprite) and not get_sprite_from_name(args.sprite): + input('Could not find link sprite sheet at given location. \nPress Enter to exit.') sys.exit(1) # set up logger diff --git a/AdjusterMain.py b/AdjusterMain.py index 4646127c..64b1042e 100644 --- a/AdjusterMain.py +++ b/AdjusterMain.py @@ -3,32 +3,25 @@ import time import logging from Utils import output_path -from Rom import LocalRom, Sprite, apply_rom_settings +from Rom import LocalRom, apply_rom_settings def adjust(args): start = time.perf_counter() - logger = logging.getLogger('') + logger = logging.getLogger('Adjuster') logger.info('Patching ROM.') - if args.sprite is not None: - if isinstance(args.sprite, Sprite): - sprite = args.sprite - else: - sprite = Sprite(args.sprite) - else: - sprite = None - - outfilebase = os.path.basename(args.rom)[:-4] + '_adjusted' - if os.stat(args.rom).st_size in (0x200000, 0x400000) and os.path.splitext(args.rom)[-1].lower() == '.sfc': - rom = LocalRom(args.rom, False) + rom = LocalRom(args.rom, patch=False) + if os.path.isfile(args.baserom): + baserom = LocalRom(args.baserom, patch=True) + rom.orig_buffer = baserom.orig_buffer else: raise RuntimeError('Provided Rom is not a valid Link to the Past Randomizer Rom. Please provide one for adjusting.') - apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic, sprite) + apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic, args.sprite, args.ow_palettes, args.uw_palettes) - rom.write_to_file(output_path('%s.sfc' % outfilebase)) + rom.write_to_file(output_path(f'{os.path.basename(args.rom)[:-4]}_adjusted.sfc')) logger.info('Done. Enjoy.') logger.debug('Total Time: %s', time.perf_counter() - start) diff --git a/BaseClasses.py b/BaseClasses.py index 1316a99f..471ecf88 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1,26 +1,34 @@ +from __future__ import annotations + import copy from enum import Enum, unique import logging import json -from collections import OrderedDict +from collections import OrderedDict, Counter from EntranceShuffle import door_addresses -from _vendor.collections_extended import bag from Utils import int16_as_bytes +from typing import Union class World(object): + player_names: list + _region_cache: dict + difficulty_requirements: dict + required_medallions: dict - def __init__(self, players, shuffle, logic, mode, swords, difficulty, difficulty_adjustments, timer, progressive, goal, algorithm, place_dungeon_items, accessibility, shuffle_ganon, quickswap, fastmenu, disable_music, keysanity, retro, custom, customitemarray, boss_shuffle, hints): + def __init__(self, players, shuffle, logic, mode, swords, difficulty, difficulty_adjustments, timer, progressive, + goal, algorithm, accessibility, shuffle_ganon, retro, custom, customitemarray, hints): self.players = players - self.shuffle = shuffle - self.logic = logic - self.mode = mode - self.swords = swords - self.difficulty = difficulty - self.difficulty_adjustments = difficulty_adjustments - self.timer = timer + self.teams = 1 + self.shuffle = shuffle.copy() + self.logic = logic.copy() + self.mode = mode.copy() + self.swords = swords.copy() + self.difficulty = difficulty.copy() + self.difficulty_adjustments = difficulty_adjustments.copy() + self.timer = timer.copy() self.progressive = progressive - self.goal = goal + self.goal = goal.copy() self.algorithm = algorithm self.dungeons = [] self.regions = [] @@ -29,79 +37,97 @@ class World(object): self.seed = None self.precollected_items = [] self.state = CollectionState(self) - self.required_medallions = dict([(player, ['Ether', 'Quake']) for player in range(1, players + 1)]) self._cached_entrances = None self._cached_locations = None self._entrance_cache = {} - self._region_cache = {} - self._entrance_cache = {} self._location_cache = {} self.required_locations = [] - self.place_dungeon_items = place_dungeon_items # configurable in future self.shuffle_bonk_prizes = False - self.swamp_patch_required = {player: False for player in range(1, players + 1)} - self.powder_patch_required = {player: False for player in range(1, players + 1)} - self.ganon_at_pyramid = {player: True for player in range(1, players + 1)} - self.ganonstower_vanilla = {player: True for player in range(1, players + 1)} - self.sewer_light_cone = mode == 'standard' self.light_world_light_cone = False self.dark_world_light_cone = False - self.treasure_hunt_count = 0 - self.treasure_hunt_icon = 'Triforce Piece' - self.clock_mode = 'off' self.rupoor_cost = 10 self.aga_randomness = True self.lock_aga_door_in_escape = False - self.fix_trock_doors = self.shuffle != 'vanilla' or self.mode == 'inverted' self.save_and_quit_from_boss = True - self.accessibility = accessibility - self.fix_skullwoods_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] - self.fix_palaceofdarkness_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] - self.fix_trock_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] + self.accessibility = accessibility.copy() self.shuffle_ganon = shuffle_ganon self.fix_gtower_exit = self.shuffle_ganon - self.can_access_trock_eyebridge = None - self.can_access_trock_front = None - self.can_access_trock_big_chest = None - self.can_access_trock_middle = None - self.quickswap = quickswap - self.fastmenu = fastmenu - self.disable_music = disable_music - self.keysanity = keysanity - self.retro = retro + self.retro = retro.copy() self.custom = custom self.customitemarray = customitemarray - self.can_take_damage = True - self.difficulty_requirements = None - self.fix_fake_world = True - self.boss_shuffle = boss_shuffle - self.hints = hints - self.crystals_needed_for_ganon = 7 - self.crystals_needed_for_gt = 7 + self.hints = hints.copy() self.dynamic_regions = [] self.dynamic_locations = [] self.spoiler = Spoiler(self) self.lamps_needed_for_dark_rooms = 1 - def intialize_regions(self): - for region in self.regions: - region.world = self + for player in range(1, players + 1): + def set_player_attr(attr, val): + self.__dict__.setdefault(attr, {})[player] = val + set_player_attr('_region_cache', {}) + set_player_attr('player_names', []) + set_player_attr('remote_items', False) + set_player_attr('required_medallions', ['Ether', 'Quake']) + set_player_attr('swamp_patch_required', False) + set_player_attr('powder_patch_required', False) + set_player_attr('ganon_at_pyramid', True) + set_player_attr('ganonstower_vanilla', True) + set_player_attr('sewer_light_cone', self.mode[player] == 'standard') + set_player_attr('fix_trock_doors', self.shuffle[player] != 'vanilla' or self.mode[player] == 'inverted') + set_player_attr('fix_skullwoods_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']) + set_player_attr('fix_palaceofdarkness_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']) + set_player_attr('fix_trock_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']) + set_player_attr('can_access_trock_eyebridge', None) + set_player_attr('can_access_trock_front', None) + set_player_attr('can_access_trock_big_chest', None) + set_player_attr('can_access_trock_middle', None) + set_player_attr('fix_fake_world', True) + set_player_attr('mapshuffle', False) + set_player_attr('compassshuffle', False) + set_player_attr('keyshuffle', False) + set_player_attr('bigkeyshuffle', False) + set_player_attr('difficulty_requirements', None) + set_player_attr('boss_shuffle', 'none') + set_player_attr('enemy_shuffle', 'none') + set_player_attr('enemy_health', 'default') + set_player_attr('enemy_damage', 'default') + set_player_attr('beemizer', 0) + set_player_attr('progressive', 'on') + set_player_attr('escape_assist', []) + set_player_attr('crystals_needed_for_ganon', 7) + set_player_attr('crystals_needed_for_gt', 7) + set_player_attr('open_pyramid', False) + set_player_attr('treasure_hunt_icon', 'Triforce Piece') + set_player_attr('treasure_hunt_count', 0) + set_player_attr('clock_mode', False) + set_player_attr('can_take_damage', True) - def get_region(self, regionname, player): - if isinstance(regionname, Region): - return regionname + def get_name_string_for_object(self, obj) -> str: + return obj.name if self.players == 1 else f'{obj.name} ({self.get_player_names(obj.player)})' + + def get_player_names(self, player) -> str: + return ", ".join( + [name for i, name in enumerate(self.player_names[player]) if self.player_names[player].index(name) == i]) + + def initialize_regions(self, regions=None): + for region in regions if regions else self.regions: + region.world = self + self._region_cache[region.player][region.name] = region + + def get_regions(self, player=None): + return self.regions if player is None else self._region_cache[player].values() + + def get_region(self, regionname: str, player: int) -> Region: try: - return self._region_cache[(regionname, player)] + return self._region_cache[player][regionname] except KeyError: for region in self.regions: if region.name == regionname and region.player == player: - self._region_cache[(regionname, player)] = region + assert not region.world # this should only happen before initialization return region raise RuntimeError('No such region %s for player %d' % (regionname, player)) - def get_entrance(self, entrance, player): - if isinstance(entrance, Entrance): - return entrance + def get_entrance(self, entrance: str, player: int) -> Entrance: try: return self._entrance_cache[(entrance, player)] except KeyError: @@ -112,9 +138,7 @@ class World(object): return exit raise RuntimeError('No such entrance %s for player %d' % (entrance, player)) - def get_location(self, location, player): - if isinstance(location, Location): - return location + def get_location(self, location: str, player: int) -> Location: try: return self._location_cache[(location, player)] except KeyError: @@ -125,16 +149,13 @@ class World(object): return r_location raise RuntimeError('No such location %s for player %d' % (location, player)) - def get_dungeon(self, dungeonname, player): - if isinstance(dungeonname, Dungeon): - return dungeonname - + def get_dungeon(self, dungeonname: str, player: int) -> Dungeon: for dungeon in self.dungeons: if dungeon.name == dungeonname and dungeon.player == player: return dungeon raise RuntimeError('No such dungeon %s for player %d' % (dungeonname, player)) - def get_all_state(self, keys=False): + def get_all_state(self, keys=False) -> CollectionState: ret = CollectionState(self) def soft_collect(item): @@ -142,42 +163,44 @@ class World(object): if 'Sword' in item.name: if ret.has('Golden Sword', item.player): pass - elif ret.has('Tempered Sword', item.player) and self.difficulty_requirements.progressive_sword_limit >= 4: - ret.prog_items.add(('Golden Sword', item.player)) - elif ret.has('Master Sword', item.player) and self.difficulty_requirements.progressive_sword_limit >= 3: - ret.prog_items.add(('Tempered Sword', item.player)) - elif ret.has('Fighter Sword', item.player) and self.difficulty_requirements.progressive_sword_limit >= 2: - ret.prog_items.add(('Master Sword', item.player)) - elif self.difficulty_requirements.progressive_sword_limit >= 1: - ret.prog_items.add(('Fighter Sword', item.player)) + elif ret.has('Tempered Sword', item.player) and self.difficulty_requirements[ + item.player].progressive_sword_limit >= 4: + ret.prog_items['Golden Sword', item.player] += 1 + elif ret.has('Master Sword', item.player) and self.difficulty_requirements[ + item.player].progressive_sword_limit >= 3: + ret.prog_items['Tempered Sword', item.player] += 1 + elif ret.has('Fighter Sword', item.player) and self.difficulty_requirements[item.player].progressive_sword_limit >= 2: + ret.prog_items['Master Sword', item.player] += 1 + elif self.difficulty_requirements[item.player].progressive_sword_limit >= 1: + ret.prog_items['Fighter Sword', item.player] += 1 elif 'Glove' in item.name: if ret.has('Titans Mitts', item.player): pass elif ret.has('Power Glove', item.player): - ret.prog_items.add(('Titans Mitts', item.player)) + ret.prog_items['Titans Mitts', item.player] += 1 else: - ret.prog_items.add(('Power Glove', item.player)) + ret.prog_items['Power Glove', item.player] += 1 elif 'Shield' in item.name: if ret.has('Mirror Shield', item.player): pass - elif ret.has('Red Shield', item.player) and self.difficulty_requirements.progressive_shield_limit >= 3: - ret.prog_items.add(('Mirror Shield', item.player)) - elif ret.has('Blue Shield', item.player) and self.difficulty_requirements.progressive_shield_limit >= 2: - ret.prog_items.add(('Red Shield', item.player)) - elif self.difficulty_requirements.progressive_shield_limit >= 1: - ret.prog_items.add(('Blue Shield', item.player)) + elif ret.has('Red Shield', item.player) and self.difficulty_requirements[item.player].progressive_shield_limit >= 3: + ret.prog_items['Mirror Shield', item.player] += 1 + elif ret.has('Blue Shield', item.player) and self.difficulty_requirements[item.player].progressive_shield_limit >= 2: + ret.prog_items['Red Shield', item.player] += 1 + elif self.difficulty_requirements[item.player].progressive_shield_limit >= 1: + ret.prog_items['Blue Shield', item.player] += 1 elif 'Bow' in item.name: if ret.has('Silver Arrows', item.player): pass - elif ret.has('Bow', item.player) and self.difficulty_requirements.progressive_bow_limit >= 2: - ret.prog_items.add(('Silver Arrows', item.player)) - elif self.difficulty_requirements.progressive_bow_limit >= 1: - ret.prog_items.add(('Bow', item.player)) + elif ret.has('Bow', item.player) and self.difficulty_requirements[item.player].progressive_bow_limit >= 2: + ret.prog_items['Silver Arrows', item.player] += 1 + elif self.difficulty_requirements[item.player].progressive_bow_limit >= 1: + ret.prog_items['Bow', item.player] += 1 elif item.name.startswith('Bottle'): - if ret.bottle_count(item.player) < self.difficulty_requirements.progressive_bottle_limit: - ret.prog_items.add((item.name, item.player)) - elif item.advancement or item.key: - ret.prog_items.add((item.name, item.player)) + if ret.bottle_count(item.player) < self.difficulty_requirements[item.player].progressive_bottle_limit: + ret.prog_items[item.name, item.player] += 1 + elif item.advancement or item.smallkey or item.bigkey: + ret.prog_items[item.name, item.player] += 1 for item in self.itempool: soft_collect(item) @@ -193,23 +216,28 @@ class World(object): ret.sweep_for_events() return ret - def get_items(self): + def get_items(self) -> list: return [loc.item for loc in self.get_filled_locations()] + self.itempool - def find_items(self, item, player): - return [location for location in self.get_locations() if location.item is not None and location.item.name == item and location.item.player == player] + def find_items(self, item, player: int) -> list: + return [location for location in self.get_locations() if + location.item is not None and location.item.name == item and location.item.player == player] - def push_precollected(self, item): + def push_precollected(self, item: Item): + item.world = self + if (item.smallkey and self.keyshuffle[item.player]) or (item.bigkey and self.bigkeyshuffle[item.player]): + item.advancement = True self.precollected_items.append(item) self.state.collect(item, True) - def push_item(self, location, item, collect=True): + def push_item(self, location: Location, item: Item, collect: bool = True): if not isinstance(location, Location): raise RuntimeError('Cannot assign item %s to location %s (player %d).' % (item, location, item.player)) if location.can_fill(self.state, item, False): location.item = item item.location = location + item.world = self if collect: self.state.collect(item, location.event, location) @@ -217,7 +245,7 @@ class World(object): else: raise RuntimeError('Cannot assign item %s to location %s.' % (item, location)) - def get_entrances(self): + def get_entrances(self) -> list: if self._cached_entrances is None: self._cached_entrances = [] for region in self.regions: @@ -227,7 +255,7 @@ class World(object): def clear_entrance_cache(self): self._cached_entrances = None - def get_locations(self): + def get_locations(self) -> list: if self._cached_locations is None: self._cached_locations = [] for region in self.regions: @@ -237,23 +265,27 @@ class World(object): def clear_location_cache(self): self._cached_locations = None - def get_unfilled_locations(self, player=None): - return [location for location in self.get_locations() if (player is None or location.player == player) and location.item is None] + def get_unfilled_locations(self, player=None) -> list: + return [location for location in self.get_locations() if + (player is None or location.player == player) and location.item is None] - def get_filled_locations(self, player=None): - return [location for location in self.get_locations() if (player is None or location.player == player) and location.item is not None] + def get_filled_locations(self, player=None) -> list: + return [location for location in self.get_locations() if + (player is None or location.player == player) and location.item is not None] - def get_reachable_locations(self, state=None, player=None): + def get_reachable_locations(self, state=None, player=None) -> list: if state is None: state = self.state - return [location for location in self.get_locations() if (player is None or location.player == player) and location.can_reach(state)] + return [location for location in self.get_locations() if + (player is None or location.player == player) and location.can_reach(state)] - def get_placeable_locations(self, state=None, player=None): + def get_placeable_locations(self, state=None, player=None) -> list: if state is None: state = self.state - return [location for location in self.get_locations() if (player is None or location.player == player) and location.item is None and location.can_reach(state)] + return [location for location in self.get_locations() if + (player is None or location.player == player) and location.item is None and location.can_reach(state)] - def unlocks_new_location(self, item): + def unlocks_new_location(self, item) -> bool: temp_state = self.state.copy() temp_state.collect(item, True) @@ -263,7 +295,7 @@ class World(object): return False - def has_beaten_game(self, state, player=None): + def has_beaten_game(self, state, player: Union[None, int] = None): if player: return state.has('Triforce', player) else: @@ -271,14 +303,15 @@ class World(object): def can_beat_game(self, starting_state=None): if starting_state: + if self.has_beaten_game(starting_state): + return True state = starting_state.copy() else: + if self.has_beaten_game(self.state): + return True state = CollectionState(self) - - if self.has_beaten_game(state): - return True - - prog_locations = [location for location in self.get_locations() if location.item is not None and (location.item.advancement or location.event) and location not in state.locations_checked] + prog_locations = {location for location in self.get_locations() if location.item is not None and ( + location.item.advancement or location.event) and location not in state.locations_checked} while prog_locations: sphere = [] @@ -302,8 +335,8 @@ class World(object): class CollectionState(object): - def __init__(self, parent): - self.prog_items = bag() + def __init__(self, parent: World): + self.prog_items = Counter() self.world = parent self.reachable_regions = {player: set() for player in range(1, parent.players + 1)} self.events = [] @@ -313,33 +346,32 @@ class CollectionState(object): for item in parent.precollected_items: self.collect(item, True) - def update_reachable_regions(self, player): - player_regions = [region for region in self.world.regions if region.player == player] + def update_reachable_regions(self, player: int): + player_regions = self.world.get_regions(player) self.stale[player] = False rrp = self.reachable_regions[player] new_regions = True reachable_regions_count = len(rrp) while new_regions: - possible = [region for region in player_regions if region not in rrp] - for candidate in possible: + player_regions = [region for region in player_regions if region not in rrp] + for candidate in player_regions: if candidate.can_reach_private(self): rrp.add(candidate) new_regions = len(rrp) > reachable_regions_count reachable_regions_count = len(rrp) - def copy(self): + def copy(self) -> CollectionState: ret = CollectionState(self.world) ret.prog_items = self.prog_items.copy() - ret.reachable_regions = {player: copy.copy(self.reachable_regions[player]) for player in range(1, self.world.players + 1)} + ret.reachable_regions = {player: copy.copy(self.reachable_regions[player]) for player in + range(1, self.world.players + 1)} ret.events = copy.copy(self.events) ret.path = copy.copy(self.path) ret.locations_checked = copy.copy(self.locations_checked) return ret def can_reach(self, spot, resolution_hint=None, player=None): - try: - spot_type = spot.spot_type - except AttributeError: + if not hasattr(spot, "spot_type"): # try to resolve a name if resolution_hint == 'Location': spot = self.world.get_location(spot, player) @@ -348,17 +380,18 @@ class CollectionState(object): else: # default to Region spot = self.world.get_region(spot, player) - return spot.can_reach(self) def sweep_for_events(self, key_only=False, locations=None): # this may need improvement + if locations is None: + locations = self.world.get_filled_locations() new_locations = True checked_locations = 0 while new_locations: - if locations is None: - locations = self.world.get_filled_locations() - reachable_events = [location for location in locations if location.event and (not key_only or location.item.key) and location.can_reach(self)] + reachable_events = [location for location in locations if location.event and + (not key_only or (not self.world.keyshuffle[location.item.player] and location.item.smallkey) or (not self.world.bigkeyshuffle[location.item.player] and location.item.bigkey)) + and location.can_reach(self)] for event in reachable_events: if (event.name, event.player) not in self.events: self.events.append((event.name, event.player)) @@ -369,70 +402,70 @@ class CollectionState(object): def has(self, item, player, count=1): if count == 1: return (item, player) in self.prog_items - return self.prog_items.count((item, player)) >= count + return self.prog_items[item, player] >= count def has_key(self, item, player, count=1): - if self.world.retro: + if self.world.retro[player]: return self.can_buy_unlimited('Small Key (Universal)', player) if count == 1: return (item, player) in self.prog_items - return self.prog_items.count((item, player)) >= count + return self.prog_items[item, player] >= count - def can_buy_unlimited(self, item, player): + def can_buy_unlimited(self, item: str, player: int) -> bool: for shop in self.world.shops: if shop.region.player == player and shop.has_unlimited(item) and shop.region.can_reach(self): return True return False - def item_count(self, item, player): - return self.prog_items.count((item, player)) + def item_count(self, item, player: int) -> int: + return self.prog_items[item, player] - def has_crystals(self, count, player): + def has_crystals(self, count: int, player: int) -> bool: crystals = ['Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'] return len([crystal for crystal in crystals if self.has(crystal, player)]) >= count def can_lift_rocks(self, player): return self.has('Power Glove', player) or self.has('Titans Mitts', player) - def has_bottle(self, player): + def has_bottle(self, player: int) -> bool: return self.bottle_count(player) > 0 - def bottle_count(self, player): - return len([item for (item, itemplayer) in self.prog_items if item.startswith('Bottle') and itemplayer == player]) + def bottle_count(self, player: int) -> int: + return len( + [item for (item, itemplayer) in self.prog_items if item.startswith('Bottle') and itemplayer == player]) - def has_hearts(self, player, count): + def has_hearts(self, player: int, count: int) -> int: # Warning: This only considers items that are marked as advancement items return self.heart_count(player) >= count - def heart_count(self, player): + def heart_count(self, player: int) -> int: # Warning: This only considers items that are marked as advancement items - diff = self.world.difficulty_requirements - return ( - min(self.item_count('Boss Heart Container', player), diff.boss_heart_container_limit) - + self.item_count('Sanctuary Heart Container', player) - + min(self.item_count('Piece of Heart', player), diff.heart_piece_limit) // 4 - + 3 # starting hearts - ) + diff = self.world.difficulty_requirements[player] + return min(self.item_count('Boss Heart Container', player), diff.boss_heart_container_limit) \ + + self.item_count('Sanctuary Heart Container', player) \ + + min(self.item_count('Piece of Heart', player), diff.heart_piece_limit) // 4 \ + + 3 # starting hearts - def can_lift_heavy_rocks(self, player): + def can_lift_heavy_rocks(self, player: int) -> bool: return self.has('Titans Mitts', player) - def can_extend_magic(self, player, smallmagic=16, fullrefill=False): #This reflects the total magic Link has, not the total extra he has. + def can_extend_magic(self, player: int, smallmagic: int = 16, + fullrefill: bool = False): # This reflects the total magic Link has, not the total extra he has. basemagic = 8 if self.has('Magic Upgrade (1/4)', player): basemagic = 32 elif self.has('Magic Upgrade (1/2)', player): basemagic = 16 if self.can_buy_unlimited('Green Potion', player) or self.can_buy_unlimited('Blue Potion', player): - if self.world.difficulty_adjustments == 'hard' and not fullrefill: + if self.world.difficulty_adjustments[player] == 'hard' and not fullrefill: basemagic = basemagic + int(basemagic * 0.5 * self.bottle_count(player)) - elif self.world.difficulty_adjustments == 'expert' and not fullrefill: + elif self.world.difficulty_adjustments[player] == 'expert' and not fullrefill: basemagic = basemagic + int(basemagic * 0.25 * self.bottle_count(player)) else: basemagic = basemagic + basemagic * self.bottle_count(player) return basemagic >= smallmagic - def can_kill_most_things(self, player, enemies=5): + def can_kill_most_things(self, player: int, enemies=5) -> bool: return (self.has_blunt_weapon(player) or self.has('Cane of Somaria', player) or (self.has('Cane of Byrna', player) and (enemies < 6 or self.can_extend_magic(player))) @@ -440,76 +473,78 @@ class CollectionState(object): or self.has('Fire Rod', player) or (self.has('Bombs (10)', player) and enemies < 6)) - def can_shoot_arrows(self, player): - if self.world.retro: - #TODO: Progressive and Non-Progressive silvers work differently (progressive is not usable until the shop arrow is bought) + def can_shoot_arrows(self, player: int) -> bool: + if self.world.retro[player]: + # TODO: Progressive and Non-Progressive silvers work differently (progressive is not usable until the shop arrow is bought) return self.has('Bow', player) and self.can_buy_unlimited('Single Arrow', player) return self.has('Bow', player) - def can_get_good_bee(self, player): + def can_get_good_bee(self, player: int) -> bool: cave = self.world.get_region('Good Bee Cave', player) return ( - self.has_bottle(player) and - self.has('Bug Catching Net', player) and - (self.has_Boots(player) or (self.has_sword(player) and self.has('Quake', player))) and - cave.can_reach(self) and - self.is_not_bunny(cave, player) + self.has_bottle(player) and + self.has('Bug Catching Net', player) and + (self.has_Boots(player) or (self.has_sword(player) and self.has('Quake', player))) and + cave.can_reach(self) and + self.is_not_bunny(cave, player) ) - def has_sword(self, player): - return self.has('Fighter Sword', player) or self.has('Master Sword', player) or self.has('Tempered Sword', player) or self.has('Golden Sword', player) + def has_sword(self, player: int) -> bool: + return self.has('Fighter Sword', player) or self.has('Master Sword', player) or self.has('Tempered Sword', + player) or self.has( + 'Golden Sword', player) - def has_beam_sword(self, player): + def has_beam_sword(self, player: int) -> bool: return self.has('Master Sword', player) or self.has('Tempered Sword', player) or self.has('Golden Sword', player) - def has_blunt_weapon(self, player): + def has_blunt_weapon(self, player: int) -> bool: return self.has_sword(player) or self.has('Hammer', player) - def has_Mirror(self, player): + def has_Mirror(self, player: int) -> bool: return self.has('Magic Mirror', player) - def has_Boots(self, player): + def has_Boots(self, player: int) -> bool: return self.has('Pegasus Boots', player) - def has_Pearl(self, player): + def has_Pearl(self, player: int) -> bool: return self.has('Moon Pearl', player) - def has_fire_source(self, player): + def has_fire_source(self, player: int) -> bool: return self.has('Fire Rod', player) or self.has('Lamp', player) - def can_flute(self, player): + def can_flute(self, player: int) -> bool: lw = self.world.get_region('Light World', player) - return self.has('Ocarina', player) and lw.can_reach(self) and self.is_not_bunny(lw, player) + return self.has('Flute', player) and lw.can_reach(self) and self.is_not_bunny(lw, player) - def can_melt_things(self, player): + def can_melt_things(self, player: int) -> bool: return self.has('Fire Rod', player) or (self.has('Bombos', player) and self.has_sword(player)) - - def can_avoid_lasers(self, player): + + def can_avoid_lasers(self, player: int) -> bool: return self.has('Mirror Shield', player) or self.has('Cane of Byrna', player) or self.has('Cape', player) - def is_not_bunny(self, region, player): + def is_not_bunny(self, region: Region, player: int) -> bool: if self.has_Pearl(player): - return True - - return region.is_light_world if self.world.mode != 'inverted' else region.is_dark_world + return True - def can_reach_light_world(self, player): + return region.is_light_world if self.world.mode[player] != 'inverted' else region.is_dark_world + + def can_reach_light_world(self, player: int) -> bool: if True in [i.is_light_world for i in self.reachable_regions[player]]: return True return False - def can_reach_dark_world(self, player): + def can_reach_dark_world(self, player: int) -> bool: if True in [i.is_dark_world for i in self.reachable_regions[player]]: return True return False - def has_misery_mire_medallion(self, player): + def has_misery_mire_medallion(self, player: int) -> bool: return self.has(self.world.required_medallions[player][0], player) - def has_turtle_rock_medallion(self, player): + def has_turtle_rock_medallion(self, player: int) -> bool: return self.has(self.world.required_medallions[player][1], player) - def collect(self, item, event=False, location=None): + def collect(self, item: Item, event=False, location=None): if location: self.locations_checked.add(location) changed = False @@ -517,56 +552,57 @@ class CollectionState(object): if 'Sword' in item.name: if self.has('Golden Sword', item.player): pass - elif self.has('Tempered Sword', item.player) and self.world.difficulty_requirements.progressive_sword_limit >= 4: - self.prog_items.add(('Golden Sword', item.player)) + elif self.has('Tempered Sword', item.player) and self.world.difficulty_requirements[ + item.player].progressive_sword_limit >= 4: + self.prog_items['Golden Sword', item.player] += 1 changed = True - elif self.has('Master Sword', item.player) and self.world.difficulty_requirements.progressive_sword_limit >= 3: - self.prog_items.add(('Tempered Sword', item.player)) + elif self.has('Master Sword', item.player) and self.world.difficulty_requirements[item.player].progressive_sword_limit >= 3: + self.prog_items['Tempered Sword', item.player] += 1 changed = True - elif self.has('Fighter Sword', item.player) and self.world.difficulty_requirements.progressive_sword_limit >= 2: - self.prog_items.add(('Master Sword', item.player)) + elif self.has('Fighter Sword', item.player) and self.world.difficulty_requirements[item.player].progressive_sword_limit >= 2: + self.prog_items['Master Sword', item.player] += 1 changed = True - elif self.world.difficulty_requirements.progressive_sword_limit >= 1: - self.prog_items.add(('Fighter Sword', item.player)) + elif self.world.difficulty_requirements[item.player].progressive_sword_limit >= 1: + self.prog_items['Fighter Sword', item.player] += 1 changed = True elif 'Glove' in item.name: if self.has('Titans Mitts', item.player): pass elif self.has('Power Glove', item.player): - self.prog_items.add(('Titans Mitts', item.player)) + self.prog_items['Titans Mitts', item.player] += 1 changed = True else: - self.prog_items.add(('Power Glove', item.player)) + self.prog_items['Power Glove', item.player] += 1 changed = True elif 'Shield' in item.name: if self.has('Mirror Shield', item.player): pass - elif self.has('Red Shield', item.player) and self.world.difficulty_requirements.progressive_shield_limit >= 3: - self.prog_items.add(('Mirror Shield', item.player)) + elif self.has('Red Shield', item.player) and self.world.difficulty_requirements[item.player].progressive_shield_limit >= 3: + self.prog_items['Mirror Shield', item.player] += 1 changed = True - elif self.has('Blue Shield', item.player) and self.world.difficulty_requirements.progressive_shield_limit >= 2: - self.prog_items.add(('Red Shield', item.player)) + elif self.has('Blue Shield', item.player) and self.world.difficulty_requirements[item.player].progressive_shield_limit >= 2: + self.prog_items['Red Shield', item.player] += 1 changed = True - elif self.world.difficulty_requirements.progressive_shield_limit >= 1: - self.prog_items.add(('Blue Shield', item.player)) + elif self.world.difficulty_requirements[item.player].progressive_shield_limit >= 1: + self.prog_items['Blue Shield', item.player] += 1 changed = True elif 'Bow' in item.name: if self.has('Silver Arrows', item.player): pass elif self.has('Bow', item.player): - self.prog_items.add(('Silver Arrows', item.player)) + self.prog_items['Silver Arrows', item.player] += 1 changed = True else: - self.prog_items.add(('Bow', item.player)) + self.prog_items['Bow', item.player] += 1 changed = True elif item.name.startswith('Bottle'): - if self.bottle_count(item.player) < self.world.difficulty_requirements.progressive_bottle_limit: - self.prog_items.add((item.name, item.player)) + if self.bottle_count(item.player) < self.world.difficulty_requirements[item.player].progressive_bottle_limit: + self.prog_items[item.name, item.player] += 1 changed = True elif event or item.advancement: - self.prog_items.add((item.name, item.player)) + self.prog_items[item.name, item.player] += 1 changed = True - + self.stale[item.player] = True if changed: @@ -613,11 +649,10 @@ class CollectionState(object): to_remove = None if to_remove is not None: - try: - self.prog_items.remove((to_remove, item.player)) - except ValueError: - return + self.prog_items[to_remove, item.player] -= 1 + if self.prog_items[to_remove, item.player] < 1: + del (self.prog_items[to_remove, item.player]) # invalidate caches, nothing can be trusted anymore now self.reachable_regions[item.player] = set() self.stale[item.player] = True @@ -627,6 +662,8 @@ class CollectionState(object): return self.can_reach(item[10]) #elif item.startswith('has_'): # return self.has(item[4]) + if item == '__len__': + return raise RuntimeError('Cannot parse %s.' % item) @@ -645,7 +682,7 @@ class RegionType(Enum): class Region(object): - def __init__(self, name, type, hint, player): + def __init__(self, name: str, type, hint, player: int): self.name = name self.type = type self.entrances = [] @@ -654,7 +691,7 @@ class Region(object): self.dungeon = None self.shop = None self.world = None - self.is_light_world = False # will be set aftermaking connections. + self.is_light_world = False # will be set after making connections. self.is_dark_world = False self.spot_type = 'Region' self.hint_text = hint @@ -666,7 +703,7 @@ class Region(object): state.update_reachable_regions(self.player) return self in state.reachable_regions[self.player] - def can_reach_private(self, state): + def can_reach_private(self, state: CollectionState): for entrance in self.entrances: if entrance.can_reach(state): if not self in state.path: @@ -674,10 +711,13 @@ class Region(object): return True return False - def can_fill(self, item): - is_dungeon_item = item.key or item.map or item.compass - sewer_hack = self.world.mode == 'standard' and item.name == 'Small Key (Escape)' - if sewer_hack or (is_dungeon_item and not self.world.keysanity): + def can_fill(self, item: Item): + inside_dungeon_item = ((item.smallkey and not self.world.keyshuffle[item.player]) + or (item.bigkey and not self.world.bigkeyshuffle[item.player]) + or (item.map and not self.world.mapshuffle[item.player]) + or (item.compass and not self.world.compassshuffle[item.player])) + sewer_hack = self.world.mode[item.player] == 'standard' and item.name == 'Small Key (Escape)' + if sewer_hack or inside_dungeon_item: return self.dungeon and self.dungeon.is_dungeon_item(item) and item.player == self.player return True @@ -686,15 +726,12 @@ class Region(object): return str(self.__unicode__()) def __unicode__(self): - if self.world and self.world.players == 1: - return self.name - else: - return '%s (Player %d)' % (self.name, self.player) + return self.world.get_name_string_for_object(self) if self.world else f'{self.name} (Player {self.player})' class Entrance(object): - def __init__(self, player, name='', parent=None): + def __init__(self, player: int, name: str = '', parent=None): self.name = name self.parent_region = parent self.connected_region = None @@ -725,15 +762,12 @@ class Entrance(object): return str(self.__unicode__()) def __unicode__(self): - if self.parent_region and self.parent_region.world and self.parent_region.world.players == 1: - return self.name - else: - return '%s (Player %d)' % (self.name, self.player) - + world = self.parent_region.world if self.parent_region else None + return world.get_name_string_for_object(self) if world else f'{self.name} (Player {self.player})' class Dungeon(object): - def __init__(self, name, regions, big_key, small_keys, dungeon_items, player): + def __init__(self, name, regions, big_key, small_keys, dungeon_items, player: int): self.name = name self.regions = regions self.big_key = big_key @@ -766,43 +800,43 @@ class Dungeon(object): return str(self.__unicode__()) def __unicode__(self): - if self.world and self.world.players==1: - return self.name - else: - return '%s (Player %d)' % (self.name, self.player) + return self.world.get_name_string_for_object(self) if self.world else f'{self.name} (Player {self.player})' class Boss(object): - def __init__(self, name, enemizer_name, defeat_rule, player): + def __init__(self, name, enemizer_name, defeat_rule, player: int): self.name = name self.enemizer_name = enemizer_name self.defeat_rule = defeat_rule self.player = player - def can_defeat(self, state): + def can_defeat(self, state) -> bool: return self.defeat_rule(state, self.player) class Location(object): - def __init__(self, player, name='', address=None, crystal=False, hint_text=None, parent=None): + def __init__(self, player: int, name: str = '', address=None, crystal=False, hint_text=None, parent=None, + player_address=None): self.name = name self.parent_region = parent self.item = None self.crystal = crystal self.address = address + self.player_address = player_address self.spot_type = 'Location' - self.hint_text = hint_text if hint_text is not None else 'Hyrule' + self.hint_text: str = hint_text if hint_text else name self.recursion_count = 0 self.staleness_count = 0 self.event = False - self.locked = True + self.locked = False self.always_allow = lambda item, state: False self.access_rule = lambda state: True self.item_rule = lambda item: True self.player = player - def can_fill(self, state, item, check_access=True): - return self.always_allow(state, item) or (self.parent_region.can_fill(item) and self.item_rule(item) and (not check_access or self.can_reach(state))) + def can_fill(self, state, item, check_access=True) -> bool: + return self.always_allow(state, item) or (self.parent_region.can_fill(item) and self.item_rule(item) and ( + not check_access or self.can_reach(state))) - def can_reach(self, state): + def can_reach(self, state) -> bool: if self.parent_region.can_reach(state) and self.access_rule(state): return True return False @@ -811,10 +845,8 @@ class Location(object): return str(self.__unicode__()) def __unicode__(self): - if self.parent_region and self.parent_region.world and self.parent_region.world.players == 1: - return self.name - else: - return '%s (Player %d)' % (self.name, self.player) + world = self.parent_region.world if self.parent_region and self.parent_region.world else None + return world.get_name_string_for_object(self) if world else f'{self.name} (Player {self.player})' class Item(object): @@ -833,32 +865,34 @@ class Item(object): self.hint_text = hint_text self.code = code self.location = None + self.world = None self.player = player @property - def key(self): - return self.type == 'SmallKey' or self.type == 'BigKey' - - @property - def crystal(self): + def crystal(self) -> bool: return self.type == 'Crystal' @property - def map(self): + def smallkey(self) -> bool: + return self.type == 'SmallKey' + + @property + def bigkey(self) -> bool: + return self.type == 'BigKey' + + @property + def map(self) -> bool: return self.type == 'Map' @property - def compass(self): + def compass(self) -> bool: return self.type == 'Compass' def __str__(self): return str(self.__unicode__()) def __unicode__(self): - if self.location and self.location.parent_region and self.location.parent_region.world and self.location.parent_region.world.players == 1: - return self.name - else: - return '%s (Player %d)' % (self.name, self.player) + return self.world.get_name_string_for_object(self) if self.world else f'{self.name} (Player {self.player})' # have 6 address that need to be filled @@ -872,14 +906,14 @@ class ShopType(Enum): UpgradeShop = 2 class Shop(object): - def __init__(self, region, room_id, type, shopkeeper_config, replaceable): + def __init__(self, region, room_id, type, shopkeeper_config, custom, locked): self.region = region self.room_id = room_id self.type = type self.inventory = [None, None, None] self.shopkeeper_config = shopkeeper_config - self.replaceable = replaceable - self.active = False + self.custom = custom + self.locked = locked @property def item_count(self): @@ -928,12 +962,15 @@ class Shop(object): class Spoiler(object): - + world: World def __init__(self, world): self.world = world + self.hashes = {} self.entrances = OrderedDict() self.medallions = {} self.playthrough = {} + self.unreachables = [] + self.startinventory = [] self.locations = {} self.paths = {} self.metadata = {} @@ -953,8 +990,10 @@ class Spoiler(object): self.medallions['Turtle Rock'] = self.world.required_medallions[1][1] else: for player in range(1, self.world.players + 1): - self.medallions['Misery Mire (Player %d)' % player] = self.world.required_medallions[player][0] - self.medallions['Turtle Rock (Player %d)' % player] = self.world.required_medallions[player][1] + self.medallions[f'Misery Mire ({self.world.get_player_names(player)})'] = self.world.required_medallions[player][0] + self.medallions[f'Turtle Rock ({self.world.get_player_names(player)})'] = self.world.required_medallions[player][1] + + self.startinventory = list(map(str, self.world.precollected_items)) self.locations = OrderedDict() listed_locations = set() @@ -983,7 +1022,7 @@ class Spoiler(object): self.shops = [] for shop in self.world.shops: - if not shop.active: + if not shop.custom: continue shopdata = {'location': str(shop.region), 'type': 'Take Any' if shop.type == ShopType.TakeAny else 'Shop' @@ -1007,7 +1046,7 @@ class Spoiler(object): self.bosses[str(player)]["Ice Palace"] = self.world.get_dungeon("Ice Palace", player).boss.name self.bosses[str(player)]["Misery Mire"] = self.world.get_dungeon("Misery Mire", player).boss.name self.bosses[str(player)]["Turtle Rock"] = self.world.get_dungeon("Turtle Rock", player).boss.name - if self.world.mode != 'inverted': + if self.world.mode[player] != 'inverted': self.bosses[str(player)]["Ganons Tower Basement"] = self.world.get_dungeon('Ganons Tower', player).bosses['bottom'].name self.bosses[str(player)]["Ganons Tower Middle"] = self.world.get_dungeon('Ganons Tower', player).bosses['middle'].name self.bosses[str(player)]["Ganons Tower Top"] = self.world.get_dungeon('Ganons Tower', player).bosses['top'].name @@ -1026,14 +1065,30 @@ class Spoiler(object): self.metadata = {'version': ERVersion, 'logic': self.world.logic, 'mode': self.world.mode, + 'retro': self.world.retro, 'weapons': self.world.swords, 'goal': self.world.goal, 'shuffle': self.world.shuffle, 'item_pool': self.world.difficulty, 'item_functionality': self.world.difficulty_adjustments, + 'gt_crystals': self.world.crystals_needed_for_gt, + 'ganon_crystals': self.world.crystals_needed_for_ganon, + 'open_pyramid': self.world.open_pyramid, 'accessibility': self.world.accessibility, 'hints': self.world.hints, - 'keysanity': self.world.keysanity, + 'mapshuffle': self.world.mapshuffle, + 'compassshuffle': self.world.compassshuffle, + 'keyshuffle': self.world.keyshuffle, + 'bigkeyshuffle': self.world.bigkeyshuffle, + 'boss_shuffle': self.world.boss_shuffle, + 'enemy_shuffle': self.world.enemy_shuffle, + 'enemy_health': self.world.enemy_health, + 'enemy_damage': self.world.enemy_damage, + 'beemizer': self.world.beemizer, + 'progressive': self.world.progressive, + 'shufflepots': self.world.shufflepots, + 'players': self.world.players, + 'teams': self.world.teams } def to_json(self): @@ -1041,51 +1096,76 @@ class Spoiler(object): out = OrderedDict() out['Entrances'] = list(self.entrances.values()) out.update(self.locations) + out['Starting Inventory'] = self.startinventory out['Special'] = self.medallions + if self.hashes: + out['Hashes'] = {f"{self.world.player_names[player][team]} (Team {team+1})": hash for (player, team), hash in self.hashes.items()} if self.shops: out['Shops'] = self.shops out['playthrough'] = self.playthrough out['paths'] = self.paths - if self.world.boss_shuffle != 'none': - out['Bosses'] = self.bosses + out['Bosses'] = self.bosses out['meta'] = self.metadata return json.dumps(out) def to_file(self, filename): self.parse_data() - with open(filename, 'w') as outfile: - outfile.write('ALttP Entrance Randomizer Version %s - Seed: %s\n\n' % (self.metadata['version'], self.world.seed)) - outfile.write('Logic: %s\n' % self.metadata['logic']) - outfile.write('Mode: %s\n' % self.metadata['mode']) - outfile.write('Goal: %s\n' % self.metadata['goal']) - outfile.write('Difficulty: %s\n' % self.metadata['item_pool']) - outfile.write('Item Functionality: %s\n' % self.metadata['item_functionality']) - outfile.write('Entrance Shuffle: %s\n' % self.metadata['shuffle']) + with open(filename, 'w', encoding="utf-8-sig") as outfile: + outfile.write( + 'ALttP Entrance Randomizer Version %s - Seed: %s\n\n' % (self.metadata['version'], self.world.seed)) outfile.write('Filling Algorithm: %s\n' % self.world.algorithm) - outfile.write('Accessibility: %s\n' % self.metadata['accessibility']) - outfile.write('Maps and Compasses in Dungeons: %s\n' % ('Yes' if self.world.place_dungeon_items else 'No')) - outfile.write('L\\R Quickswap enabled: %s\n' % ('Yes' if self.world.quickswap else 'No')) - outfile.write('Menu speed: %s\n' % self.world.fastmenu) - outfile.write('Keysanity enabled: %s\n' % ('Yes' if self.metadata['keysanity'] else 'No')) - outfile.write('Players: %d' % self.world.players) + outfile.write('Players: %d\n' % self.world.players) + outfile.write('Teams: %d\n' % self.world.teams) + for player in range(1, self.world.players + 1): + if self.world.players > 1: + outfile.write('\nPlayer %d: %s\n' % (player, self.world.get_player_names(player))) + for team in range(self.world.teams): + outfile.write('%s%s\n' % ( + f"Hash - {self.world.player_names[player][team]} (Team {team + 1}): " if self.world.teams > 1 else 'Hash: ', + self.hashes[player, team])) + outfile.write('Logic: %s\n' % self.metadata['logic'][player]) + outfile.write('Mode: %s\n' % self.metadata['mode'][player]) + outfile.write('Retro: %s\n' % ('Yes' if self.metadata['retro'][player] else 'No')) + outfile.write('Swords: %s\n' % self.metadata['weapons'][player]) + outfile.write('Goal: %s\n' % self.metadata['goal'][player]) + outfile.write('Difficulty: %s\n' % self.metadata['item_pool'][player]) + outfile.write('Item Functionality: %s\n' % self.metadata['item_functionality'][player]) + outfile.write('Item Progression: %s\n' % self.metadata['progressive'][player]) + outfile.write('Entrance Shuffle: %s\n' % self.metadata['shuffle'][player]) + outfile.write('Crystals required for GT: %s\n' % self.metadata['gt_crystals'][player]) + outfile.write('Crystals required for Ganon: %s\n' % self.metadata['ganon_crystals'][player]) + outfile.write('Pyramid hole pre-opened: %s\n' % ('Yes' if self.metadata['open_pyramid'][player] else 'No')) + outfile.write('Accessibility: %s\n' % self.metadata['accessibility'][player]) + outfile.write('Map shuffle: %s\n' % ('Yes' if self.metadata['mapshuffle'][player] else 'No')) + outfile.write('Compass shuffle: %s\n' % ('Yes' if self.metadata['compassshuffle'][player] else 'No')) + outfile.write('Small Key shuffle: %s\n' % ('Yes' if self.metadata['keyshuffle'][player] else 'No')) + outfile.write('Big Key shuffle: %s\n' % ('Yes' if self.metadata['bigkeyshuffle'][player] else 'No')) + outfile.write('Boss shuffle: %s\n' % self.metadata['boss_shuffle'][player]) + outfile.write('Enemy shuffle: %s\n' % self.metadata['enemy_shuffle'][player]) + outfile.write('Enemy health: %s\n' % self.metadata['enemy_health'][player]) + outfile.write('Enemy damage: %s\n' % self.metadata['enemy_damage'][player]) + outfile.write('Hints: %s\n' % ('Yes' if self.metadata['hints'][player] else 'No')) + outfile.write('Beemizer: %s\n' % self.metadata['beemizer'][player]) + outfile.write('Pot shuffle %s\n' % ('Yes' if self.metadata['shufflepots'][player] else 'No')) if self.entrances: outfile.write('\n\nEntrances:\n\n') - outfile.write('\n'.join(['%s%s %s %s' % ('Player {0}: '.format(entry['player']) if self.world.players >1 else '', entry['entrance'], '<=>' if entry['direction'] == 'both' else '<=' if entry['direction'] == 'exit' else '=>', entry['exit']) for entry in self.entrances.values()])) - outfile.write('\n\nMedallions\n') - if self.world.players == 1: - outfile.write('\nMisery Mire Medallion: %s' % (self.medallions['Misery Mire'])) - outfile.write('\nTurtle Rock Medallion: %s' % (self.medallions['Turtle Rock'])) - else: - for player in range(1, self.world.players + 1): - outfile.write('\nMisery Mire Medallion (Player %d): %s' % (player, self.medallions['Misery Mire (Player %d)' % player])) - outfile.write('\nTurtle Rock Medallion (Player %d): %s' % (player, self.medallions['Turtle Rock (Player %d)' % player])) + outfile.write('\n'.join(['%s%s %s %s' % (f'{self.world.get_player_names(entry["player"])}: ' if self.world.players > 1 else '', entry['entrance'], '<=>' if entry['direction'] == 'both' else '<=' if entry['direction'] == 'exit' else '=>', entry['exit']) for entry in self.entrances.values()])) + outfile.write('\n\nMedallions:\n') + for dungeon, medallion in self.medallions.items(): + outfile.write(f'\n{dungeon}: {medallion}') + if self.startinventory: + outfile.write('\n\nStarting Inventory:\n\n') + outfile.write('\n'.join(self.startinventory)) outfile.write('\n\nLocations:\n\n') outfile.write('\n'.join(['%s: %s' % (location, item) for grouping in self.locations.values() for (location, item) in grouping.items()])) outfile.write('\n\nShops:\n\n') outfile.write('\n'.join("{} [{}]\n {}".format(shop['location'], shop['type'], "\n ".join(item for item in [shop.get('item_0', None), shop.get('item_1', None), shop.get('item_2', None)] if item)) for shop in self.shops)) outfile.write('\n\nPlaythrough:\n\n') - outfile.write('\n'.join(['%s: {\n%s\n}' % (sphere_nr, '\n'.join([' %s: %s' % (location, item) for (location, item) in sphere.items()])) for (sphere_nr, sphere) in self.playthrough.items()])) + outfile.write('\n'.join(['%s: {\n%s\n}' % (sphere_nr, '\n'.join([' %s: %s' % (location, item) for (location, item) in sphere.items()] if sphere_nr != '0' else [f' {item}' for item in sphere])) for (sphere_nr, sphere) in self.playthrough.items()])) + if self.unreachables: + outfile.write('\n\nUnreachable Items:\n\n') + outfile.write('\n'.join(['%s: %s' % (unreachable.item, unreachable) for unreachable in self.unreachables])) outfile.write('\n\nPaths:\n\n') path_listings = [] diff --git a/Bosses.py b/Bosses.py index 823d1e24..e25e9340 100644 --- a/Bosses.py +++ b/Bosses.py @@ -76,7 +76,7 @@ def KholdstareDefeatRule(state, player): ( state.has('Bombos', player) and # FIXME: the following only actually works for the vanilla location for swordless - (state.has_sword(player) or state.world.swords == 'swordless') + (state.has_sword(player) or state.world.swords[player] == 'swordless') ) ) and ( @@ -86,7 +86,7 @@ def KholdstareDefeatRule(state, player): ( state.has('Fire Rod', player) and state.has('Bombos', player) and - state.world.swords == 'swordless' and + state.world.swords[player] == 'swordless' and state.can_extend_magic(player, 16) ) ) @@ -120,8 +120,8 @@ boss_table = { 'Agahnim2': ('Agahnim2', AgahnimDefeatRule) } -def can_place_boss(world, boss, dungeon_name, level=None): - if world.swords in ['swordless'] and boss == 'Kholdstare' and dungeon_name != 'Ice Palace': +def can_place_boss(world, player, boss, dungeon_name, level=None): + if world.swords[player] in ['swordless'] and boss == 'Kholdstare' and dungeon_name != 'Ice Palace': return False if dungeon_name in ['Ganons Tower', 'Inverted Ganons Tower'] and level == 'top': @@ -143,10 +143,10 @@ def can_place_boss(world, boss, dungeon_name, level=None): return True def place_bosses(world, player): - if world.boss_shuffle == 'none': + if world.boss_shuffle[player] == 'none': return # Most to least restrictive order - if world.mode != 'inverted': + if world.mode[player] != 'inverted': boss_locations = [ ['Ganons Tower', 'top'], ['Tower of Hera', None], @@ -182,15 +182,15 @@ def place_bosses(world, player): all_bosses = sorted(boss_table.keys()) #s orted to be deterministic on older pythons placeable_bosses = [boss for boss in all_bosses if boss not in ['Agahnim', 'Agahnim2', 'Ganon']] - if world.boss_shuffle in ["basic", "normal"]: + if world.boss_shuffle[player] in ["basic", "normal"]: # temporary hack for swordless kholdstare: - if world.swords == 'swordless': + if world.swords[player] == 'swordless': world.get_dungeon('Ice Palace', player).boss = BossFactory('Kholdstare', player) logging.getLogger('').debug('Placing boss Kholdstare at Ice Palace') boss_locations.remove(['Ice Palace', None]) placeable_bosses.remove('Kholdstare') - if world.boss_shuffle == "basic": # vanilla bosses shuffled + if world.boss_shuffle[player] == "basic": # vanilla bosses shuffled bosses = placeable_bosses + ['Armos Knights', 'Lanmolas', 'Moldorm'] else: # all bosses present, the three duplicates chosen at random bosses = all_bosses + [random.choice(placeable_bosses) for _ in range(3)] @@ -200,18 +200,18 @@ def place_bosses(world, player): random.shuffle(bosses) for [loc, level] in boss_locations: loc_text = loc + (' ('+level+')' if level else '') - boss = next((b for b in bosses if can_place_boss(world, b, loc, level)), None) + boss = next((b for b in bosses if can_place_boss(world, player, b, loc, level)), None) if not boss: raise FillError('Could not place boss for location %s' % loc_text) bosses.remove(boss) logging.getLogger('').debug('Placing boss %s at %s', boss, loc_text) world.get_dungeon(loc, player).bosses[level] = BossFactory(boss, player) - elif world.boss_shuffle == "chaos": #all bosses chosen at random + elif world.boss_shuffle[player] == "chaos": #all bosses chosen at random for [loc, level] in boss_locations: loc_text = loc + (' ('+level+')' if level else '') try: - boss = random.choice([b for b in placeable_bosses if can_place_boss(world, b, loc, level)]) + boss = random.choice([b for b in placeable_bosses if can_place_boss(world, player, b, loc, level)]) except IndexError: raise FillError('Could not place boss for location %s' % loc_text) diff --git a/Dungeons.py b/Dungeons.py index 3e412f70..9470d390 100644 --- a/Dungeons.py +++ b/Dungeons.py @@ -8,7 +8,7 @@ from Items import ItemFactory def create_dungeons(world, player): def make_dungeon(name, default_boss, dungeon_regions, big_key, small_keys, dungeon_items): - dungeon = Dungeon(name, dungeon_regions, big_key, [] if world.retro else small_keys, dungeon_items, player) + dungeon = Dungeon(name, dungeon_regions, big_key, [] if world.retro[player] else small_keys, dungeon_items, player) dungeon.boss = BossFactory(default_boss, player) for region in dungeon.regions: world.get_region(region, player).dungeon = dungeon @@ -27,7 +27,7 @@ def create_dungeons(world, player): MM = make_dungeon('Misery Mire', 'Vitreous', ['Misery Mire (Entrance)', 'Misery Mire (Main)', 'Misery Mire (West)', 'Misery Mire (Final Area)', 'Misery Mire (Vitreous)'], ItemFactory('Big Key (Misery Mire)', player), ItemFactory(['Small Key (Misery Mire)'] * 3, player), ItemFactory(['Map (Misery Mire)', 'Compass (Misery Mire)'], player)) TR = make_dungeon('Turtle Rock', 'Trinexx', ['Turtle Rock (Entrance)', 'Turtle Rock (First Section)', 'Turtle Rock (Chain Chomp Room)', 'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Turtle Rock (Crystaroller Room)', 'Turtle Rock (Dark Room)', 'Turtle Rock (Eye Bridge)', 'Turtle Rock (Trinexx)'], ItemFactory('Big Key (Turtle Rock)', player), ItemFactory(['Small Key (Turtle Rock)'] * 4, player), ItemFactory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], player)) - if world.mode != 'inverted': + if world.mode[player] != 'inverted': AT = make_dungeon('Agahnims Tower', 'Agahnim', ['Agahnims Tower', 'Agahnim 1'], None, ItemFactory(['Small Key (Agahnims Tower)'] * 2, player), []) GT = make_dungeon('Ganons Tower', 'Agahnim2', ['Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'], ItemFactory('Big Key (Ganons Tower)', player), ItemFactory(['Small Key (Ganons Tower)'] * 4, player), ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player)) else: @@ -47,7 +47,7 @@ def fill_dungeons(world): for player in range(1, world.players + 1): pinball_room = world.get_location('Skull Woods - Pinball Room', player) - if world.retro: + if world.retro[player]: world.push_item(pinball_room, ItemFactory('Small Key (Universal)', player), False) else: world.push_item(pinball_room, ItemFactory('Small Key (Skull Woods)', player), False) @@ -113,21 +113,20 @@ def fill_dungeons(world): continue # next place dungeon items - if world.place_dungeon_items: - for dungeon_item in dungeon_items: - di_location = dungeon_locations.pop() - world.push_item(di_location, dungeon_item, False) + for dungeon_item in dungeon_items: + di_location = dungeon_locations.pop() + world.push_item(di_location, dungeon_item, False) def get_dungeon_item_pool(world): - return [item for dungeon in world.dungeons for item in dungeon.all_items if item.key or world.place_dungeon_items] + return [item for dungeon in world.dungeons for item in dungeon.all_items] def fill_dungeons_restrictive(world, shuffled_locations): all_state_base = world.get_all_state() for player in range(1, world.players + 1): pinball_room = world.get_location('Skull Woods - Pinball Room', player) - if world.retro: + if world.retro[player]: world.push_item(pinball_room, ItemFactory('Small Key (Universal)', player), False) else: world.push_item(pinball_room, ItemFactory('Small Key (Skull Woods)', player), False) @@ -135,22 +134,24 @@ def fill_dungeons_restrictive(world, shuffled_locations): pinball_room.locked = True shuffled_locations.remove(pinball_room) - if world.keysanity: - #in keysanity dungeon items are distributed as part of the normal item pool - for item in world.get_items(): - if item.key: - item.advancement = True - elif item.map or item.compass: - item.priority = True - return + # with shuffled dungeon items they are distributed as part of the normal item pool + for item in world.get_items(): + if (item.smallkey and world.keyshuffle[item.player]) or (item.bigkey and world.bigkeyshuffle[item.player]): + all_state_base.collect(item, True) + item.advancement = True + elif (item.map and world.mapshuffle[item.player]) or (item.compass and world.compassshuffle[item.player]): + item.priority = True - dungeon_items = get_dungeon_item_pool(world) + dungeon_items = [item for item in get_dungeon_item_pool(world) if ((item.smallkey and not world.keyshuffle[item.player]) + or (item.bigkey and not world.bigkeyshuffle[item.player]) + or (item.map and not world.mapshuffle[item.player]) + or (item.compass and not world.compassshuffle[item.player]))] # sort in the order Big Key, Small Key, Other before placing dungeon items sort_order = {"BigKey": 3, "SmallKey": 2} dungeon_items.sort(key=lambda item: sort_order.get(item.type, 1)) - fill_restrictive(world, all_state_base, shuffled_locations, dungeon_items) + fill_restrictive(world, all_state_base, shuffled_locations, dungeon_items, True) diff --git a/ER_hint_reference.txt b/ER_hint_reference.txt index 59dab0ce..999fb436 100644 --- a/ER_hint_reference.txt +++ b/ER_hint_reference.txt @@ -8,6 +8,21 @@ Hints will appear in the following ratios across the 15 telepathic tiles that ha 5 hints for valuable items. 4 junk hints. +In the vanilla, dungeonssimple, and dungeonsfull shuffles, the following ratios will be used instead: + +5 hints for inconvenient item locations. +8 hints for valuable items. +7 junk hints. + +In the simple, restricted, and restricted legacy shuffles, these are the ratios: + +2 hints for inconvenient entrances. +1 hint for an inconvenient dungeon entrance. +4 hints for random entrances (this can by coincidence pick inconvenient entrances that aren't used for the first set of hints). +3 hints for inconvenient item locations. +5 hints for valuable items. +5 junk hints. + These hints will use the following format: Entrance hints go "[Entrance on overworld] leads to [interior]". @@ -65,7 +80,12 @@ Spike Cave Magic Bat Sahasrahla (Green Pendant) -Valuable Items are simply all items that are shown on the pause subscreen (Y, B, or A sections) minus Silver Arrows and plus Triforce Pieces, Magic Upgrades (1/2 or 1/4), and the Single Arrow. If keysanity is being used, you can additionally get hints for Small Keys or Big Keys but not hints for Maps or Compasses. +In the vanilla, dungeonssimple, and dungeonsfull shuffles, the following two locations are added to the inconvenient locations list: + +Graveyard Cave +Mimic Cave + +Valuable Items are simply all items that are shown on the pause subscreen (Y, B, or A sections) minus Silver Arrows and plus Triforce Pieces, Magic Upgrades (1/2 or 1/4), and the Single Arrow. If key shuffle is being used, you can additionally get hints for Small Keys or Big Keys but not hints for Maps or Compasses. While the exact verbage of location names and item names can be found in the source code, here's a copy for reference: @@ -103,8 +123,8 @@ Death Mountain Return Cave (East): The westmost cave on west DM Spectacle Rock Cave Peak: The highest cave on west DM Spectacle Rock Cave: The right ledge on west DM Spectacle Rock Cave (Bottom): The left ledge on west DM -Paradox Cave (Bottom): The southmost cave on east DM -Paradox Cave (Middle): The right paired cave on east DM +Paradox Cave (Bottom): The right paired cave on east DM +Paradox Cave (Middle): The southmost cave on east DM Paradox Cave (Top): The east DM summit cave Fairy Ascension Cave (Bottom): The east DM cave behind rocks Fairy Ascension Cave (Top): The central ledge on east DM diff --git a/EntranceRandomizer.py b/EntranceRandomizer.py index 46908a9b..f8f96a5e 100755 --- a/EntranceRandomizer.py +++ b/EntranceRandomizer.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 import argparse +import copy import os import logging import random import textwrap +import shlex import sys from Main import main -from Utils import is_bundled, close_console, output_path +from Rom import get_sprite_from_name +from Utils import is_bundled, close_console class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter): @@ -15,11 +18,18 @@ class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter): def _get_help_string(self, action): return textwrap.dedent(action.help) +def parse_arguments(argv, no_defaults=False): + def defval(value): + return value if not no_defaults else None + + # we need to know how many players we have first + parser = argparse.ArgumentParser(add_help=False) + parser.add_argument('--multi', default=defval(1), type=lambda value: min(max(int(value), 1), 255)) + multiargs, _ = parser.parse_known_args(argv) -def start(): parser = argparse.ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--create_spoiler', help='Output a Spoiler File', action='store_true') - parser.add_argument('--logic', default='noglitches', const='noglitches', nargs='?', choices=['noglitches', 'minorglitches', 'nologic'], + parser.add_argument('--logic', default=defval('noglitches'), const='noglitches', nargs='?', choices=['noglitches', 'minorglitches', 'nologic'], help='''\ Select Enforcement of Item Requirements. (default: %(default)s) No Glitches: @@ -28,7 +38,7 @@ def start(): No Logic: Distribute items without regard for item requirements. ''') - parser.add_argument('--mode', default='open', const='open', nargs='?', choices=['standard', 'open', 'inverted'], + parser.add_argument('--mode', default=defval('open'), const='open', nargs='?', choices=['standard', 'open', 'inverted'], help='''\ Select game mode. (default: %(default)s) Open: World starts with Zelda rescued. @@ -41,7 +51,7 @@ def start(): Requires the moon pearl to be Link in the Light World instead of a bunny. ''') - parser.add_argument('--swords', default='random', const='random', nargs='?', choices= ['random', 'assured', 'swordless', 'vanilla'], + parser.add_argument('--swords', default=defval('random'), const='random', nargs='?', choices= ['random', 'assured', 'swordless', 'vanilla'], help='''\ Select sword placement. (default: %(default)s) Random: All swords placed randomly. @@ -55,7 +65,7 @@ def start(): Palace, to allow for an alternative to firerod. Vanilla: Swords are in vanilla locations. ''') - parser.add_argument('--goal', default='ganon', const='ganon', nargs='?', choices=['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'], + parser.add_argument('--goal', default=defval('ganon'), const='ganon', nargs='?', choices=['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'], help='''\ Select completion goal. (default: %(default)s) Ganon: Collect all crystals, beat Agahnim 2 then @@ -67,21 +77,21 @@ def start(): Triforce Hunt: Places 30 Triforce Pieces in the world, collect 20 of them to beat the game. ''') - parser.add_argument('--difficulty', default='normal', const='normal', nargs='?', choices=['normal', 'hard', 'expert'], + parser.add_argument('--difficulty', default=defval('normal'), const='normal', nargs='?', choices=['normal', 'hard', 'expert'], help='''\ Select game difficulty. Affects available itempool. (default: %(default)s) Normal: Normal difficulty. Hard: A harder setting with less equipment and reduced health. Expert: A harder yet setting with minimum equipment and health. ''') - parser.add_argument('--item_functionality', default='normal', const='normal', nargs='?', choices=['normal', 'hard', 'expert'], + parser.add_argument('--item_functionality', default=defval('normal'), const='normal', nargs='?', choices=['normal', 'hard', 'expert'], help='''\ Select limits on item functionality to increase difficulty. (default: %(default)s) Normal: Normal functionality. Hard: Reduced functionality. Expert: Greatly reduced functionality. ''') - parser.add_argument('--timer', default='none', const='normal', nargs='?', choices=['none', 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown'], + parser.add_argument('--timer', default=defval('none'), const='normal', nargs='?', choices=['none', 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown'], help='''\ Select game timer setting. Affects available itempool. (default: %(default)s) None: No timer. @@ -101,7 +111,7 @@ def start(): Timed mode. If time runs out, you lose (but can still keep playing). ''') - parser.add_argument('--progressive', default='on', const='normal', nargs='?', choices=['on', 'off', 'random'], + parser.add_argument('--progressive', default=defval('on'), const='normal', nargs='?', choices=['on', 'off', 'random'], help='''\ Select progressive equipment setting. Affects available itempool. (default: %(default)s) On: Swords, Shields, Armor, and Gloves will @@ -115,7 +125,7 @@ def start(): category, be randomly progressive or not. Link will die in one hit. ''') - parser.add_argument('--algorithm', default='balanced', const='balanced', nargs='?', choices=['freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced'], + parser.add_argument('--algorithm', default=defval('balanced'), const='balanced', nargs='?', choices=['freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced'], help='''\ Select item filling algorithm. (default: %(default)s balanced: vt26 derivitive that aims to strike a balance between @@ -138,7 +148,7 @@ def start(): slightly biased to placing progression items with less restrictions. ''') - parser.add_argument('--shuffle', default='full', const='full', nargs='?', choices=['vanilla', 'simple', 'restricted', 'full', 'crossed', 'insanity', 'restricted_legacy', 'full_legacy', 'madness_legacy', 'insanity_legacy', 'dungeonsfull', 'dungeonssimple'], + parser.add_argument('--shuffle', default=defval('full'), const='full', nargs='?', choices=['vanilla', 'simple', 'restricted', 'full', 'crossed', 'insanity', 'restricted_legacy', 'full_legacy', 'madness_legacy', 'insanity_legacy', 'dungeonsfull', 'dungeonssimple'], help='''\ Select Entrance Shuffling Algorithm. (default: %(default)s) Full: Mix cave and dungeon entrances freely while limiting @@ -162,7 +172,7 @@ def start(): The dungeon variants only mix up dungeons and keep the rest of the overworld vanilla. ''') - parser.add_argument('--crystals_ganon', default='7', const='7', nargs='?', choices=['random', '0', '1', '2', '3', '4', '5', '6', '7'], + parser.add_argument('--crystals_ganon', default=defval('7'), const='7', nargs='?', choices=['random', '0', '1', '2', '3', '4', '5', '6', '7'], help='''\ How many crystals are needed to defeat ganon. Any other requirements for ganon for the selected goal still apply. @@ -171,16 +181,18 @@ def start(): Random: Picks a random value between 0 and 7 (inclusive). 0-7: Number of crystals needed ''') - parser.add_argument('--crystals_gt', default='7', const='7', nargs='?', choices=['random', '0', '1', '2', '3', '4', '5', '6', '7'], + parser.add_argument('--crystals_gt', default=defval('7'), const='7', nargs='?', choices=['random', '0', '1', '2', '3', '4', '5', '6', '7'], help='''\ How many crystals are needed to open GT. For inverted mode this applies to the castle tower door instead. (default: %(default)s) Random: Picks a random value between 0 and 7 (inclusive). 0-7: Number of crystals needed ''') - - parser.add_argument('--rom', default='Zelda no Densetsu - Kamigami no Triforce (Japan).sfc', help='Path to an ALttP JAP(1.0) rom to use as a base.') - parser.add_argument('--loglevel', default='info', const='info', nargs='?', choices=['error', 'info', 'warning', 'debug'], help='Select level of logging for output.') + parser.add_argument('--openpyramid', default=defval(False), help='''\ + Pre-opens the pyramid hole, this removes the Agahnim 2 requirement for it + ''', action='store_true') + parser.add_argument('--rom', default=defval('Zelda no Densetsu - Kamigami no Triforce (Japan).sfc'), help='Path to an ALttP JAP(1.0) rom to use as a base.') + parser.add_argument('--loglevel', default=defval('info'), const='info', nargs='?', choices=['error', 'info', 'warning', 'debug'], help='Select level of logging for output.') parser.add_argument('--seed', help='Define seed number to generate.', type=int) parser.add_argument('--count', help='''\ Use to batch generate multiple seeds with same settings. @@ -189,50 +201,51 @@ def start(): --seed given will produce the same 10 (different) roms each time). ''', type=int) - parser.add_argument('--fastmenu', default='normal', const='normal', nargs='?', choices=['normal', 'instant', 'double', 'triple', 'quadruple', 'half'], + parser.add_argument('--fastmenu', default=defval('normal'), const='normal', nargs='?', choices=['normal', 'instant', 'double', 'triple', 'quadruple', 'half'], help='''\ Select the rate at which the menu opens and closes. (default: %(default)s) ''') parser.add_argument('--quickswap', help='Enable quick item swapping with L and R.', action='store_true') parser.add_argument('--disablemusic', help='Disables game music.', action='store_true') - parser.add_argument('--keysanity', help='''\ - Keys (and other dungeon items) are no longer restricted to - their dungeons, but can be anywhere - ''', action='store_true') - parser.add_argument('--retro', help='''\ + parser.add_argument('--extendedmsu', help='Use v31 Extended msu', action='store_true') + parser.add_argument('--mapshuffle', default=defval(False), help='Maps are no longer restricted to their dungeons, but can be anywhere', action='store_true') + parser.add_argument('--compassshuffle', default=defval(False), help='Compasses are no longer restricted to their dungeons, but can be anywhere', action='store_true') + parser.add_argument('--keyshuffle', default=defval(False), help='Small Keys are no longer restricted to their dungeons, but can be anywhere', action='store_true') + parser.add_argument('--bigkeyshuffle', default=defval(False), help='Big Keys are no longer restricted to their dungeons, but can be anywhere', action='store_true') + parser.add_argument('--keysanity', default=defval(False), help=argparse.SUPPRESS, action='store_true') + parser.add_argument('--retro', default=defval(False), help='''\ Keys are universal, shooting arrows costs rupees, and a few other little things make this more like Zelda-1. ''', action='store_true') - parser.add_argument('--custom', default=False, help='Not supported.') - parser.add_argument('--customitemarray', default=False, help='Not supported.') - parser.add_argument('--nodungeonitems', help='''\ - Remove Maps and Compasses from Itempool, replacing them by - empty slots. - ''', action='store_true') - parser.add_argument('--accessibility', default='items', const='items', nargs='?', choices=['items', 'locations', 'none'], help='''\ + parser.add_argument('--startinventory', default=defval(''), help='Specifies a list of items that will be in your starting inventory (separated by commas)') + parser.add_argument('--custom', default=defval(False), help='Not supported.') + parser.add_argument('--customitemarray', default=defval(False), help='Not supported.') + parser.add_argument('--accessibility', default=defval('items'), const='items', nargs='?', choices=['items', 'locations', 'none'], help='''\ Select Item/Location Accessibility. (default: %(default)s) Items: You can reach all unique inventory items. No guarantees about reaching all locations or all keys. Locations: You will be able to reach every location in the game. None: You will be able to reach enough locations to beat the game. ''') - parser.add_argument('--hints', help='''\ + parser.add_argument('--hints', default=defval(False), help='''\ Make telepathic tiles and storytellers give helpful hints. ''', action='store_true') # included for backwards compatibility - parser.add_argument('--shuffleganon', help=argparse.SUPPRESS, action='store_true', default=True) + parser.add_argument('--shuffleganon', help=argparse.SUPPRESS, action='store_true', default=defval(True)) parser.add_argument('--no-shuffleganon', help='''\ If set, the Pyramid Hole and Ganon's Tower are not included entrance shuffle pool. ''', action='store_false', dest='shuffleganon') - parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['double', 'normal', 'half', 'quarter', 'off'], + parser.add_argument('--heartbeep', default=defval('normal'), const='normal', nargs='?', choices=['double', 'normal', 'half', 'quarter', 'off'], help='''\ Select the rate at which the heart beep sound is played at low health. (default: %(default)s) ''') - parser.add_argument('--heartcolor', default='red', const='red', nargs='?', choices=['red', 'blue', 'green', 'yellow', 'random'], + parser.add_argument('--heartcolor', default=defval('red'), const='red', nargs='?', choices=['red', 'blue', 'green', 'yellow', 'random'], help='Select the color of Link\'s heart meter. (default: %(default)s)') + parser.add_argument('--ow_palettes', default=defval('default'), choices=['default', 'random', 'blackout']) + parser.add_argument('--uw_palettes', default=defval('default'), choices=['default', 'random', 'blackout']) parser.add_argument('--sprite', help='''\ Path to a sprite sheet to use for Link. Needs to be in binary format and have a length of 0x7000 (28672) bytes, @@ -246,21 +259,58 @@ def start(): Output .json patch to stdout instead of a patched rom. Used for VT site integration, do not use otherwise. ''') - parser.add_argument('--skip_playthrough', action='store_true', default=False) - parser.add_argument('--enemizercli', default='') - parser.add_argument('--shufflebosses', default='none', choices=['none', 'basic', 'normal', 'chaos']) - parser.add_argument('--shuffleenemies', default=False, action='store_true') - parser.add_argument('--enemy_health', default='default', choices=['default', 'easy', 'normal', 'hard', 'expert']) - parser.add_argument('--enemy_damage', default='default', choices=['default', 'shuffled', 'chaos']) - parser.add_argument('--shufflepalette', default=False, action='store_true') - parser.add_argument('--shufflepots', default=False, action='store_true') - parser.add_argument('--multi', default=1, type=lambda value: min(max(int(value), 1), 255)) - + parser.add_argument('--skip_playthrough', action='store_true', default=defval(False)) + parser.add_argument('--enemizercli', default=defval('EnemizerCLI/EnemizerCLI.Core')) + parser.add_argument('--shufflebosses', default=defval('none'), choices=['none', 'basic', 'normal', 'chaos']) + parser.add_argument('--shuffleenemies', default=defval('none'), choices=['none', 'shuffled', 'chaos']) + parser.add_argument('--enemy_health', default=defval('default'), choices=['default', 'easy', 'normal', 'hard', 'expert']) + parser.add_argument('--enemy_damage', default=defval('default'), choices=['default', 'shuffled', 'chaos']) + parser.add_argument('--shufflepots', default=defval(False), action='store_true') + parser.add_argument('--beemizer', default=defval(0), type=lambda value: min(max(int(value), 0), 4)) + parser.add_argument('--remote_items', default=defval(False), action='store_true') + parser.add_argument('--multi', default=defval(1), type=lambda value: min(max(int(value), 1), 255)) + parser.add_argument('--names', default=defval('')) + parser.add_argument('--teams', default=defval(1), type=lambda value: max(int(value), 1)) parser.add_argument('--outputpath') - args = parser.parse_args() + parser.add_argument('--race', default=defval(False), action='store_true') + parser.add_argument('--outputname') + parser.add_argument('--create_diff', default=defval(False), action='store_true', help='''\ + create a binary patch file from which the randomized rom can be recreated using MultiClient. + Does not work with jsonout.''') - if args.outputpath and os.path.isdir(args.outputpath): - output_path.cached_path = args.outputpath + if multiargs.multi: + for player in range(1, multiargs.multi + 1): + parser.add_argument(f'--p{player}', default=defval(''), help=argparse.SUPPRESS) + + ret = parser.parse_args(argv) + if ret.timer == "none": + ret.timer = False + if ret.keysanity: + ret.mapshuffle, ret.compassshuffle, ret.keyshuffle, ret.bigkeyshuffle = [True] * 4 + + if multiargs.multi: + defaults = copy.deepcopy(ret) + for player in range(1, multiargs.multi + 1): + playerargs = parse_arguments(shlex.split(getattr(ret, f"p{player}")), True) + + for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality', + 'shuffle', 'crystals_ganon', 'crystals_gt', 'openpyramid', 'timer', + 'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory', + 'retro', 'accessibility', 'hints', 'beemizer', + 'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots', + 'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor', + 'heartbeep', + 'remote_items', 'progressive', 'extendedmsu']: + value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name) + if player == 1: + setattr(ret, name, {1: value}) + else: + getattr(ret, name)[player] = value + + return ret + +def start(): + args = parse_arguments(None) if is_bundled() and len(sys.argv) == 1: # for the bundled builds, if we have no arguments, the user @@ -276,9 +326,9 @@ def start(): if not args.jsonout and not os.path.isfile(args.rom): input('Could not find valid base rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom) sys.exit(1) - if args.sprite is not None and not os.path.isfile(args.sprite): + if any([sprite is not None and not os.path.isfile(sprite) and not get_sprite_from_name(sprite) for sprite in args.sprite.values()]): if not args.jsonout: - input('Could not find link sprite sheet at given location. \nPress Enter to exit.' % args.sprite) + input('Could not find link sprite sheet at given location. \nPress Enter to exit.') sys.exit(1) else: raise IOError('Cannot find sprite file at %s' % args.sprite) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index d7d733c0..c5f65695 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -19,17 +19,17 @@ def link_entrances(world, player): connect_simple(world, exitname, regionname, player) # if we do not shuffle, set default connections - if world.shuffle == 'vanilla': + if world.shuffle[player] == 'vanilla': for exitname, regionname in default_connections: connect_simple(world, exitname, regionname, player) for exitname, regionname in default_dungeon_connections: connect_simple(world, exitname, regionname, player) - elif world.shuffle == 'dungeonssimple': + elif world.shuffle[player] == 'dungeonssimple': for exitname, regionname in default_connections: connect_simple(world, exitname, regionname, player) simple_shuffle_dungeons(world, player) - elif world.shuffle == 'dungeonsfull': + elif world.shuffle[player] == 'dungeonsfull': for exitname, regionname in default_connections: connect_simple(world, exitname, regionname, player) @@ -39,7 +39,7 @@ def link_entrances(world, player): lw_entrances = list(LW_Dungeon_Entrances) dw_entrances = list(DW_Dungeon_Entrances) - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) else: @@ -52,14 +52,14 @@ def link_entrances(world, player): dw_entrances.append('Ganons Tower') dungeon_exits.append('Ganons Tower Exit') - if world.mode == 'standard': + if world.mode[player] == 'standard': # rest of hyrule castle must be in light world, so it has to be the one connected to east exit of desert connect_mandatory_exits(world, lw_entrances, [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], list(LW_Dungeon_Entrances_Must_Exit), player) else: connect_mandatory_exits(world, lw_entrances, dungeon_exits, list(LW_Dungeon_Entrances_Must_Exit), player) connect_mandatory_exits(world, dw_entrances, dungeon_exits, list(DW_Dungeon_Entrances_Must_Exit), player) connect_caves(world, lw_entrances, dw_entrances, dungeon_exits, player) - elif world.shuffle == 'simple': + elif world.shuffle[player] == 'simple': simple_shuffle_dungeons(world, player) old_man_entrances = list(Old_Man_Entrances) @@ -130,7 +130,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, single_doors, door_targets, player) - elif world.shuffle == 'restricted': + elif world.shuffle[player] == 'restricted': simple_shuffle_dungeons(world, player) lw_entrances = list(LW_Entrances + LW_Single_Cave_Doors + Old_Man_Entrances) @@ -201,7 +201,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, doors, door_targets, player) - elif world.shuffle == 'restricted_legacy': + elif world.shuffle[player] == 'restricted_legacy': simple_shuffle_dungeons(world, player) lw_entrances = list(LW_Entrances) @@ -256,7 +256,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, single_doors, door_targets, player) - elif world.shuffle == 'full': + elif world.shuffle[player] == 'full': skull_woods_shuffle(world, player) lw_entrances = list(LW_Entrances + LW_Dungeon_Entrances + LW_Single_Cave_Doors + Old_Man_Entrances) @@ -273,7 +273,7 @@ def link_entrances(world, player): # tavern back door cannot be shuffled yet connect_doors(world, ['Tavern North'], ['Tavern'], player) - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) else: @@ -309,7 +309,7 @@ def link_entrances(world, player): pass else: #if the cave wasn't placed we get here connect_caves(world, lw_entrances, [], old_man_house, player) - if world.mode == 'standard': + if world.mode[player] == 'standard': # rest of hyrule castle must be in light world connect_caves(world, lw_entrances, [], [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], player) @@ -361,7 +361,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, doors, door_targets, player) - elif world.shuffle == 'crossed': + elif world.shuffle[player] == 'crossed': skull_woods_shuffle(world, player) entrances = list(LW_Entrances + LW_Dungeon_Entrances + LW_Single_Cave_Doors + Old_Man_Entrances + DW_Entrances + DW_Dungeon_Entrances + DW_Single_Cave_Doors) @@ -376,7 +376,7 @@ def link_entrances(world, player): # tavern back door cannot be shuffled yet connect_doors(world, ['Tavern North'], ['Tavern'], player) - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) else: @@ -392,7 +392,7 @@ def link_entrances(world, player): #place must-exit caves connect_mandatory_exits(world, entrances, caves, must_exits, player) - if world.mode == 'standard': + if world.mode[player] == 'standard': # rest of hyrule castle must be dealt with connect_caves(world, entrances, [], [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], player) @@ -437,7 +437,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, entrances, door_targets, player) - elif world.shuffle == 'full_legacy': + elif world.shuffle[player] == 'full_legacy': skull_woods_shuffle(world, player) lw_entrances = list(LW_Entrances + LW_Dungeon_Entrances + Old_Man_Entrances) @@ -451,7 +451,7 @@ def link_entrances(world, player): blacksmith_doors = list(Blacksmith_Single_Cave_Doors) door_targets = list(Single_Cave_Targets) - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) else: @@ -471,7 +471,7 @@ def link_entrances(world, player): else: connect_mandatory_exits(world, dw_entrances, caves, dw_must_exits, player) connect_mandatory_exits(world, lw_entrances, caves, lw_must_exits, player) - if world.mode == 'standard': + if world.mode[player] == 'standard': # rest of hyrule castle must be in light world connect_caves(world, lw_entrances, [], [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], player) @@ -513,7 +513,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, single_doors, door_targets, player) - elif world.shuffle == 'madness_legacy': + elif world.shuffle[player] == 'madness_legacy': # here lie dragons, connections are no longer two way lw_entrances = list(LW_Entrances + LW_Dungeon_Entrances + Old_Man_Entrances) dw_entrances = list(DW_Entrances + DW_Dungeon_Entrances) @@ -552,7 +552,7 @@ def link_entrances(world, player): ('Lumberjack Tree Exit', 'Lumberjack Tree (top)'), (('Skull Woods Second Section Exit (East)', 'Skull Woods Second Section Exit (West)'), 'Skull Woods Second Section (Drop)')] - if world.mode == 'standard': + if world.mode[player] == 'standard': # cannot move uncle cave connect_entrance(world, 'Hyrule Castle Secret Entrance Drop', 'Hyrule Castle Secret Entrance', player) connect_exit(world, 'Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance Stairs', player) @@ -606,7 +606,7 @@ def link_entrances(world, player): connect_entrance(world, hole, target, player) # hyrule castle handling - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_entrance(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) connect_exit(world, 'Hyrule Castle Exit (South)', 'Hyrule Castle Entrance (South)', player) @@ -755,7 +755,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, single_doors, door_targets, player) - elif world.shuffle == 'insanity': + elif world.shuffle[player] == 'insanity': # beware ye who enter here entrances = LW_Entrances + LW_Dungeon_Entrances + DW_Entrances + DW_Dungeon_Entrances + Old_Man_Entrances + ['Skull Woods Second Section Door (East)', 'Skull Woods First Section Door', 'Kakariko Well Cave', 'Bat Cave Cave', 'North Fairy Cave', 'Sanctuary', 'Lost Woods Hideout Stump', 'Lumberjack Tree Cave'] @@ -792,7 +792,7 @@ def link_entrances(world, player): # tavern back door cannot be shuffled yet connect_doors(world, ['Tavern North'], ['Tavern'], player) - if world.mode == 'standard': + if world.mode[player] == 'standard': # cannot move uncle cave connect_entrance(world, 'Hyrule Castle Secret Entrance Drop', 'Hyrule Castle Secret Entrance', player) connect_exit(world, 'Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance Stairs', player) @@ -825,7 +825,7 @@ def link_entrances(world, player): connect_entrance(world, hole, hole_targets.pop(), player) # hyrule castle handling - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_entrance(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) connect_exit(world, 'Hyrule Castle Exit (South)', 'Hyrule Castle Entrance (South)', player) @@ -902,8 +902,8 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, doors, door_targets, player) - elif world.shuffle == 'insanity_legacy': - world.fix_fake_world = False + elif world.shuffle[player] == 'insanity_legacy': + world.fix_fake_world[player] = False # beware ye who enter here entrances = LW_Entrances + LW_Dungeon_Entrances + DW_Entrances + DW_Dungeon_Entrances + Old_Man_Entrances + ['Skull Woods Second Section Door (East)', 'Skull Woods First Section Door', 'Kakariko Well Cave', 'Bat Cave Cave', 'North Fairy Cave', 'Sanctuary', 'Lost Woods Hideout Stump', 'Lumberjack Tree Cave'] @@ -927,7 +927,7 @@ def link_entrances(world, player): hole_targets = ['Kakariko Well (top)', 'Bat Cave (right)', 'North Fairy Cave', 'Lost Woods Hideout (top)', 'Lumberjack Tree (top)', 'Sewer Drop', 'Skull Woods Second Section (Drop)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Top)'] - if world.mode == 'standard': + if world.mode[player] == 'standard': # cannot move uncle cave connect_entrance(world, 'Hyrule Castle Secret Entrance Drop', 'Hyrule Castle Secret Entrance', player) connect_exit(world, 'Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance Stairs', player) @@ -960,7 +960,7 @@ def link_entrances(world, player): connect_entrance(world, hole, hole_targets.pop(), player) # hyrule castle handling - if world.mode == 'standard': + if world.mode[player] == 'standard': # must connect front of hyrule castle to do escape connect_entrance(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) connect_exit(world, 'Hyrule Castle Exit (South)', 'Hyrule Castle Entrance (South)', player) @@ -1079,17 +1079,17 @@ def link_inverted_entrances(world, player): connect_simple(world, exitname, regionname, player) # if we do not shuffle, set default connections - if world.shuffle == 'vanilla': + if world.shuffle[player] == 'vanilla': for exitname, regionname in inverted_default_connections: connect_simple(world, exitname, regionname, player) for exitname, regionname in inverted_default_dungeon_connections: connect_simple(world, exitname, regionname, player) - elif world.shuffle == 'dungeonssimple': + elif world.shuffle[player] == 'dungeonssimple': for exitname, regionname in inverted_default_connections: connect_simple(world, exitname, regionname, player) simple_shuffle_dungeons(world, player) - elif world.shuffle == 'dungeonsfull': + elif world.shuffle[player] == 'dungeonsfull': for exitname, regionname in inverted_default_connections: connect_simple(world, exitname, regionname, player) @@ -1151,7 +1151,7 @@ def link_inverted_entrances(world, player): remaining_lw_entrances = [i for i in all_dungeon_entrances if i in lw_entrances] connect_caves(world, remaining_lw_entrances, remaining_dw_entrances, dungeon_exits, player) - elif world.shuffle == 'simple': + elif world.shuffle[player] == 'simple': simple_shuffle_dungeons(world, player) old_man_entrances = list(Inverted_Old_Man_Entrances) @@ -1160,7 +1160,7 @@ def link_inverted_entrances(world, player): single_doors = list(Single_Cave_Doors) bomb_shop_doors = list(Inverted_Bomb_Shop_Single_Cave_Doors) - blacksmith_doors = list(Inverted_Blacksmith_Single_Cave_Doors) + blacksmith_doors = list(Blacksmith_Single_Cave_Doors) door_targets = list(Inverted_Single_Cave_Targets) # we shuffle all 2 entrance caves as pairs as a start @@ -1191,6 +1191,8 @@ def link_inverted_entrances(world, player): bomb_shop_doors.remove(links_house) if links_house in blacksmith_doors: blacksmith_doors.remove(links_house) + if links_house in old_man_entrances: + old_man_entrances.remove(links_house) # place dark sanc sanc_doors = [door for door in Inverted_Dark_Sanctuary_Doors if door in bomb_shop_doors] @@ -1243,7 +1245,7 @@ def link_inverted_entrances(world, player): # place remaining doors connect_doors(world, single_doors, door_targets, player) - elif world.shuffle == 'restricted': + elif world.shuffle[player] == 'restricted': simple_shuffle_dungeons(world, player) lw_entrances = list(Inverted_LW_Entrances + Inverted_LW_Single_Cave_Doors) @@ -1253,7 +1255,7 @@ def link_inverted_entrances(world, player): caves = list(Cave_Exits + Cave_Three_Exits + Old_Man_House) single_doors = list(Single_Cave_Doors) bomb_shop_doors = list(Inverted_Bomb_Shop_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors) - blacksmith_doors = list(Inverted_Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) + blacksmith_doors = list(Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) door_targets = list(Inverted_Single_Cave_Targets) # place links house @@ -1326,7 +1328,7 @@ def link_inverted_entrances(world, player): doors = lw_entrances + dw_entrances # place remaining doors connect_doors(world, doors, door_targets, player) - elif world.shuffle == 'full': + elif world.shuffle[player] == 'full': skull_woods_shuffle(world, player) lw_entrances = list(Inverted_LW_Entrances + Inverted_LW_Dungeon_Entrances + Inverted_LW_Single_Cave_Doors) @@ -1335,7 +1337,7 @@ def link_inverted_entrances(world, player): old_man_entrances = list(Inverted_Old_Man_Entrances + Old_Man_Entrances + ['Inverted Agahnims Tower', 'Tower of Hera']) caves = list(Cave_Exits + Dungeon_Exits + Cave_Three_Exits) # don't need to consider three exit caves, have one exit caves to avoid parity issues bomb_shop_doors = list(Inverted_Bomb_Shop_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors) - blacksmith_doors = list(Inverted_Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) + blacksmith_doors = list(Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) door_targets = list(Inverted_Single_Cave_Targets) old_man_house = list(Old_Man_House) @@ -1477,7 +1479,7 @@ def link_inverted_entrances(world, player): # place remaining doors connect_doors(world, doors, door_targets, player) - elif world.shuffle == 'crossed': + elif world.shuffle[player] == 'crossed': skull_woods_shuffle(world, player) entrances = list(Inverted_LW_Entrances + Inverted_LW_Dungeon_Entrances + Inverted_LW_Single_Cave_Doors + Inverted_Old_Man_Entrances + Inverted_DW_Entrances + Inverted_DW_Dungeon_Entrances + Inverted_DW_Single_Cave_Doors) @@ -1486,7 +1488,7 @@ def link_inverted_entrances(world, player): old_man_entrances = list(Inverted_Old_Man_Entrances + Old_Man_Entrances + ['Inverted Agahnims Tower', 'Tower of Hera']) caves = list(Cave_Exits + Dungeon_Exits + Cave_Three_Exits + Old_Man_House) # don't need to consider three exit caves, have one exit caves to avoid parity issues bomb_shop_doors = list(Inverted_Bomb_Shop_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors) - blacksmith_doors = list(Inverted_Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) + blacksmith_doors = list(Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) door_targets = list(Inverted_Single_Cave_Targets) # randomize which desert ledge door is a must-exit @@ -1587,7 +1589,7 @@ def link_inverted_entrances(world, player): # place remaining doors connect_doors(world, entrances, door_targets, player) - elif world.shuffle == 'insanity': + elif world.shuffle[player] == 'insanity': # beware ye who enter here entrances = Inverted_LW_Entrances + Inverted_LW_Dungeon_Entrances + Inverted_DW_Entrances + Inverted_DW_Dungeon_Entrances + Inverted_Old_Man_Entrances + Old_Man_Entrances + ['Skull Woods Second Section Door (East)', 'Skull Woods Second Section Door (West)', 'Skull Woods First Section Door', 'Kakariko Well Cave', 'Bat Cave Cave', 'North Fairy Cave', 'Sanctuary', 'Lost Woods Hideout Stump', 'Lumberjack Tree Cave', 'Hyrule Castle Entrance (South)'] @@ -1610,7 +1612,7 @@ def link_inverted_entrances(world, player): # bomb shop logic for. # Specifically we could potentially add: 'Dark Death Mountain Ledge (East)' and doors associated with pits bomb_shop_doors = list(Inverted_Bomb_Shop_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors + ['Turtle Rock Isolated Ledge Entrance', 'Hookshot Cave Back Entrance']) - blacksmith_doors = list(Inverted_Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) + blacksmith_doors = list(Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors) door_targets = list(Inverted_Single_Cave_Targets) random.shuffle(doors) @@ -1764,7 +1766,7 @@ def connect_simple(world, exitname, regionname, player): world.get_entrance(exitname, player).connect(world.get_region(regionname, player)) -def connect_entrance(world, entrancename, exitname, player): +def connect_entrance(world, entrancename: str, exitname: str, player: int): entrance = world.get_entrance(entrancename, player) # check if we got an entrance or a region to connect to try: @@ -1831,7 +1833,7 @@ def scramble_holes(world, player): else: hole_targets.append(('Pyramid Exit', 'Pyramid')) - if world.mode == 'standard': + if world.mode[player] == 'standard': # cannot move uncle cave connect_two_way(world, 'Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Secret Entrance Exit', player) connect_entrance(world, 'Hyrule Castle Secret Entrance Drop', 'Hyrule Castle Secret Entrance', player) @@ -1840,14 +1842,14 @@ def scramble_holes(world, player): hole_targets.append(('Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance')) # do not shuffle sanctuary into pyramid hole unless shuffle is crossed - if world.shuffle == 'crossed': + if world.shuffle[player] == 'crossed': hole_targets.append(('Sanctuary Exit', 'Sewer Drop')) if world.shuffle_ganon: random.shuffle(hole_targets) exit, target = hole_targets.pop() connect_two_way(world, 'Pyramid Entrance', exit, player) connect_entrance(world, 'Pyramid Hole', target, player) - if world.shuffle != 'crossed': + if world.shuffle[player] != 'crossed': hole_targets.append(('Sanctuary Exit', 'Sewer Drop')) random.shuffle(hole_targets) @@ -1882,14 +1884,14 @@ def scramble_inverted_holes(world, player): hole_targets.append(('Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance')) # do not shuffle sanctuary into pyramid hole unless shuffle is crossed - if world.shuffle == 'crossed': + if world.shuffle[player] == 'crossed': hole_targets.append(('Sanctuary Exit', 'Sewer Drop')) if world.shuffle_ganon: random.shuffle(hole_targets) exit, target = hole_targets.pop() connect_two_way(world, 'Inverted Pyramid Entrance', exit, player) connect_entrance(world, 'Inverted Pyramid Hole', target, player) - if world.shuffle != 'crossed': + if world.shuffle[player] != 'crossed': hole_targets.append(('Sanctuary Exit', 'Sewer Drop')) random.shuffle(hole_targets) @@ -1931,11 +1933,11 @@ def connect_mandatory_exits(world, entrances, caves, must_be_exits, player, dp_m if len(cave) == 2: entrance = entrances.pop() # ToDo Better solution, this is a hot fix. Do not connect both sides of trock/desert ledge only to each other - if world.mode != 'inverted' and entrance == 'Dark Death Mountain Ledge (West)': + if world.mode[player] != 'inverted' and entrance == 'Dark Death Mountain Ledge (West)': new_entrance = entrances.pop() entrances.append(entrance) entrance = new_entrance - if world.mode == 'inverted' and entrance == dp_must_exit: + if world.mode[player] == 'inverted' and entrance == dp_must_exit: new_entrance = entrances.pop() entrances.append(entrance) entrance = new_entrance @@ -2006,7 +2008,7 @@ def simple_shuffle_dungeons(world, player): dungeon_entrances = ['Eastern Palace', 'Tower of Hera', 'Thieves Town', 'Skull Woods Final Section', 'Palace of Darkness', 'Ice Palace', 'Misery Mire', 'Swamp Palace'] dungeon_exits = ['Eastern Palace Exit', 'Tower of Hera Exit', 'Thieves Town Exit', 'Skull Woods Final Section Exit', 'Palace of Darkness Exit', 'Ice Palace Exit', 'Misery Mire Exit', 'Swamp Palace Exit'] - if world.mode != 'inverted': + if world.mode[player] != 'inverted': if not world.shuffle_ganon: connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit', player) else: @@ -2021,13 +2023,13 @@ def simple_shuffle_dungeons(world, player): # mix up 4 door dungeons multi_dungeons = ['Desert', 'Turtle Rock'] - if world.mode == 'open' or (world.mode == 'inverted' and world.shuffle_ganon): + if world.mode[player] == 'open' or (world.mode[player] == 'inverted' and world.shuffle_ganon): multi_dungeons.append('Hyrule Castle') random.shuffle(multi_dungeons) dp_target = multi_dungeons[0] tr_target = multi_dungeons[1] - if world.mode not in ['open', 'inverted'] or (world.mode == 'inverted' and world.shuffle_ganon is False): + if world.mode[player] not in ['open', 'inverted'] or (world.mode[player] == 'inverted' and world.shuffle_ganon is False): # place hyrule castle as intended hc_target = 'Hyrule Castle' else: @@ -2035,7 +2037,7 @@ def simple_shuffle_dungeons(world, player): # ToDo improve this? - if world.mode != 'inverted': + if world.mode[player] != 'inverted': if hc_target == 'Hyrule Castle': connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player) connect_two_way(world, 'Hyrule Castle Entrance (East)', 'Hyrule Castle Exit (East)', player) @@ -2646,8 +2648,6 @@ Inverted_Bomb_Shop_Multi_Cave_Doors = ['Hyrule Castle Entrance (South)', 'Desert Palace Entrance (West)', 'Desert Palace Entrance (North)'] -Inverted_Blacksmith_Multi_Cave_Doors = [] # same as non-inverted - Inverted_LW_Single_Cave_Doors = LW_Single_Cave_Doors + ['Inverted Big Bomb Shop'] Inverted_DW_Single_Cave_Doors = ['Bonk Fairy (Dark)', @@ -2715,39 +2715,8 @@ Inverted_Bomb_Shop_Single_Cave_Doors = ['Waterfall of Wishing', 'Bumper Cave (Top)', 'Mimic Cave', 'Dark Lake Hylia Shop', - 'Inverted Links House'] - -Inverted_Blacksmith_Single_Cave_Doors = ['Blinds Hideout', - 'Lake Hylia Fairy', - 'Light Hype Fairy', - 'Desert Fairy', - 'Chicken House', - 'Aginahs Cave', - 'Sahasrahlas Hut', - 'Cave Shop (Lake Hylia)', - 'Blacksmiths Hut', - 'Sick Kids House', - 'Lost Woods Gamble', - 'Fortune Teller (Light)', - 'Snitch Lady (East)', - 'Snitch Lady (West)', - 'Bush Covered House', - 'Tavern (Front)', - 'Light World Bomb Hut', - 'Kakariko Shop', - 'Mini Moldorm Cave', - 'Long Fairy Cave', - 'Good Bee Cave', - '20 Rupee Cave', - '50 Rupee Cave', - 'Ice Rod Cave', - 'Library', - 'Potion Shop', - 'Dam', - 'Lumberjack House', - 'Lake Hylia Fortune Teller', - 'Kakariko Gamble Game', - 'Inverted Big Bomb Shop'] + 'Inverted Links House', + 'Inverted Big Bomb Shop'] Inverted_Single_Cave_Targets = ['Blinds Hideout', @@ -3020,7 +2989,7 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia ('Lake Hylia Island Pier', 'Lake Hylia Island'), ('Lake Hylia Warp', 'Northeast Light World'), ('Northeast Light World Warp', 'Light World'), - ('Zoras River', 'Zoras River'), + ('Zoras River', 'Zoras River'), ('Kings Grave Outer Rocks', 'Kings Grave Area'), ('Kings Grave Inner Rocks', 'Light World'), ('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'), diff --git a/Fill.py b/Fill.py index bfc1145e..811df900 100644 --- a/Fill.py +++ b/Fill.py @@ -161,7 +161,7 @@ def distribute_items_staleness(world): logging.getLogger('').debug('Unplaced items: %s - Unfilled Locations: %s', [item.name for item in itempool], [location.name for location in fill_locations]) -def fill_restrictive(world, base_state, locations, itempool): +def fill_restrictive(world, base_state, locations, itempool, single_player_placement = False): def sweep_from_pool(): new_state = base_state.copy() for item in itempool: @@ -169,45 +169,51 @@ def fill_restrictive(world, base_state, locations, itempool): new_state.sweep_for_events() return new_state - while itempool and locations: - items_to_place = [] - nextpool = [] - placing_players = set() - for item in reversed(itempool): - if item.player not in placing_players: - placing_players.add(item.player) - items_to_place.append(item) - else: - nextpool.insert(0, item) - itempool = nextpool + unplaced_items = [] - maximum_exploration_state = sweep_from_pool() + no_access_checks = {} + reachable_items = {} + for item in itempool: + if world.accessibility[item.player] == 'none': + no_access_checks.setdefault(item.player, []).append(item) + else: + reachable_items.setdefault(item.player, []).append(item) - perform_access_check = True - if world.accessibility == 'none': - perform_access_check = not world.has_beaten_game(maximum_exploration_state) + for player_items in [no_access_checks, reachable_items]: + while any(player_items.values()) and locations: + items_to_place = [[itempool.remove(items[-1]), items.pop()][-1] for items in player_items.values() if items] - for item_to_place in items_to_place: - spot_to_fill = None - for location in locations: - if location.can_fill(maximum_exploration_state, item_to_place, perform_access_check): - spot_to_fill = location - break + maximum_exploration_state = sweep_from_pool() + has_beaten_game = world.has_beaten_game(maximum_exploration_state) - if spot_to_fill is None: - # we filled all reachable spots. Maybe the game can be beaten anyway? - if world.can_beat_game(): - if world.accessibility != 'none': - logging.getLogger('').warning('Not all items placed. Game beatable anyway. (Could not place %s)' % item_to_place) - continue - raise FillError('No more spots to place %s' % item_to_place) + for item_to_place in items_to_place: + perform_access_check = True + if world.accessibility[item_to_place.player] == 'none': + perform_access_check = not world.has_beaten_game(maximum_exploration_state, item_to_place.player) if single_player_placement else not has_beaten_game - world.push_item(spot_to_fill, item_to_place, False) - locations.remove(spot_to_fill) - spot_to_fill.event = True + spot_to_fill = None + for location in locations: + if (not single_player_placement or location.player == item_to_place.player)\ + and location.can_fill(maximum_exploration_state, item_to_place, perform_access_check): + spot_to_fill = location + break + if spot_to_fill is None: + # we filled all reachable spots. Maybe the game can be beaten anyway? + unplaced_items.insert(0, item_to_place) + if world.can_beat_game(): + if world.accessibility[item_to_place.player] != 'none': + logging.getLogger('').warning('Not all items placed. Game beatable anyway. (Could not place %s)' % item_to_place) + continue + raise FillError('No more spots to place %s' % item_to_place) -def distribute_items_restrictive(world, gftower_trash_count=0, fill_locations=None): + world.push_item(spot_to_fill, item_to_place, False) + locations.remove(spot_to_fill) + spot_to_fill.event = True + + itempool.extend(unplaced_items) + +def distribute_items_restrictive(world, gftower_trash=False, fill_locations=None): # If not passed in, then get a shuffled list of locations to fill in if not fill_locations: fill_locations = world.get_unfilled_locations() @@ -221,23 +227,26 @@ def distribute_items_restrictive(world, gftower_trash_count=0, fill_locations=No # fill in gtower locations with trash first for player in range(1, world.players + 1): - if world.ganonstower_vanilla[player]: - gtower_locations = [location for location in fill_locations if 'Ganons Tower' in location.name and location.player == player] - random.shuffle(gtower_locations) - trashcnt = 0 - while gtower_locations and restitempool and trashcnt < gftower_trash_count: - spot_to_fill = gtower_locations.pop() - item_to_place = restitempool.pop() - world.push_item(spot_to_fill, item_to_place, False) - fill_locations.remove(spot_to_fill) - trashcnt += 1 + if not gftower_trash or not world.ganonstower_vanilla[player]: + continue + + gftower_trash_count = (random.randint(15, 50) if world.goal[player] == 'triforcehunt' else random.randint(0, 15)) + + gtower_locations = [location for location in fill_locations if 'Ganons Tower' in location.name and location.player == player] + random.shuffle(gtower_locations) + trashcnt = 0 + while gtower_locations and restitempool and trashcnt < gftower_trash_count: + spot_to_fill = gtower_locations.pop() + item_to_place = restitempool.pop() + world.push_item(spot_to_fill, item_to_place, False) + fill_locations.remove(spot_to_fill) + trashcnt += 1 random.shuffle(fill_locations) fill_locations.reverse() - # Make sure the escape small key is placed first in standard keysanity to prevent running out of spots - if world.keysanity and world.mode == 'standard': - progitempool.sort(key=lambda item: 1 if item.name == 'Small Key (Escape)' else 0) + # Make sure the escape small key is placed first in standard with key shuffle to prevent running out of spots + progitempool.sort(key=lambda item: 1 if item.name == 'Small Key (Escape)' and world.mode[item.player] == 'standard' and world.keyshuffle[item.player] else 0) fill_restrictive(world, world.state, fill_locations, progitempool) @@ -307,7 +316,7 @@ def flood_items(world): location_list = world.get_reachable_locations() random.shuffle(location_list) for location in location_list: - if location.item is not None and not location.item.advancement and not location.item.priority and not location.item.key: + if location.item is not None and not location.item.advancement and not location.item.priority and not location.item.smallkey and not location.item.bigkey: # safe to replace replace_item = location.item replace_item.location = None @@ -327,8 +336,7 @@ def balance_multiworld_progression(world): reachable_locations_count[player] = 0 def get_sphere_locations(sphere_state, locations): - if not world.keysanity: - sphere_state.sweep_for_events(key_only=True, locations=locations) + sphere_state.sweep_for_events(key_only=True, locations=locations) return [loc for loc in locations if sphere_state.can_reach(loc)] while True: @@ -338,8 +346,7 @@ def balance_multiworld_progression(world): reachable_locations_count[location.player] += 1 if checked_locations: - average_reachable_locations = sum(reachable_locations_count.values()) / world.players - threshold = ((average_reachable_locations + max(reachable_locations_count.values())) / 2) * 0.8 #todo: probably needs some tweaking + threshold = max(reachable_locations_count.values()) - 20 balancing_players = [player for player, reachables in reachable_locations_count.items() if reachables < threshold] if balancing_players: @@ -350,9 +357,9 @@ def balance_multiworld_progression(world): candidate_items = [] while True: for location in balancing_sphere: - if location.event: + if location.event and (world.keyshuffle[location.item.player] or not location.item.smallkey) and (world.bigkeyshuffle[location.item.player] or not location.item.bigkey): balancing_state.collect(location.item, True, location) - if location.item.player in balancing_players: + if location.item.player in balancing_players and not location.locked: candidate_items.append(location) balancing_sphere = get_sphere_locations(balancing_state, balancing_unchecked_locations) for location in balancing_sphere: @@ -360,11 +367,14 @@ def balance_multiworld_progression(world): balancing_reachables[location.player] += 1 if world.has_beaten_game(balancing_state) or all([reachables >= threshold for reachables in balancing_reachables.values()]): break + elif not balancing_sphere: + raise RuntimeError('Not all required items reachable. Something went terribly wrong here.') unlocked_locations = [l for l in unchecked_locations if l not in balancing_unchecked_locations] items_to_replace = [] for player in balancing_players: locations_to_test = [l for l in unlocked_locations if l.player == player] + # only replace items that end up in another player's world items_to_test = [l for l in candidate_items if l.item.player == player and l.player != player] while items_to_test: testing = items_to_test.pop() @@ -374,9 +384,6 @@ def balance_multiworld_progression(world): reducing_state.sweep_for_events(locations=locations_to_test) - if testing.locked: - continue - if world.has_beaten_game(balancing_state): if not world.has_beaten_game(reducing_state): items_to_replace.append(testing) @@ -386,13 +393,17 @@ def balance_multiworld_progression(world): items_to_replace.append(testing) replaced_items = False - locations_for_replacing = [l for l in checked_locations if not l.event and not l.locked] - while locations_for_replacing and items_to_replace: - new_location = locations_for_replacing.pop() + replacement_locations = [l for l in checked_locations if not l.event and not l.locked] + while replacement_locations and items_to_replace: + new_location = replacement_locations.pop() old_location = items_to_replace.pop() + + while not new_location.can_fill(state, old_location.item, False) or (new_location.item and not old_location.can_fill(state, new_location.item, False)): + replacement_locations.insert(0, new_location) + new_location = replacement_locations.pop() + new_location.item, old_location.item = old_location.item, new_location.item - new_location.event = True - old_location.event = False + new_location.event, old_location.event = True, False state.collect(new_location.item, True, new_location) replaced_items = True if replaced_items: @@ -402,9 +413,11 @@ def balance_multiworld_progression(world): sphere_locations.append(location) for location in sphere_locations: - if location.event: + if location.event and (world.keyshuffle[location.item.player] or not location.item.smallkey) and (world.bigkeyshuffle[location.item.player] or not location.item.bigkey): state.collect(location.item, True, location) checked_locations.extend(sphere_locations) if world.has_beaten_game(state): break + elif not sphere_locations: + raise RuntimeError('Not all required items reachable. Something went terribly wrong here.') diff --git a/Gui.py b/Gui.py index da8550df..94b6e7c3 100755 --- a/Gui.py +++ b/Gui.py @@ -2,6 +2,7 @@ from argparse import Namespace from glob import glob import json +import logging import random import os import shutil @@ -9,7 +10,11 @@ from tkinter import Checkbutton, OptionMenu, Toplevel, LabelFrame, PhotoImage, T from urllib.parse import urlparse from urllib.request import urlopen +import ModuleUpdate +ModuleUpdate.update() + from AdjusterMain import adjust +from EntranceRandomizer import parse_arguments from GuiUtils import ToolTips, set_icon, BackgroundTaskProgress from Main import main, __version__ as ESVersion from Rom import Sprite @@ -58,16 +63,20 @@ def guiMain(args=None): createSpoilerCheckbutton = Checkbutton(checkBoxFrame, text="Create Spoiler Log", variable=createSpoilerVar) suppressRomVar = IntVar() suppressRomCheckbutton = Checkbutton(checkBoxFrame, text="Do not create patched Rom", variable=suppressRomVar) - quickSwapVar = IntVar() - quickSwapCheckbutton = Checkbutton(checkBoxFrame, text="Enabled L/R Item quickswapping", variable=quickSwapVar) - keysanityVar = IntVar() - keysanityCheckbutton = Checkbutton(checkBoxFrame, text="Keysanity (keys anywhere)", variable=keysanityVar) + openpyramidVar = IntVar() + openpyramidCheckbutton = Checkbutton(checkBoxFrame, text="Pre-open Pyramid Hole", variable=openpyramidVar) + mcsbshuffleFrame = Frame(checkBoxFrame) + mcsbLabel = Label(mcsbshuffleFrame, text="Shuffle: ") + mapshuffleVar = IntVar() + mapshuffleCheckbutton = Checkbutton(mcsbshuffleFrame, text="Maps", variable=mapshuffleVar) + compassshuffleVar = IntVar() + compassshuffleCheckbutton = Checkbutton(mcsbshuffleFrame, text="Compasses", variable=compassshuffleVar) + keyshuffleVar = IntVar() + keyshuffleCheckbutton = Checkbutton(mcsbshuffleFrame, text="Keys", variable=keyshuffleVar) + bigkeyshuffleVar = IntVar() + bigkeyshuffleCheckbutton = Checkbutton(mcsbshuffleFrame, text="BigKeys", variable=bigkeyshuffleVar) retroVar = IntVar() retroCheckbutton = Checkbutton(checkBoxFrame, text="Retro mode (universal keys)", variable=retroVar) - dungeonItemsVar = IntVar() - dungeonItemsCheckbutton = Checkbutton(checkBoxFrame, text="Place Dungeon Items (Compasses/Maps)", onvalue=0, offvalue=1, variable=dungeonItemsVar) - disableMusicVar = IntVar() - disableMusicCheckbutton = Checkbutton(checkBoxFrame, text="Disable game music", variable=disableMusicVar) shuffleGanonVar = IntVar() shuffleGanonVar.set(1) #set default shuffleGanonCheckbutton = Checkbutton(checkBoxFrame, text="Include Ganon's Tower and Pyramid Hole in shuffle pool", variable=shuffleGanonVar) @@ -79,61 +88,31 @@ def guiMain(args=None): createSpoilerCheckbutton.pack(expand=True, anchor=W) suppressRomCheckbutton.pack(expand=True, anchor=W) - quickSwapCheckbutton.pack(expand=True, anchor=W) - keysanityCheckbutton.pack(expand=True, anchor=W) + openpyramidCheckbutton.pack(expand=True, anchor=W) + mcsbshuffleFrame.pack(expand=True, anchor=W) + mcsbLabel.grid(row=0, column=0) + mapshuffleCheckbutton.grid(row=0, column=1) + compassshuffleCheckbutton.grid(row=0, column=2) + keyshuffleCheckbutton.grid(row=0, column=3) + bigkeyshuffleCheckbutton.grid(row=0, column=4) retroCheckbutton.pack(expand=True, anchor=W) - dungeonItemsCheckbutton.pack(expand=True, anchor=W) - disableMusicCheckbutton.pack(expand=True, anchor=W) shuffleGanonCheckbutton.pack(expand=True, anchor=W) hintsCheckbutton.pack(expand=True, anchor=W) customCheckbutton.pack(expand=True, anchor=W) - fileDialogFrame = Frame(rightHalfFrame) + romOptionsFrame = LabelFrame(rightHalfFrame, text="Rom options") + romOptionsFrame.columnconfigure(0, weight=1) + romOptionsFrame.columnconfigure(1, weight=1) + for i in range(5): + romOptionsFrame.rowconfigure(i, weight=1) - heartbeepFrame = Frame(fileDialogFrame) - heartbeepVar = StringVar() - heartbeepVar.set('normal') - heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off') - heartbeepOptionMenu.pack(side=RIGHT) - heartbeepLabel = Label(heartbeepFrame, text='Heartbeep sound rate') - heartbeepLabel.pack(side=LEFT, padx=(0,52)) + disableMusicVar = IntVar() + disableMusicCheckbutton = Checkbutton(romOptionsFrame, text="Disable music", variable=disableMusicVar) + disableMusicCheckbutton.grid(row=0, column=0, sticky=E) - heartcolorFrame = Frame(fileDialogFrame) - heartcolorVar = StringVar() - heartcolorVar.set('red') - heartcolorOptionMenu = OptionMenu(heartcolorFrame, heartcolorVar, 'red', 'blue', 'green', 'yellow', 'random') - heartcolorOptionMenu.pack(side=RIGHT) - heartcolorLabel = Label(heartcolorFrame, text='Heart color') - heartcolorLabel.pack(side=LEFT, padx=(0,127)) - - fastMenuFrame = Frame(fileDialogFrame) - fastMenuVar = StringVar() - fastMenuVar.set('normal') - fastMenuOptionMenu = OptionMenu(fastMenuFrame, fastMenuVar, 'normal', 'instant', 'double', 'triple', 'quadruple', 'half') - fastMenuOptionMenu.pack(side=RIGHT) - fastMenuLabel = Label(fastMenuFrame, text='Menu speed') - fastMenuLabel.pack(side=LEFT, padx=(0,100)) - - heartbeepFrame.pack(expand=True, anchor=E) - heartcolorFrame.pack(expand=True, anchor=E) - fastMenuFrame.pack(expand=True, anchor=E) - - romDialogFrame = Frame(fileDialogFrame) - baseRomLabel = Label(romDialogFrame, text='Base Rom') - romVar = StringVar() - romEntry = Entry(romDialogFrame, textvariable=romVar) - - def RomSelect(): - rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")]) - romVar.set(rom) - romSelectButton = Button(romDialogFrame, text='Select Rom', command=RomSelect) - - baseRomLabel.pack(side=LEFT) - romEntry.pack(side=LEFT) - romSelectButton.pack(side=LEFT) - - spriteDialogFrame = Frame(fileDialogFrame) - baseSpriteLabel = Label(spriteDialogFrame, text='Link Sprite:') + spriteDialogFrame = Frame(romOptionsFrame) + spriteDialogFrame.grid(row=0, column=1) + baseSpriteLabel = Label(spriteDialogFrame, text='Sprite:') spriteNameVar = StringVar() sprite = None @@ -153,17 +132,88 @@ def guiMain(args=None): def SpriteSelect(): SpriteSelector(mainWindow, set_sprite) - spriteSelectButton = Button(spriteDialogFrame, text='Open Sprite Picker', command=SpriteSelect) + spriteSelectButton = Button(spriteDialogFrame, text='...', command=SpriteSelect) baseSpriteLabel.pack(side=LEFT) spriteEntry.pack(side=LEFT) spriteSelectButton.pack(side=LEFT) - romDialogFrame.pack() - spriteDialogFrame.pack() + quickSwapVar = IntVar() + quickSwapCheckbutton = Checkbutton(romOptionsFrame, text="L/R Quickswapping", variable=quickSwapVar) + quickSwapCheckbutton.grid(row=1, column=0, sticky=E) - checkBoxFrame.pack() - fileDialogFrame.pack() + fastMenuFrame = Frame(romOptionsFrame) + fastMenuFrame.grid(row=1, column=1, sticky=E) + fastMenuLabel = Label(fastMenuFrame, text='Menu speed') + fastMenuLabel.pack(side=LEFT) + fastMenuVar = StringVar() + fastMenuVar.set('normal') + fastMenuOptionMenu = OptionMenu(fastMenuFrame, fastMenuVar, 'normal', 'instant', 'double', 'triple', 'quadruple', 'half') + fastMenuOptionMenu.pack(side=LEFT) + + heartcolorFrame = Frame(romOptionsFrame) + heartcolorFrame.grid(row=2, column=0, sticky=E) + heartcolorLabel = Label(heartcolorFrame, text='Heart color') + heartcolorLabel.pack(side=LEFT) + heartcolorVar = StringVar() + heartcolorVar.set('red') + heartcolorOptionMenu = OptionMenu(heartcolorFrame, heartcolorVar, 'red', 'blue', 'green', 'yellow', 'random') + heartcolorOptionMenu.pack(side=LEFT) + + heartbeepFrame = Frame(romOptionsFrame) + heartbeepFrame.grid(row=2, column=1, sticky=E) + heartbeepLabel = Label(heartbeepFrame, text='Heartbeep') + heartbeepLabel.pack(side=LEFT) + heartbeepVar = StringVar() + heartbeepVar.set('normal') + heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off') + heartbeepOptionMenu.pack(side=LEFT) + + owPalettesFrame = Frame(romOptionsFrame) + owPalettesFrame.grid(row=3, column=0, sticky=E) + owPalettesLabel = Label(owPalettesFrame, text='Overworld palettes') + owPalettesLabel.pack(side=LEFT) + owPalettesVar = StringVar() + owPalettesVar.set('default') + owPalettesOptionMenu = OptionMenu(owPalettesFrame, owPalettesVar, 'default', 'random', 'blackout') + owPalettesOptionMenu.pack(side=LEFT) + + uwPalettesFrame = Frame(romOptionsFrame) + uwPalettesFrame.grid(row=3, column=1, sticky=E) + uwPalettesLabel = Label(uwPalettesFrame, text='Dungeon palettes') + uwPalettesLabel.pack(side=LEFT) + uwPalettesVar = StringVar() + uwPalettesVar.set('default') + uwPalettesOptionMenu = OptionMenu(uwPalettesFrame, uwPalettesVar, 'default', 'random', 'blackout') + uwPalettesOptionMenu.pack(side=LEFT) + + romDialogFrame = Frame(romOptionsFrame) + romDialogFrame.grid(row=4, column=0, columnspan=2, sticky=W+E) + + baseRomLabel = Label(romDialogFrame, text='Base Rom: ') + romVar = StringVar(value="Zelda no Densetsu - Kamigami no Triforce (Japan).sfc") + romEntry = Entry(romDialogFrame, textvariable=romVar) + + def RomSelect(): + rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")]) + import Patch + try: + Patch.get_base_rom_bytes(rom) # throws error on checksum fail + except Exception as e: + logging.exception(e) + messagebox.showerror(title="Error while reading ROM", message=str(e)) + else: + romVar.set(rom) + romSelectButton['state'] = "disabled" + romSelectButton["text"] = "ROM verified" + romSelectButton = Button(romDialogFrame, text='Select Rom', command=RomSelect) + + baseRomLabel.pack(side=LEFT) + romEntry.pack(side=LEFT, expand=True, fill=X) + romSelectButton.pack(side=LEFT) + + checkBoxFrame.pack(side=TOP, anchor=W, padx=5, pady=10) + romOptionsFrame.pack(expand=True, fill=BOTH, padx=3) drowDownFrame = Frame(topFrame) @@ -285,18 +335,19 @@ def guiMain(args=None): algorithmFrame.pack(expand=True, anchor=E) shuffleFrame.pack(expand=True, anchor=E) - enemizerFrame = LabelFrame(randomizerWindow, text="Enemizer", padx=5, pady=5) + enemizerFrame = LabelFrame(randomizerWindow, text="Enemizer", padx=5, pady=2) enemizerFrame.columnconfigure(0, weight=1) enemizerFrame.columnconfigure(1, weight=1) enemizerFrame.columnconfigure(2, weight=1) + enemizerFrame.columnconfigure(3, weight=1) enemizerPathFrame = Frame(enemizerFrame) - enemizerPathFrame.grid(row=0, column=0, columnspan=3, sticky=W) + enemizerPathFrame.grid(row=0, column=0, columnspan=3, sticky=W+E, padx=3) enemizerCLIlabel = Label(enemizerPathFrame, text="EnemizerCLI path: ") enemizerCLIlabel.pack(side=LEFT) - enemizerCLIpathVar = StringVar() - enemizerCLIpathEntry = Entry(enemizerPathFrame, textvariable=enemizerCLIpathVar, width=80) - enemizerCLIpathEntry.pack(side=LEFT) + enemizerCLIpathVar = StringVar(value="EnemizerCLI/EnemizerCLI.Core") + enemizerCLIpathEntry = Entry(enemizerPathFrame, textvariable=enemizerCLIpathVar) + enemizerCLIpathEntry.pack(side=LEFT, expand=True, fill=X) def EnemizerSelectPath(): path = filedialog.askopenfilename(filetypes=[("EnemizerCLI executable", "*EnemizerCLI*")]) if path: @@ -304,18 +355,21 @@ def guiMain(args=None): enemizerCLIbrowseButton = Button(enemizerPathFrame, text='...', command=EnemizerSelectPath) enemizerCLIbrowseButton.pack(side=LEFT) - enemyShuffleVar = IntVar() - enemyShuffleButton = Checkbutton(enemizerFrame, text="Enemy shuffle", variable=enemyShuffleVar) - enemyShuffleButton.grid(row=1, column=0) - paletteShuffleVar = IntVar() - paletteShuffleButton = Checkbutton(enemizerFrame, text="Palette shuffle", variable=paletteShuffleVar) - paletteShuffleButton.grid(row=1, column=1) potShuffleVar = IntVar() potShuffleButton = Checkbutton(enemizerFrame, text="Pot shuffle", variable=potShuffleVar) - potShuffleButton.grid(row=1, column=2) + potShuffleButton.grid(row=0, column=3) + + enemizerEnemyFrame = Frame(enemizerFrame) + enemizerEnemyFrame.grid(row=1, column=0, pady=5) + enemizerEnemyLabel = Label(enemizerEnemyFrame, text='Enemy shuffle') + enemizerEnemyLabel.pack(side=LEFT) + enemyShuffleVar = StringVar() + enemyShuffleVar.set('none') + enemizerEnemyOption = OptionMenu(enemizerEnemyFrame, enemyShuffleVar, 'none', 'shuffled', 'chaos') + enemizerEnemyOption.pack(side=LEFT) enemizerBossFrame = Frame(enemizerFrame) - enemizerBossFrame.grid(row=2, column=0) + enemizerBossFrame.grid(row=1, column=1) enemizerBossLabel = Label(enemizerBossFrame, text='Boss shuffle') enemizerBossLabel.pack(side=LEFT) enemizerBossVar = StringVar() @@ -324,7 +378,7 @@ def guiMain(args=None): enemizerBossOption.pack(side=LEFT) enemizerDamageFrame = Frame(enemizerFrame) - enemizerDamageFrame.grid(row=2, column=1) + enemizerDamageFrame.grid(row=1, column=2) enemizerDamageLabel = Label(enemizerDamageFrame, text='Enemy damage') enemizerDamageLabel.pack(side=LEFT) enemizerDamageVar = StringVar() @@ -333,7 +387,7 @@ def guiMain(args=None): enemizerDamageOption.pack(side=LEFT) enemizerHealthFrame = Frame(enemizerFrame) - enemizerHealthFrame.grid(row=2, column=2) + enemizerHealthFrame.grid(row=1, column=3) enemizerHealthLabel = Label(enemizerHealthFrame, text='Enemy health') enemizerHealthLabel.pack(side=LEFT) enemizerHealthVar = StringVar() @@ -346,6 +400,9 @@ def guiMain(args=None): worldLabel = Label(bottomFrame, text='Worlds') worldVar = StringVar() worldSpinbox = Spinbox(bottomFrame, from_=1, to=100, width=5, textvariable=worldVar) + namesLabel = Label(bottomFrame, text='Player names') + namesVar = StringVar() + namesEntry = Entry(bottomFrame, textvariable=namesVar) seedLabel = Label(bottomFrame, text='Seed #') seedVar = StringVar() seedEntry = Entry(bottomFrame, width=15, textvariable=seedVar) @@ -354,8 +411,9 @@ def guiMain(args=None): countSpinbox = Spinbox(bottomFrame, from_=1, to=100, width=5, textvariable=countVar) def generateRom(): - guiargs = Namespace + guiargs = Namespace() guiargs.multi = int(worldVar.get()) + guiargs.names = namesVar.get() guiargs.seed = int(seedVar.get()) if seedVar.get() else None guiargs.count = int(countVar.get()) if countVar.get() != '1' else None guiargs.mode = modeVar.get() @@ -367,6 +425,8 @@ def guiMain(args=None): guiargs.difficulty = difficultyVar.get() guiargs.item_functionality = itemfunctionVar.get() guiargs.timer = timerVar.get() + if guiargs.timer == "none": + guiargs.timer = False guiargs.progressive = progressiveVar.get() guiargs.accessibility = accessibilityVar.get() guiargs.algorithm = algorithmVar.get() @@ -376,19 +436,23 @@ def guiMain(args=None): guiargs.fastmenu = fastMenuVar.get() guiargs.create_spoiler = bool(createSpoilerVar.get()) guiargs.suppress_rom = bool(suppressRomVar.get()) - guiargs.keysanity = bool(keysanityVar.get()) + guiargs.openpyramid = bool(openpyramidVar.get()) + guiargs.mapshuffle = bool(mapshuffleVar.get()) + guiargs.compassshuffle = bool(compassshuffleVar.get()) + guiargs.keyshuffle = bool(keyshuffleVar.get()) + guiargs.bigkeyshuffle = bool(bigkeyshuffleVar.get()) guiargs.retro = bool(retroVar.get()) - guiargs.nodungeonitems = bool(dungeonItemsVar.get()) guiargs.quickswap = bool(quickSwapVar.get()) guiargs.disablemusic = bool(disableMusicVar.get()) + guiargs.ow_palettes = owPalettesVar.get() + guiargs.uw_palettes = uwPalettesVar.get() guiargs.shuffleganon = bool(shuffleGanonVar.get()) guiargs.hints = bool(hintsVar.get()) guiargs.enemizercli = enemizerCLIpathVar.get() guiargs.shufflebosses = enemizerBossVar.get() - guiargs.shuffleenemies = bool(enemyShuffleVar.get()) + guiargs.shuffleenemies = enemyShuffleVar.get() guiargs.enemy_health = enemizerHealthVar.get() guiargs.enemy_damage = enemizerDamageVar.get() - guiargs.shufflepalette = bool(paletteShuffleVar.get()) guiargs.shufflepots = bool(potShuffleVar.get()) guiargs.custom = bool(customVar.get()) guiargs.customitemarray = [int(bowVar.get()), int(silverarrowVar.get()), int(boomerangVar.get()), int(magicboomerangVar.get()), int(hookshotVar.get()), int(mushroomVar.get()), int(magicpowderVar.get()), int(firerodVar.get()), @@ -398,14 +462,19 @@ def guiMain(args=None): int(sword3Var.get()), int(sword4Var.get()), int(progswordVar.get()), int(shield1Var.get()), int(shield2Var.get()), int(shield3Var.get()), int(progshieldVar.get()), int(bluemailVar.get()), int(redmailVar.get()), int(progmailVar.get()), int(halfmagicVar.get()), int(quartermagicVar.get()), int(bcap5Var.get()), int(bcap10Var.get()), int(acap5Var.get()), int(acap10Var.get()), int(arrow1Var.get()), int(arrow10Var.get()), int(bomb1Var.get()), int(bomb3Var.get()), int(rupee1Var.get()), int(rupee5Var.get()), int(rupee20Var.get()), int(rupee50Var.get()), int(rupee100Var.get()), - int(rupee300Var.get()), int(rupoorVar.get()), int(blueclockVar.get()), int(greenclockVar.get()), int(redclockVar.get()), int(triforcepieceVar.get()), int(triforcecountVar.get()), - int(triforceVar.get()), int(rupoorcostVar.get()), int(universalkeyVar.get())] + int(rupee300Var.get()), int(rupoorVar.get()), int(blueclockVar.get()), int(greenclockVar.get()), int(redclockVar.get()), int(progbowVar.get()), int(bomb10Var.get()), int(triforcepieceVar.get()), + int(triforcecountVar.get()), int(triforceVar.get()), int(rupoorcostVar.get()), int(universalkeyVar.get())] guiargs.rom = romVar.get() - guiargs.jsonout = None guiargs.sprite = sprite - guiargs.skip_playthrough = False - guiargs.outputpath = None + # get default values for missing parameters + for k,v in vars(parse_arguments(['--multi', str(guiargs.multi)])).items(): + if k not in vars(guiargs): + setattr(guiargs, k, v) + elif type(v) is dict: # use same settings for every player + setattr(guiargs, k, {player: getattr(guiargs, k) for player in range(1, guiargs.multi + 1)}) try: + if not guiargs.suppress_rom and not os.path.exists(guiargs.rom): + raise FileNotFoundError(f"Could not find specified rom file {guiargs.rom}") if guiargs.count is not None: seed = guiargs.seed for _ in range(guiargs.count): @@ -414,6 +483,7 @@ def guiMain(args=None): else: main(seed=guiargs.seed, args=guiargs) except Exception as e: + logging.exception(e) messagebox.showerror(title="Error while creating seed", message=str(e)) else: messagebox.showinfo(title="Success", message="Rom patched successfully") @@ -422,6 +492,8 @@ def guiMain(args=None): worldLabel.pack(side=LEFT) worldSpinbox.pack(side=LEFT) + namesLabel.pack(side=LEFT) + namesEntry.pack(side=LEFT) seedLabel.pack(side=LEFT, padx=(5, 0)) seedEntry.pack(side=LEFT) countLabel.pack(side=LEFT, padx=(5, 0)) @@ -502,25 +574,42 @@ def guiMain(args=None): fastMenuLabel2 = Label(fastMenuFrame2, text='Menu speed') fastMenuLabel2.pack(side=LEFT) + owPalettesFrame2 = Frame(drowDownFrame2) + owPalettesOptionMenu2 = OptionMenu(owPalettesFrame2, owPalettesVar, 'default', 'random', 'blackout') + owPalettesOptionMenu2.pack(side=RIGHT) + owPalettesLabel2 = Label(owPalettesFrame2, text='Overworld palettes') + owPalettesLabel2.pack(side=LEFT) + + uwPalettesFrame2 = Frame(drowDownFrame2) + uwPalettesOptionMenu2 = OptionMenu(uwPalettesFrame2, uwPalettesVar, 'default', 'random', 'blackout') + uwPalettesOptionMenu2.pack(side=RIGHT) + uwPalettesLabel2 = Label(uwPalettesFrame2, text='Dungeon palettes') + uwPalettesLabel2.pack(side=LEFT) heartbeepFrame2.pack(expand=True, anchor=E) heartcolorFrame2.pack(expand=True, anchor=E) fastMenuFrame2.pack(expand=True, anchor=E) + owPalettesFrame2.pack(expand=True, anchor=E) + uwPalettesFrame2.pack(expand=True, anchor=E) bottomFrame2 = Frame(topFrame2) def adjustRom(): - guiargs = Namespace + guiargs = Namespace() guiargs.heartbeep = heartbeepVar.get() guiargs.heartcolor = heartcolorVar.get() guiargs.fastmenu = fastMenuVar.get() + guiargs.ow_palettes = owPalettesVar.get() + guiargs.uw_palettes = uwPalettesVar.get() guiargs.quickswap = bool(quickSwapVar.get()) guiargs.disablemusic = bool(disableMusicVar.get()) guiargs.rom = romVar2.get() + guiargs.baserom = romVar.get() guiargs.sprite = sprite try: adjust(args=guiargs) except Exception as e: + logging.exception(e) messagebox.showerror(title="Error while creating seed", message=str(e)) else: messagebox.showinfo(title="Success", message="Rom patched successfully") @@ -553,19 +642,19 @@ def guiMain(args=None): bowFrame = Frame(itemList1) bowLabel = Label(bowFrame, text='Bow') - bowVar = StringVar(value='1') + bowVar = StringVar(value='0') bowEntry = Entry(bowFrame, textvariable=bowVar, width=3, validate='all', vcmd=vcmd) bowFrame.pack() bowLabel.pack(anchor=W, side=LEFT, padx=(0,53)) bowEntry.pack(anchor=E) - silverarrowFrame = Frame(itemList1) - silverarrowLabel = Label(silverarrowFrame, text='Silver Arrow') - silverarrowVar = StringVar(value='1') - silverarrowEntry = Entry(silverarrowFrame, textvariable=silverarrowVar, width=3, validate='all', vcmd=vcmd) - silverarrowFrame.pack() - silverarrowLabel.pack(anchor=W, side=LEFT, padx=(0,13)) - silverarrowEntry.pack(anchor=E) + progbowFrame = Frame(itemList1) + progbowLabel = Label(progbowFrame, text='Prog.Bow') + progbowVar = StringVar(value='2') + progbowEntry = Entry(progbowFrame, textvariable=progbowVar, width=3, validate='all', vcmd=vcmd) + progbowFrame.pack() + progbowLabel.pack(anchor=W, side=LEFT, padx=(0,25)) + progbowEntry.pack(anchor=E) boomerangFrame = Frame(itemList1) boomerangLabel = Label(boomerangFrame, text='Boomerang') @@ -921,7 +1010,7 @@ def guiMain(args=None): bcap5Frame = Frame(itemList3) bcap5Label = Label(bcap5Frame, text='Bomb C.+5') - bcap5Var = StringVar(value='6') + bcap5Var = StringVar(value='0') bcap5Entry = Entry(bcap5Frame, textvariable=bcap5Var, width=3, validate='all', vcmd=vcmd) bcap5Frame.pack() bcap5Label.pack(anchor=W, side=LEFT, padx=(0,16)) @@ -929,7 +1018,7 @@ def guiMain(args=None): bcap10Frame = Frame(itemList3) bcap10Label = Label(bcap10Frame, text='Bomb C.+10') - bcap10Var = StringVar(value='1') + bcap10Var = StringVar(value='0') bcap10Entry = Entry(bcap10Frame, textvariable=bcap10Var, width=3, validate='all', vcmd=vcmd) bcap10Frame.pack() bcap10Label.pack(anchor=W, side=LEFT, padx=(0,10)) @@ -937,7 +1026,7 @@ def guiMain(args=None): acap5Frame = Frame(itemList4) acap5Label = Label(acap5Frame, text='Arrow C.+5') - acap5Var = StringVar(value='6') + acap5Var = StringVar(value='0') acap5Entry = Entry(acap5Frame, textvariable=acap5Var, width=3, validate='all', vcmd=vcmd) acap5Frame.pack() acap5Label.pack(anchor=W, side=LEFT, padx=(0,7)) @@ -945,7 +1034,7 @@ def guiMain(args=None): acap10Frame = Frame(itemList4) acap10Label = Label(acap10Frame, text='Arrow C.+10') - acap10Var = StringVar(value='1') + acap10Var = StringVar(value='0') acap10Entry = Entry(acap10Frame, textvariable=acap10Var, width=3, validate='all', vcmd=vcmd) acap10Frame.pack() acap10Label.pack(anchor=W, side=LEFT, padx=(0,1)) @@ -961,7 +1050,7 @@ def guiMain(args=None): arrow10Frame = Frame(itemList4) arrow10Label = Label(arrow10Frame, text='Arrows (10)') - arrow10Var = StringVar(value='5') + arrow10Var = StringVar(value='12') arrow10Entry = Entry(arrow10Frame, textvariable=arrow10Var, width=3, validate='all', vcmd=vcmd) arrow10Frame.pack() arrow10Label.pack(anchor=W, side=LEFT, padx=(0,7)) @@ -977,12 +1066,20 @@ def guiMain(args=None): bomb3Frame = Frame(itemList4) bomb3Label = Label(bomb3Frame, text='Bombs (3)') - bomb3Var = StringVar(value='10') + bomb3Var = StringVar(value='16') bomb3Entry = Entry(bomb3Frame, textvariable=bomb3Var, width=3, validate='all', vcmd=vcmd) bomb3Frame.pack() bomb3Label.pack(anchor=W, side=LEFT, padx=(0,13)) bomb3Entry.pack(anchor=E) + bomb10Frame = Frame(itemList4) + bomb10Label = Label(bomb10Frame, text='Bombs (10)') + bomb10Var = StringVar(value='1') + bomb10Entry = Entry(bomb10Frame, textvariable=bomb10Var, width=3, validate='all', vcmd=vcmd) + bomb10Frame.pack() + bomb10Label.pack(anchor=W, side=LEFT, padx=(0,7)) + bomb10Entry.pack(anchor=E) + rupee1Frame = Frame(itemList4) rupee1Label = Label(rupee1Frame, text='Rupee (1)') rupee1Var = StringVar(value='2') @@ -1031,14 +1128,6 @@ def guiMain(args=None): rupee300Label.pack(anchor=W, side=LEFT, padx=(0,0)) rupee300Entry.pack(anchor=E) - rupoorFrame = Frame(itemList4) - rupoorLabel = Label(rupoorFrame, text='Rupoor') - rupoorVar = StringVar(value='0') - rupoorEntry = Entry(rupoorFrame, textvariable=rupoorVar, width=3, validate='all', vcmd=vcmd) - rupoorFrame.pack() - rupoorLabel.pack(anchor=W, side=LEFT, padx=(0,28)) - rupoorEntry.pack(anchor=E) - blueclockFrame = Frame(itemList4) blueclockLabel = Label(blueclockFrame, text='Blue Clock') blueclockVar = StringVar(value='0') @@ -1063,6 +1152,14 @@ def guiMain(args=None): redclockLabel.pack(anchor=W, side=LEFT, padx=(0,14)) redclockEntry.pack(anchor=E) + silverarrowFrame = Frame(itemList5) + silverarrowLabel = Label(silverarrowFrame, text='Silver Arrow') + silverarrowVar = StringVar(value='0') + silverarrowEntry = Entry(silverarrowFrame, textvariable=silverarrowVar, width=3, validate='all', vcmd=vcmd) + silverarrowFrame.pack() + silverarrowLabel.pack(anchor=W, side=LEFT, padx=(0,64)) + silverarrowEntry.pack(anchor=E) + universalkeyFrame = Frame(itemList5) universalkeyLabel = Label(universalkeyFrame, text='Universal Key') universalkeyVar = StringVar(value='0') @@ -1095,6 +1192,14 @@ def guiMain(args=None): triforceLabel.pack(anchor=W, side=LEFT, padx=(0,23)) triforceEntry.pack(anchor=E) + rupoorFrame = Frame(itemList5) + rupoorLabel = Label(rupoorFrame, text='Rupoor') + rupoorVar = StringVar(value='0') + rupoorEntry = Entry(rupoorFrame, textvariable=rupoorVar, width=3, validate='all', vcmd=vcmd) + rupoorFrame.pack() + rupoorLabel.pack(anchor=W, side=LEFT, padx=(0,87)) + rupoorEntry.pack(anchor=E) + rupoorcostFrame = Frame(itemList5) rupoorcostLabel = Label(rupoorcostFrame, text='Rupoor Cost') rupoorcostVar = StringVar(value='10') @@ -1111,13 +1216,17 @@ def guiMain(args=None): topFrame3.pack(side=TOP, pady=(17,0)) if args is not None: + for k,v in vars(args).items(): + if type(v) is dict: + setattr(args, k, v[1]) # only get values for player 1 for now # load values from commandline args createSpoilerVar.set(int(args.create_spoiler)) suppressRomVar.set(int(args.suppress_rom)) - keysanityVar.set(args.keysanity) + mapshuffleVar.set(args.mapshuffle) + compassshuffleVar.set(args.compassshuffle) + keyshuffleVar.set(args.keyshuffle) + bigkeyshuffleVar.set(args.bigkeyshuffle) retroVar.set(args.retro) - if args.nodungeonitems: - dungeonItemsVar.set(int(not args.nodungeonitems)) quickSwapVar.set(int(args.quickswap)) disableMusicVar.set(int(args.disablemusic)) if args.count: diff --git a/InvertedRegions.py b/InvertedRegions.py index 62fbfe17..6100781e 100644 --- a/InvertedRegions.py +++ b/InvertedRegions.py @@ -1,5 +1,6 @@ import collections -from BaseClasses import Region, Location, Entrance, RegionType, Shop, ShopType +from BaseClasses import RegionType +from Regions import create_lw_region, create_dw_region, create_cave_region, create_dungeon_region def create_inverted_regions(world, player): @@ -302,52 +303,13 @@ def create_inverted_regions(world, player): create_cave_region(player, 'The Sky', 'A Dark Sky', None, ['DDM Landing','NEDW Landing', 'WDW Landing', 'SDW Landing', 'EDW Landing', 'DD Landing', 'DLHL Landing']) ] - for region_name, (room_id, shopkeeper, replaceable) in shop_table.items(): - region = world.get_region(region_name, player) - shop = Shop(region, room_id, ShopType.Shop, shopkeeper, replaceable) - region.shop = shop - world.shops.append(shop) - for index, (item, price) in enumerate(default_shop_contents[region_name]): - shop.add_inventory(index, item, price) + world.initialize_regions() - region = world.get_region('Capacity Upgrade', player) - shop = Shop(region, 0x0115, ShopType.UpgradeShop, 0x04, True) - region.shop = shop - world.shops.append(shop) - shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7) - shop.add_inventory(1, 'Arrow Upgrade (+5)', 100, 7) - world.intialize_regions() -def create_lw_region(player, name, locations=None, exits=None): - return _create_region(player, name, RegionType.LightWorld, 'Light World', locations, exits) - -def create_dw_region(player, name, locations=None, exits=None): - return _create_region(player, name, RegionType.DarkWorld, 'Dark World', locations, exits) - -def create_cave_region(player, name, hint='Hyrule', locations=None, exits=None): - return _create_region(player, name, RegionType.Cave, hint, locations, exits) - -def create_dungeon_region(player, name, hint='Hyrule', locations=None, exits=None): - return _create_region(player, name, RegionType.Dungeon, hint, locations, exits) - -def _create_region(player, name, type, hint='Hyrule', locations=None, exits=None): - ret = Region(name, type, hint, player) - if locations is None: - locations = [] - if exits is None: - exits = [] - - for exit in exits: - ret.exits.append(Entrance(player, exit, ret)) - for location in locations: - address, crystal, hint_text = location_table[location] - ret.locations.append(Location(player, location, address, crystal, hint_text, ret)) - return ret - -def mark_dark_world_regions(world): +def mark_dark_world_regions(world, player): # cross world caves may have some sections marked as both in_light_world, and in_dark_work. # That is ok. the bunny logic will check for this case and incorporate special rules. - queue = collections.deque(region for region in world.regions if region.type == RegionType.DarkWorld) + queue = collections.deque(region for region in world.get_regions(player) if region.type == RegionType.DarkWorld) seen = set(queue) while queue: current = queue.popleft() @@ -360,7 +322,7 @@ def mark_dark_world_regions(world): seen.add(exit.connected_region) queue.append(exit.connected_region) - queue = collections.deque(region for region in world.regions if region.type == RegionType.LightWorld) + queue = collections.deque(region for region in world.get_regions(player) if region.type == RegionType.LightWorld) seen = set(queue) while queue: current = queue.popleft() @@ -372,270 +334,3 @@ def mark_dark_world_regions(world): if exit.connected_region not in seen: seen.add(exit.connected_region) queue.append(exit.connected_region) - -# (room_id, shopkeeper, replaceable) -shop_table = { - 'Cave Shop (Dark Death Mountain)': (0x0112, 0xC1, True), - 'Red Shield Shop': (0x0110, 0xC1, True), - 'Dark Lake Hylia Shop': (0x010F, 0xC1, True), - 'Dark World Lumberjack Shop': (0x010F, 0xC1, True), - 'Village of Outcasts Shop': (0x010F, 0xC1, True), - 'Dark World Potion Shop': (0x010F, 0xC1, True), - 'Light World Death Mountain Shop': (0x00FF, 0xA0, True), - 'Kakariko Shop': (0x011F, 0xA0, True), - 'Cave Shop (Lake Hylia)': (0x0112, 0xA0, True), - 'Potion Shop': (0x0109, 0xFF, False), - # Bomb Shop not currently modeled as a shop, due to special nature of items -} -# region, [item] -# slot, item, price, max=0, replacement=None, replacement_price=0 -# item = (item, price) - -_basic_shop_defaults = [('Red Potion', 150), ('Small Heart', 10), ('Bombs (10)', 50)] -_dark_world_shop_defaults = [('Red Potion', 150), ('Blue Shield', 50), ('Bombs (10)', 50)] -default_shop_contents = { - 'Cave Shop (Dark Death Mountain)': _basic_shop_defaults, - 'Red Shield Shop': [('Red Shield', 500), ('Bee', 10), ('Arrows (10)', 30)], - 'Dark Lake Hylia Shop': _dark_world_shop_defaults, - 'Dark World Lumberjack Shop': _dark_world_shop_defaults, - 'Village of Outcasts Shop': _dark_world_shop_defaults, - 'Dark World Potion Shop': _dark_world_shop_defaults, - 'Light World Death Mountain Shop': _basic_shop_defaults, - 'Kakariko Shop': _basic_shop_defaults, - 'Cave Shop (Lake Hylia)': _basic_shop_defaults, - 'Potion Shop': [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)], -} - -location_table = {'Mushroom': (0x180013, False, 'in the woods'), - 'Bottle Merchant': (0x2EB18, False, 'with a merchant'), - 'Flute Spot': (0x18014A, False, 'underground'), - 'Sunken Treasure': (0x180145, False, 'underwater'), - 'Purple Chest': (0x33D68, False, 'from a box'), - 'Blind\'s Hideout - Top': (0xEB0F, False, 'in a basement'), - 'Blind\'s Hideout - Left': (0xEB12, False, 'in a basement'), - 'Blind\'s Hideout - Right': (0xEB15, False, 'in a basement'), - 'Blind\'s Hideout - Far Left': (0xEB18, False, 'in a basement'), - 'Blind\'s Hideout - Far Right': (0xEB1B, False, 'in a basement'), - 'Link\'s Uncle': (0x2DF45, False, 'with your uncle'), - 'Secret Passage': (0xE971, False, 'near your uncle'), - 'King Zora': (0xEE1C3, False, 'at a high price'), - 'Zora\'s Ledge': (0x180149, False, 'near Zora'), - 'Waterfall Fairy - Left': (0xE9B0, False, 'near a fairy'), - 'Waterfall Fairy - Right': (0xE9D1, False, 'near a fairy'), - 'King\'s Tomb': (0xE97A, False, 'alone in a cave'), - 'Floodgate Chest': (0xE98C, False, 'in the dam'), - 'Link\'s House': (0xE9BC, False, 'in your home'), - 'Kakariko Tavern': (0xE9CE, False, 'in the bar'), - 'Chicken House': (0xE9E9, False, 'near poultry'), - 'Aginah\'s Cave': (0xE9F2, False, 'with Aginah'), - 'Sahasrahla\'s Hut - Left': (0xEA82, False, 'near the elder'), - 'Sahasrahla\'s Hut - Middle': (0xEA85, False, 'near the elder'), - 'Sahasrahla\'s Hut - Right': (0xEA88, False, 'near the elder'), - 'Sahasrahla': (0x2F1FC, False, 'with the elder'), - 'Kakariko Well - Top': (0xEA8E, False, 'in a well'), - 'Kakariko Well - Left': (0xEA91, False, 'in a well'), - 'Kakariko Well - Middle': (0xEA94, False, 'in a well'), - 'Kakariko Well - Right': (0xEA97, False, 'in a well'), - 'Kakariko Well - Bottom': (0xEA9A, False, 'in a well'), - 'Blacksmith': (0x18002A, False, 'with the smith'), - 'Magic Bat': (0x180015, False, 'with the bat'), - 'Sick Kid': (0x339CF, False, 'with the sick'), - 'Hobo': (0x33E7D, False, 'with the hobo'), - 'Lost Woods Hideout': (0x180000, False, 'near a thief'), - 'Lumberjack Tree': (0x180001, False, 'in a hole'), - 'Cave 45': (0x180003, False, 'alone in a cave'), - 'Graveyard Cave': (0x180004, False, 'alone in a cave'), - 'Checkerboard Cave': (0x180005, False, 'alone in a cave'), - 'Mini Moldorm Cave - Far Left': (0xEB42, False, 'near Moldorms'), - 'Mini Moldorm Cave - Left': (0xEB45, False, 'near Moldorms'), - 'Mini Moldorm Cave - Right': (0xEB48, False, 'near Moldorms'), - 'Mini Moldorm Cave - Far Right': (0xEB4B, False, 'near Moldorms'), - 'Mini Moldorm Cave - Generous Guy': (0x180010, False, 'near Moldorms'), - 'Ice Rod Cave': (0xEB4E, False, 'in a frozen cave'), - 'Bonk Rock Cave': (0xEB3F, False, 'alone in a cave'), - 'Library': (0x180012, False, 'near books'), - 'Potion Shop': (0x180014, False, 'near potions'), - 'Lake Hylia Island': (0x180144, False, 'on an island'), - 'Maze Race': (0x180142, False, 'at the race'), - 'Desert Ledge': (0x180143, False, 'in the desert'), - 'Desert Palace - Big Chest': (0xE98F, False, 'in Desert Palace'), - 'Desert Palace - Torch': (0x180160, False, 'in Desert Palace'), - 'Desert Palace - Map Chest': (0xE9B6, False, 'in Desert Palace'), - 'Desert Palace - Compass Chest': (0xE9CB, False, 'in Desert Palace'), - 'Desert Palace - Big Key Chest': (0xE9C2, False, 'in Desert Palace'), - 'Desert Palace - Boss': (0x180151, False, 'with Lanmolas'), - 'Eastern Palace - Compass Chest': (0xE977, False, 'in Eastern Palace'), - 'Eastern Palace - Big Chest': (0xE97D, False, 'in Eastern Palace'), - 'Eastern Palace - Cannonball Chest': (0xE9B3, False, 'in Eastern Palace'), - 'Eastern Palace - Big Key Chest': (0xE9B9, False, 'in Eastern Palace'), - 'Eastern Palace - Map Chest': (0xE9F5, False, 'in Eastern Palace'), - 'Eastern Palace - Boss': (0x180150, False, 'with the Armos'), - 'Master Sword Pedestal': (0x289B0, False, 'at the pedestal'), - 'Hyrule Castle - Boomerang Chest': (0xE974, False, 'in Hyrule Castle'), - 'Hyrule Castle - Map Chest': (0xEB0C, False, 'in Hyrule Castle'), - 'Hyrule Castle - Zelda\'s Chest': (0xEB09, False, 'in Hyrule Castle'), - 'Sewers - Dark Cross': (0xE96E, False, 'in the sewers'), - 'Sewers - Secret Room - Left': (0xEB5D, False, 'in the sewers'), - 'Sewers - Secret Room - Middle': (0xEB60, False, 'in the sewers'), - 'Sewers - Secret Room - Right': (0xEB63, False, 'in the sewers'), - 'Sanctuary': (0xEA79, False, 'in Sanctuary'), - 'Castle Tower - Room 03': (0xEAB5, False, 'in Castle Tower'), - 'Castle Tower - Dark Maze': (0xEAB2, False, 'in Castle Tower'), - 'Old Man': (0xF69FA, False, 'with the old man'), - 'Spectacle Rock Cave': (0x180002, False, 'alone in a cave'), - 'Paradox Cave Lower - Far Left': (0xEB2A, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Left': (0xEB2D, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Right': (0xEB30, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Far Right': (0xEB33, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Middle': (0xEB36, False, 'in a cave with seven chests'), - 'Paradox Cave Upper - Left': (0xEB39, False, 'in a cave with seven chests'), - 'Paradox Cave Upper - Right': (0xEB3C, False, 'in a cave with seven chests'), - 'Spiral Cave': (0xE9BF, False, 'in spiral cave'), - 'Ether Tablet': (0x180016, False, 'at a monolith'), - 'Spectacle Rock': (0x180140, False, 'atop a rock'), - 'Tower of Hera - Basement Cage': (0x180162, False, 'in Tower of Hera'), - 'Tower of Hera - Map Chest': (0xE9AD, False, 'in Tower of Hera'), - 'Tower of Hera - Big Key Chest': (0xE9E6, False, 'in Tower of Hera'), - 'Tower of Hera - Compass Chest': (0xE9FB, False, 'in Tower of Hera'), - 'Tower of Hera - Big Chest': (0xE9F8, False, 'in Tower of Hera'), - 'Tower of Hera - Boss': (0x180152, False, 'with Moldorm'), - 'Pyramid': (0x180147, False, 'on the pyramid'), - 'Catfish': (0xEE185, False, 'with a catfish'), - 'Stumpy': (0x330C7, False, 'with tree boy'), - 'Digging Game': (0x180148, False, 'underground'), - 'Bombos Tablet': (0x180017, False, 'at a monolith'), - 'Hype Cave - Top': (0xEB1E, False, 'near a bat-like man'), - 'Hype Cave - Middle Right': (0xEB21, False, 'near a bat-like man'), - 'Hype Cave - Middle Left': (0xEB24, False, 'near a bat-like man'), - 'Hype Cave - Bottom': (0xEB27, False, 'near a bat-like man'), - 'Hype Cave - Generous Guy': (0x180011, False, 'with a bat-like man'), - 'Peg Cave': (0x180006, False, 'alone in a cave'), - 'Pyramid Fairy - Left': (0xE980, False, 'near a fairy'), - 'Pyramid Fairy - Right': (0xE983, False, 'near a fairy'), - 'Brewery': (0xE9EC, False, 'alone in a home'), - 'C-Shaped House': (0xE9EF, False, 'alone in a home'), - 'Chest Game': (0xEDA8, False, 'as a prize'), - 'Bumper Cave Ledge': (0x180146, False, 'on a ledge'), - 'Mire Shed - Left': (0xEA73, False, 'near sparks'), - 'Mire Shed - Right': (0xEA76, False, 'near sparks'), - 'Superbunny Cave - Top': (0xEA7C, False, 'in a connection'), - 'Superbunny Cave - Bottom': (0xEA7F, False, 'in a connection'), - 'Spike Cave': (0xEA8B, False, 'beyond spikes'), - 'Hookshot Cave - Top Right': (0xEB51, False, 'across pits'), - 'Hookshot Cave - Top Left': (0xEB54, False, 'across pits'), - 'Hookshot Cave - Bottom Right': (0xEB5A, False, 'across pits'), - 'Hookshot Cave - Bottom Left': (0xEB57, False, 'across pits'), - 'Floating Island': (0x180141, False, 'on an island'), - 'Mimic Cave': (0xE9C5, False, 'in a cave of mimicry'), - 'Swamp Palace - Entrance': (0xEA9D, False, 'in Swamp Palace'), - 'Swamp Palace - Map Chest': (0xE986, False, 'in Swamp Palace'), - 'Swamp Palace - Big Chest': (0xE989, False, 'in Swamp Palace'), - 'Swamp Palace - Compass Chest': (0xEAA0, False, 'in Swamp Palace'), - 'Swamp Palace - Big Key Chest': (0xEAA6, False, 'in Swamp Palace'), - 'Swamp Palace - West Chest': (0xEAA3, False, 'in Swamp Palace'), - 'Swamp Palace - Flooded Room - Left': (0xEAA9, False, 'in Swamp Palace'), - 'Swamp Palace - Flooded Room - Right': (0xEAAC, False, 'in Swamp Palace'), - 'Swamp Palace - Waterfall Room': (0xEAAF, False, 'in Swamp Palace'), - 'Swamp Palace - Boss': (0x180154, False, 'with Arrghus'), - 'Thieves\' Town - Big Key Chest': (0xEA04, False, 'in Thieves\' Town'), - 'Thieves\' Town - Map Chest': (0xEA01, False, 'in Thieves\' Town'), - 'Thieves\' Town - Compass Chest': (0xEA07, False, 'in Thieves\' Town'), - 'Thieves\' Town - Ambush Chest': (0xEA0A, False, 'in Thieves\' Town'), - 'Thieves\' Town - Attic': (0xEA0D, False, 'in Thieves\' Town'), - 'Thieves\' Town - Big Chest': (0xEA10, False, 'in Thieves\' Town'), - 'Thieves\' Town - Blind\'s Cell': (0xEA13, False, 'in Thieves\' Town'), - 'Thieves\' Town - Boss': (0x180156, False, 'with Blind'), - 'Skull Woods - Compass Chest': (0xE992, False, 'in Skull Woods'), - 'Skull Woods - Map Chest': (0xE99B, False, 'in Skull Woods'), - 'Skull Woods - Big Chest': (0xE998, False, 'in Skull Woods'), - 'Skull Woods - Pot Prison': (0xE9A1, False, 'in Skull Woods'), - 'Skull Woods - Pinball Room': (0xE9C8, False, 'in Skull Woods'), - 'Skull Woods - Big Key Chest': (0xE99E, False, 'in Skull Woods'), - 'Skull Woods - Bridge Room': (0xE9FE, False, 'near Mothula'), - 'Skull Woods - Boss': (0x180155, False, 'with Mothula'), - 'Ice Palace - Compass Chest': (0xE9D4, False, 'in Ice Palace'), - 'Ice Palace - Freezor Chest': (0xE995, False, 'in Ice Palace'), - 'Ice Palace - Big Chest': (0xE9AA, False, 'in Ice Palace'), - 'Ice Palace - Iced T Room': (0xE9E3, False, 'in Ice Palace'), - 'Ice Palace - Spike Room': (0xE9E0, False, 'in Ice Palace'), - 'Ice Palace - Big Key Chest': (0xE9A4, False, 'in Ice Palace'), - 'Ice Palace - Map Chest': (0xE9DD, False, 'in Ice Palace'), - 'Ice Palace - Boss': (0x180157, False, 'with Kholdstare'), - 'Misery Mire - Big Chest': (0xEA67, False, 'in Misery Mire'), - 'Misery Mire - Map Chest': (0xEA6A, False, 'in Misery Mire'), - 'Misery Mire - Main Lobby': (0xEA5E, False, 'in Misery Mire'), - 'Misery Mire - Bridge Chest': (0xEA61, False, 'in Misery Mire'), - 'Misery Mire - Spike Chest': (0xE9DA, False, 'in Misery Mire'), - 'Misery Mire - Compass Chest': (0xEA64, False, 'in Misery Mire'), - 'Misery Mire - Big Key Chest': (0xEA6D, False, 'in Misery Mire'), - 'Misery Mire - Boss': (0x180158, False, 'with Vitreous'), - 'Turtle Rock - Compass Chest': (0xEA22, False, 'in Turtle Rock'), - 'Turtle Rock - Roller Room - Left': (0xEA1C, False, 'in Turtle Rock'), - 'Turtle Rock - Roller Room - Right': (0xEA1F, False, 'in Turtle Rock'), - 'Turtle Rock - Chain Chomps': (0xEA16, False, 'in Turtle Rock'), - 'Turtle Rock - Big Key Chest': (0xEA25, False, 'in Turtle Rock'), - 'Turtle Rock - Big Chest': (0xEA19, False, 'in Turtle Rock'), - 'Turtle Rock - Crystaroller Room': (0xEA34, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Bottom Left': (0xEA31, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Bottom Right': (0xEA2E, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Top Left': (0xEA2B, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Top Right': (0xEA28, False, 'in Turtle Rock'), - 'Turtle Rock - Boss': (0x180159, False, 'with Trinexx'), - 'Palace of Darkness - Shooter Room': (0xEA5B, False, 'in Palace of Darkness'), - 'Palace of Darkness - The Arena - Bridge': (0xEA3D, False, 'in Palace of Darkness'), - 'Palace of Darkness - Stalfos Basement': (0xEA49, False, 'in Palace of Darkness'), - 'Palace of Darkness - Big Key Chest': (0xEA37, False, 'in Palace of Darkness'), - 'Palace of Darkness - The Arena - Ledge': (0xEA3A, False, 'in Palace of Darkness'), - 'Palace of Darkness - Map Chest': (0xEA52, False, 'in Palace of Darkness'), - 'Palace of Darkness - Compass Chest': (0xEA43, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Basement - Left': (0xEA4C, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Basement - Right': (0xEA4F, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Maze - Top': (0xEA55, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Maze - Bottom': (0xEA58, False, 'in Palace of Darkness'), - 'Palace of Darkness - Big Chest': (0xEA40, False, 'in Palace of Darkness'), - 'Palace of Darkness - Harmless Hellway': (0xEA46, False, 'in Palace of Darkness'), - 'Palace of Darkness - Boss': (0x180153, False, 'with Helmasaur King'), - 'Ganons Tower - Bob\'s Torch': (0x180161, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Hope Room - Left': (0xEAD9, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Hope Room - Right': (0xEADC, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Tile Room': (0xEAE2, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Compass Room - Top Left': (0xEAE5, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Compass Room - Top Right': (0xEAE8, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Compass Room - Bottom Left': (0xEAEB, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Compass Room - Bottom Right': (0xEAEE, False, 'in Ganon\'s Tower'), - 'Ganons Tower - DMs Room - Top Left': (0xEAB8, False, 'in Ganon\'s Tower'), - 'Ganons Tower - DMs Room - Top Right': (0xEABB, False, 'in Ganon\'s Tower'), - 'Ganons Tower - DMs Room - Bottom Left': (0xEABE, False, 'in Ganon\'s Tower'), - 'Ganons Tower - DMs Room - Bottom Right': (0xEAC1, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Map Chest': (0xEAD3, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Firesnake Room': (0xEAD0, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Randomizer Room - Top Left': (0xEAC4, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Randomizer Room - Top Right': (0xEAC7, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Randomizer Room - Bottom Left': (0xEACA, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Randomizer Room - Bottom Right': (0xEACD, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Bob\'s Chest': (0xEADF, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Big Chest': (0xEAD6, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Big Key Room - Left': (0xEAF4, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Big Key Room - Right': (0xEAF7, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Big Key Chest': (0xEAF1, False, 'in Ganon\'s Tower'), - 'Ganons Tower - Mini Helmasaur Room - Left': (0xEAFD, False, 'atop Ganon\'s Tower'), - 'Ganons Tower - Mini Helmasaur Room - Right': (0xEB00, False, 'atop Ganon\'s Tower'), - 'Ganons Tower - Pre-Moldorm Chest': (0xEB03, False, 'atop Ganon\'s Tower'), - 'Ganons Tower - Validation Chest': (0xEB06, False, 'atop Ganon\'s Tower'), - 'Ganon': (None, False, 'from me'), - 'Agahnim 1': (None, False, 'from Ganon\'s wizardry form'), - 'Agahnim 2': (None, False, 'from Ganon\'s wizardry form'), - 'Floodgate': (None, False, None), - 'Frog': (None, False, None), - 'Missing Smith': (None, False, None), - 'Dark Blacksmith Ruins': (None, False, None), - 'Eastern Palace - Prize': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], True, 'Eastern Palace'), - 'Desert Palace - Prize': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], True, 'Desert Palace'), - 'Tower of Hera - Prize': ([0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], True, 'Tower of Hera'), - 'Palace of Darkness - Prize': ([0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], True, 'Palace of Darkness'), - 'Swamp Palace - Prize': ([0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], True, 'Swamp Palace'), - 'Thieves\' Town - Prize': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], True, 'Thieves\' Town'), - 'Skull Woods - Prize': ([0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], True, 'Skull Woods'), - 'Ice Palace - Prize': ([0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], True, 'Ice Palace'), - 'Misery Mire - Prize': ([0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], True, 'Misery Mire'), - 'Turtle Rock - Prize': ([0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], True, 'Turtle Rock')} diff --git a/ItemList.py b/ItemList.py index 6da66e68..2a148e79 100644 --- a/ItemList.py +++ b/ItemList.py @@ -13,7 +13,7 @@ from Items import ItemFactory #This file sets the item pools for various modes. Timed modes and triforce hunt are enforced first, and then extra items are specified per mode to fill in the remaining space. #Some basic items that various modes require are placed here, including pendants and crystals. Medallion requirements for the two relevant entrances are also decided. -alwaysitems = ['Bombos', 'Book of Mudora', 'Cane of Somaria', 'Ether', 'Fire Rod', 'Flippers', 'Ocarina', 'Hammer', 'Hookshot', 'Ice Rod', 'Lamp', +alwaysitems = ['Bombos', 'Book of Mudora', 'Cane of Somaria', 'Ether', 'Fire Rod', 'Flippers', 'Flute', 'Hammer', 'Hookshot', 'Ice Rod', 'Lamp', 'Cape', 'Magic Powder', 'Mushroom', 'Pegasus Boots', 'Quake', 'Shovel', 'Bug Catching Net', 'Cane of Byrna', 'Blue Boomerang', 'Red Boomerang'] progressivegloves = ['Progressive Glove'] * 2 basicgloves = ['Power Glove', 'Titans Mitts'] @@ -35,7 +35,7 @@ Difficulty = namedtuple('Difficulty', 'progressivesword', 'basicsword', 'basicbow', 'timedohko', 'timedother', 'triforcehunt', 'triforce_pieces_required', 'retro', 'extras', 'progressive_sword_limit', 'progressive_shield_limit', - 'progressive_armor_limit', 'progressive_bottle_limit', + 'progressive_armor_limit', 'progressive_bottle_limit', 'progressive_bow_limit', 'heart_piece_limit', 'boss_heart_container_limit']) total_items_to_place = 153 @@ -51,8 +51,8 @@ difficulties = { progressivearmor = ['Progressive Armor'] * 2, basicarmor = ['Blue Mail', 'Red Mail'], swordless = ['Rupees (20)'] * 4, - progressivesword = ['Progressive Sword'] * 3, - basicsword = ['Master Sword', 'Tempered Sword', 'Golden Sword'], + progressivesword = ['Progressive Sword'] * 4, + basicsword = ['Fighter Sword', 'Master Sword', 'Tempered Sword', 'Golden Sword'], basicbow = ['Bow', 'Silver Arrows'], timedohko = ['Green Clock'] * 25, timedother = ['Green Clock'] * 20 + ['Blue Clock'] * 10 + ['Red Clock'] * 10, @@ -78,8 +78,8 @@ difficulties = { progressivearmor = ['Progressive Armor'] * 2, basicarmor = ['Progressive Armor'] * 2, # neither will count swordless = ['Rupees (20)'] * 4, - progressivesword = ['Progressive Sword'] * 3, - basicsword = ['Master Sword', 'Master Sword', 'Tempered Sword'], + progressivesword = ['Progressive Sword'] * 4, + basicsword = ['Fighter Sword', 'Master Sword', 'Master Sword', 'Tempered Sword'], basicbow = ['Bow'] * 2, timedohko = ['Green Clock'] * 25, timedother = ['Green Clock'] * 20 + ['Blue Clock'] * 10 + ['Red Clock'] * 10, @@ -105,8 +105,8 @@ difficulties = { progressivearmor = ['Progressive Armor'] * 2, # neither will count basicarmor = ['Progressive Armor'] * 2, # neither will count swordless = ['Rupees (20)'] * 4, - progressivesword = ['Progressive Sword'] * 3, - basicsword = ['Fighter Sword', 'Master Sword', 'Master Sword'], + progressivesword = ['Progressive Sword'] * 4, + basicsword = ['Fighter Sword', 'Fighter Sword', 'Master Sword', 'Master Sword'], basicbow = ['Bow'] * 2, timedohko = ['Green Clock'] * 20 + ['Red Clock'] * 5, timedother = ['Green Clock'] * 20 + ['Blue Clock'] * 10 + ['Red Clock'] * 10, @@ -125,26 +125,30 @@ difficulties = { } def generate_itempool(world, player): - if (world.difficulty not in ['normal', 'hard', 'expert'] or world.goal not in ['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'] - or world.mode not in ['open', 'standard', 'inverted'] or world.timer not in ['none', 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown'] or world.progressive not in ['on', 'off', 'random']): + if (world.difficulty[player] not in ['normal', 'hard', 'expert'] or world.goal[player] not in ['ganon', 'pedestal', + 'dungeons', + 'triforcehunt', + 'crystals'] + or world.mode[player] not in ['open', 'standard', 'inverted'] or world.timer[player] not in [False, + 'display', + 'timed', + 'timed-ohko', + 'ohko', + 'timed-countdown']): raise NotImplementedError('Not supported yet') + if world.timer[player] in ['ohko', 'timed-ohko']: + world.can_take_damage[player] = False - if world.timer in ['ohko', 'timed-ohko']: - world.can_take_damage = False - - if world.goal in ['pedestal', 'triforcehunt']: + if world.goal[player] in ['pedestal', 'triforcehunt']: world.push_item(world.get_location('Ganon', player), ItemFactory('Nothing', player), False) else: world.push_item(world.get_location('Ganon', player), ItemFactory('Triforce', player), False) - - if world.goal in ['triforcehunt']: - if world.mode == 'inverted': - region = world.get_region('Light World',player) - else: - region = world.get_region('Hyrule Castle Courtyard', player) + + if world.goal[player] in ['triforcehunt']: + region = world.get_region('Light World',player) loc = Location(player, "Murahdahla", parent=region) - loc.access_rule = lambda state: state.item_count('Triforce Piece', player) + state.item_count('Power Star', player) > state.world.treasure_hunt_count + loc.access_rule = lambda state: state.item_count('Triforce Piece', player) + state.item_count('Power Star', player) > state.world.treasure_hunt_count[player] region.locations.append(loc) world.dynamic_locations.append(loc) @@ -153,7 +157,7 @@ def generate_itempool(world, player): world.push_item(loc, ItemFactory('Triforce', player), False) loc.event = True loc.locked = True - + world.get_location('Ganon', player).event = True world.get_location('Ganon', player).locked = True world.push_item(world.get_location('Agahnim 1', player), ItemFactory('Beat Agahnim 1', player), False) @@ -177,38 +181,89 @@ def generate_itempool(world, player): # set up item pool if world.custom: - (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, lamps_needed_for_dark_rooms) = make_custom_item_pool(world.progressive, world.shuffle, world.difficulty, world.timer, world.goal, world.mode, world.swords, world.retro, world.customitemarray) - world.rupoor_cost = min(world.customitemarray[67], 9999) + (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, + lamps_needed_for_dark_rooms) = make_custom_item_pool(world.progressive[player], world.shuffle[player], + world.difficulty[player], world.timer[player], world.goal[player], + world.mode[player], world.swords[player], + world.retro[player], world.customitemarray) + world.rupoor_cost = min(world.customitemarray[69], 9999) else: - (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, lamps_needed_for_dark_rooms) = get_pool_core(world.progressive, world.shuffle, world.difficulty, world.timer, world.goal, world.mode, world.swords, world.retro) - world.itempool += ItemFactory(pool, player) + (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, + lamps_needed_for_dark_rooms) = get_pool_core(world.progressive[player], world.shuffle[player], + world.difficulty[player], world.timer[player], world.goal[player], + world.mode[player], world.swords[player], world.retro[player]) + for item in precollected_items: world.push_precollected(ItemFactory(item, player)) - for (location, item) in placed_items: + + if world.mode[player] == 'standard' and not world.state.has_blunt_weapon(player): + if "Link's Uncle" not in placed_items: + found_sword = False + found_bow = False + possible_weapons = [] + for item in pool: + if item in ['Progressive Sword', 'Fighter Sword', 'Master Sword', 'Tempered Sword', 'Golden Sword']: + if not found_sword and world.swords[player] != 'swordless': + found_sword = True + possible_weapons.append(item) + if item in ['Progressive Bow', 'Bow'] and not found_bow: + found_bow = True + possible_weapons.append(item) + if item in ['Hammer', 'Bombs (10)', 'Fire Rod', 'Cane of Somaria', 'Cane of Byrna']: + if item not in possible_weapons: + possible_weapons.append(item) + starting_weapon = random.choice(possible_weapons) + placed_items["Link's Uncle"] = starting_weapon + pool.remove(starting_weapon) + if placed_items["Link's Uncle"] in ['Bow', 'Progressive Bow', 'Bombs (10)', 'Cane of Somaria', 'Cane of Byrna'] and world.enemy_health[player] not in ['default', 'easy']: + world.escape_assist[player].append('bombs') + + for (location, item) in placed_items.items(): world.push_item(world.get_location(location, player), ItemFactory(item, player), False) world.get_location(location, player).event = True world.get_location(location, player).locked = True - world.lamps_needed_for_dark_rooms = lamps_needed_for_dark_rooms - if clock_mode is not None: - world.clock_mode = clock_mode - if treasure_hunt_count is not None: - world.treasure_hunt_count = treasure_hunt_count - if treasure_hunt_icon is not None: - world.treasure_hunt_icon = treasure_hunt_icon - if world.keysanity: - world.itempool.extend([item for item in get_dungeon_item_pool(world) if item.player == player]) + items = ItemFactory(pool, player) + + world.lamps_needed_for_dark_rooms = lamps_needed_for_dark_rooms + + if clock_mode is not None: + world.clock_mode[player] = clock_mode + + if treasure_hunt_count is not None: + world.treasure_hunt_count[player] = treasure_hunt_count + if treasure_hunt_icon is not None: + world.treasure_hunt_icon[player] = treasure_hunt_icon + + world.itempool.extend([item for item in get_dungeon_item_pool(world) if item.player == player + and ((item.smallkey and world.keyshuffle[player]) + or (item.bigkey and world.bigkeyshuffle[player]) + or (item.map and world.mapshuffle[player]) + or (item.compass and world.compassshuffle[player]))]) # logic has some branches where having 4 hearts is one possible requirement (of several alternatives) # rather than making all hearts/heart pieces progression items (which slows down generation considerably) # We mark one random heart container as an advancement item (or 4 heart pieces in expert mode) - if world.difficulty in ['normal', 'hard'] and not (world.custom and world.customitemarray[30] == 0): - [item for item in world.itempool if item.name == 'Boss Heart Container' and item.player == player][0].advancement = True - elif world.difficulty in ['expert'] and not (world.custom and world.customitemarray[29] < 4): - adv_heart_pieces = [item for item in world.itempool if item.name == 'Piece of Heart' and item.player == player][0:4] + if world.difficulty[player] in ['normal', 'hard'] and not (world.custom and world.customitemarray[30] == 0): + [item for item in items if item.name == 'Boss Heart Container'][0].advancement = True + elif world.difficulty[player] in ['expert'] and not (world.custom and world.customitemarray[29] < 4): + adv_heart_pieces = [item for item in items if item.name == 'Piece of Heart'][0:4] for hp in adv_heart_pieces: hp.advancement = True + beeweights = {0: {None: 100}, + 1: {None: 75, 'trap': 25}, + 2: {None: 40, 'trap': 40, 'bee': 20}, + 3: {'trap': 50, 'bee': 50}, + 4: {'trap': 100}} + def beemizer(item): + if world.beemizer[item.player] and not item.advancement and not item.priority and not item.type: + choice = random.choices(list(beeweights[world.beemizer[item.player]].keys()), weights=list(beeweights[world.beemizer[item.player]].values()))[0] + return item if not choice else ItemFactory("Bee Trap", player) if choice == 'trap' else ItemFactory("Bee", player) + return item + + world.itempool += [beemizer(item) for item in items] + # shuffle medallions mm_medallion = ['Ether', 'Quake', 'Bombos'][random.randint(0, 2)] tr_medallion = ['Ether', 'Quake', 'Bombos'][random.randint(0, 2)] @@ -217,7 +272,7 @@ def generate_itempool(world, player): place_bosses(world, player) set_up_shops(world, player) - if world.retro: + if world.retro[player]: set_up_take_anys(world, player) create_dynamic_shop_locations(world, player) @@ -233,9 +288,9 @@ take_any_locations = [ 'Dark Lake Hylia Ledge Spike Cave', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint', 'Dark Desert Hint'] def set_up_take_anys(world, player): - if world.mode == 'inverted' and 'Dark Sanctuary Hint' in take_any_locations: + if world.mode[player] == 'inverted' and 'Dark Sanctuary Hint' in take_any_locations: take_any_locations.remove('Dark Sanctuary Hint') - + regions = random.sample(take_any_locations, 5) old_man_take_any = Region("Old Man Sword Cave", RegionType.Cave, 'the sword cave', player) @@ -244,11 +299,10 @@ def set_up_take_anys(world, player): reg = regions.pop() entrance = world.get_region(reg, player).entrances[0] - connect_entrance(world, entrance, old_man_take_any, player) + connect_entrance(world, entrance.name, old_man_take_any.name, player) entrance.target = 0x58 - old_man_take_any.shop = Shop(old_man_take_any, 0x0112, ShopType.TakeAny, 0xE2, True) + old_man_take_any.shop = Shop(old_man_take_any, 0x0112, ShopType.TakeAny, 0xE2, True, True) world.shops.append(old_man_take_any.shop) - old_man_take_any.shop.active = True swords = [item for item in world.itempool if item.type == 'Sword' and item.player == player] if swords: @@ -267,15 +321,14 @@ def set_up_take_anys(world, player): target, room_id = random.choice([(0x58, 0x0112), (0x60, 0x010F), (0x46, 0x011F)]) reg = regions.pop() entrance = world.get_region(reg, player).entrances[0] - connect_entrance(world, entrance, take_any, player) + connect_entrance(world, entrance.name, take_any.name, player) entrance.target = target - take_any.shop = Shop(take_any, room_id, ShopType.TakeAny, 0xE3, True) + take_any.shop = Shop(take_any, room_id, ShopType.TakeAny, 0xE3, True, True) world.shops.append(take_any.shop) - take_any.shop.active = True take_any.shop.add_inventory(0, 'Blue Potion', 0, 0) take_any.shop.add_inventory(1, 'Boss Heart Container', 0, 0) - world.intialize_regions() + world.initialize_regions() def create_dynamic_shop_locations(world, player): for shop in world.shops: @@ -312,9 +365,9 @@ def fill_prizes(world, attempts=15): prize_locs = list(empty_crystal_locations) random.shuffle(prizepool) random.shuffle(prize_locs) - fill_restrictive(world, all_state, prize_locs, prizepool) + fill_restrictive(world, all_state, prize_locs, prizepool, True) except FillError as e: - logging.getLogger('').info("Failed to place dungeon prizes (%s). Will retry %s more times", e, attempts) + logging.getLogger('').info("Failed to place dungeon prizes (%s). Will retry %s more times", e, attempts - attempt - 1) for location in empty_crystal_locations: location.item = None continue @@ -324,30 +377,23 @@ def fill_prizes(world, attempts=15): def set_up_shops(world, player): - # Changes to basic Shops # TODO: move hard+ mode changes for sheilds here, utilizing the new shops - for shop in world.shops: - shop.active = True - - if world.retro: + if world.retro[player]: rss = world.get_region('Red Shield Shop', player).shop - rss.active = True - rss.add_inventory(2, 'Single Arrow', 80) - - # Randomized changes to Shops - if world.retro: - for shop in random.sample([s for s in world.shops if s.replaceable and s.type == ShopType.Shop and s.region.player == player], 5): - shop.active = True + if not rss.locked: + rss.add_inventory(2, 'Single Arrow', 80) + for shop in random.sample([s for s in world.shops if s.custom and not s.locked and s.type == ShopType.Shop and s.region.player == player], 5): + shop.locked = True shop.add_inventory(0, 'Single Arrow', 80) shop.add_inventory(1, 'Small Key (Universal)', 100) shop.add_inventory(2, 'Bombs (10)', 50) + rss.locked = True - #special shop types def get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, retro): pool = [] - placed_items = [] + placed_items = {} precollected_items = [] clock_mode = None treasure_hunt_count = None @@ -355,6 +401,10 @@ def get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, r pool.extend(alwaysitems) + def place_item(loc, item): + assert loc not in placed_items + placed_items[loc] = item + def want_progressives(): return random.choice([True, False]) if progressive == 'random' else progressive == 'on' @@ -366,9 +416,9 @@ def get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, r lamps_needed_for_dark_rooms = 1 # insanity shuffle doesn't have fake LW/DW logic so for now guaranteed Mirror and Moon Pearl at the start - if shuffle == 'insanity_legacy': - placed_items.append(('Link\'s House', 'Magic Mirror')) - placed_items.append(('Sanctuary', 'Moon Pearl')) + if shuffle == 'insanity_legacy': + place_item('Link\'s House', 'Magic Mirror') + place_item('Sanctuary', 'Moon Pearl') else: pool.extend(['Magic Mirror', 'Moon Pearl']) @@ -399,50 +449,37 @@ def get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, r else: pool.extend(diff.basicarmor) - if swords != 'swordless': - if want_progressives(): - pool.extend(['Progressive Bow'] * 2) - else: - pool.extend(diff.basicbow) + if want_progressives(): + pool.extend(['Progressive Bow'] * 2) + elif swords != 'swordless': + pool.extend(diff.basicbow) + else: + pool.extend(['Bow', 'Silver Arrows']) if swords == 'swordless': pool.extend(diff.swordless) - if want_progressives(): - pool.extend(['Progressive Bow'] * 2) - else: - pool.extend(['Bow', 'Silver Arrows']) - elif swords == 'assured': - precollected_items.append('Fighter Sword') - if want_progressives(): - pool.extend(diff.progressivesword) - pool.extend(['Rupees (100)']) - else: - pool.extend(diff.basicsword) - pool.extend(['Rupees (100)']) elif swords == 'vanilla': - swords_to_use = [] - if want_progressives(): - swords_to_use.extend(diff.progressivesword) - swords_to_use.extend(['Progressive Sword']) - else: - swords_to_use.extend(diff.basicsword) - swords_to_use.extend(['Fighter Sword']) + swords_to_use = diff.progressivesword.copy() if want_progressives() else diff.basicsword.copy() random.shuffle(swords_to_use) - placed_items.append(('Link\'s Uncle', swords_to_use.pop())) - placed_items.append(('Blacksmith', swords_to_use.pop())) - placed_items.append(('Pyramid Fairy - Left', swords_to_use.pop())) + place_item('Link\'s Uncle', swords_to_use.pop()) + place_item('Blacksmith', swords_to_use.pop()) + place_item('Pyramid Fairy - Left', swords_to_use.pop()) if goal != 'pedestal': - placed_items.append(('Master Sword Pedestal', swords_to_use.pop())) + place_item('Master Sword Pedestal', swords_to_use.pop()) else: - placed_items.append(('Master Sword Pedestal', 'Triforce')) + place_item('Master Sword Pedestal', 'Triforce') else: - if want_progressives(): - pool.extend(diff.progressivesword) - pool.extend(['Progressive Sword']) - else: - pool.extend(diff.basicsword) - pool.extend(['Fighter Sword']) + progressive_swords = want_progressives() + pool.extend(diff.progressivesword if progressive_swords else diff.basicsword) + if swords == 'assured': + if progressive_swords: + precollected_items.append('Progressive Sword') + pool.remove('Progressive Sword') + else: + precollected_items.append('Fighter Sword') + pool.remove('Fighter Sword') + pool.extend(['Rupees (50)']) extraitems = total_items_to_place - len(pool) - len(placed_items) @@ -466,7 +503,7 @@ def get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, r extraitems -= len(extra) if goal == 'pedestal' and swords != 'vanilla': - placed_items.append(('Master Sword Pedestal', 'Triforce')) + place_item('Master Sword Pedestal', 'Triforce') if retro: pool = [item.replace('Single Arrow','Rupees (5)') for item in pool] pool = [item.replace('Arrows (10)','Rupees (5)') for item in pool] @@ -475,30 +512,34 @@ def get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, r pool.extend(diff.retro) if mode == 'standard': key_location = random.choice(['Secret Passage', 'Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Map Chest', 'Hyrule Castle - Zelda\'s Chest', 'Sewers - Dark Cross']) - placed_items.append((key_location, 'Small Key (Universal)')) + place_item(key_location, 'Small Key (Universal)') else: pool.extend(['Small Key (Universal)']) return (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, lamps_needed_for_dark_rooms) def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, swords, retro, customitemarray): pool = [] - placed_items = [] + placed_items = {} precollected_items = [] clock_mode = None treasure_hunt_count = None treasure_hunt_icon = None + def place_item(loc, item): + assert loc not in placed_items + placed_items[loc] = item + # Correct for insanely oversized item counts and take initial steps to handle undersized pools. - for x in range(0, 64): + for x in range(0, 66): if customitemarray[x] > total_items_to_place: customitemarray[x] = total_items_to_place - if customitemarray[66] > total_items_to_place: - customitemarray[66] = total_items_to_place + if customitemarray[68] > total_items_to_place: + customitemarray[68] = total_items_to_place itemtotal = 0 - for x in range(0, 65): + for x in range(0, 66): itemtotal = itemtotal + customitemarray[x] - itemtotal = itemtotal + customitemarray[66] itemtotal = itemtotal + customitemarray[68] + itemtotal = itemtotal + customitemarray[70] pool.extend(['Bow'] * customitemarray[0]) pool.extend(['Silver Arrows']* customitemarray[1]) @@ -515,7 +556,7 @@ def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, s pool.extend(['Lamp'] * customitemarray[12]) pool.extend(['Hammer'] * customitemarray[13]) pool.extend(['Shovel'] * customitemarray[14]) - pool.extend(['Ocarina'] * customitemarray[15]) + pool.extend(['Flute'] * customitemarray[15]) pool.extend(['Bug Catching Net'] * customitemarray[16]) pool.extend(['Book of Mudora'] * customitemarray[17]) pool.extend(['Cane of Somaria'] * customitemarray[19]) @@ -559,8 +600,10 @@ def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, s pool.extend(['Blue Clock'] * customitemarray[61]) pool.extend(['Green Clock'] * customitemarray[62]) pool.extend(['Red Clock'] * customitemarray[63]) - pool.extend(['Triforce Piece'] * customitemarray[64]) - pool.extend(['Triforce'] * customitemarray[66]) + pool.extend(['Progressive Bow'] * customitemarray[64]) + pool.extend(['Bombs (10)'] * customitemarray[65]) + pool.extend(['Triforce Piece'] * customitemarray[66]) + pool.extend(['Triforce'] * customitemarray[68]) diff = difficulties[difficulty] @@ -575,12 +618,12 @@ def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, s thisbottle = random.choice(diff.bottles) pool.append(thisbottle) - if customitemarray[64] > 0 or customitemarray[65] > 0: - treasure_hunt_count = max(min(customitemarray[65], 99), 1) #To display, count must be between 1 and 99. + if customitemarray[66] > 0 or customitemarray[67] > 0: + treasure_hunt_count = max(min(customitemarray[67], 99), 1) #To display, count must be between 1 and 99. treasure_hunt_icon = 'Triforce Piece' # Ensure game is always possible to complete here, force sufficient pieces if the player is unwilling. - if (customitemarray[64] < treasure_hunt_count) and (goal == 'triforcehunt') and (customitemarray[66] == 0): - extrapieces = treasure_hunt_count - customitemarray[64] + if (customitemarray[66] < treasure_hunt_count) and (goal == 'triforcehunt') and (customitemarray[68] == 0): + extrapieces = treasure_hunt_count - customitemarray[66] pool.extend(['Triforce Piece'] * extrapieces) itemtotal = itemtotal + extrapieces @@ -592,25 +635,25 @@ def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, s clock_mode = 'ohko' if goal == 'pedestal': - placed_items.append(('Master Sword Pedestal', 'Triforce')) + place_item('Master Sword Pedestal', 'Triforce') itemtotal = itemtotal + 1 if mode == 'standard': if retro: key_location = random.choice(['Secret Passage', 'Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Map Chest', 'Hyrule Castle - Zelda\'s Chest', 'Sewers - Dark Cross']) - placed_items.append((key_location, 'Small Key (Universal)')) - pool.extend(['Small Key (Universal)'] * max((customitemarray[68] - 1), 0)) + place_item(key_location, 'Small Key (Universal)') + pool.extend(['Small Key (Universal)'] * max((customitemarray[70] - 1), 0)) else: - pool.extend(['Small Key (Universal)'] * customitemarray[68]) + pool.extend(['Small Key (Universal)'] * customitemarray[70]) else: - pool.extend(['Small Key (Universal)'] * customitemarray[68]) + pool.extend(['Small Key (Universal)'] * customitemarray[70]) pool.extend(['Fighter Sword'] * customitemarray[32]) pool.extend(['Progressive Sword'] * customitemarray[36]) if shuffle == 'insanity_legacy': - placed_items.append(('Link\'s House', 'Magic Mirror')) - placed_items.append(('Sanctuary', 'Moon Pearl')) + place_item('Link\'s House', 'Magic Mirror') + place_item('Sanctuary', 'Moon Pearl') pool.extend(['Magic Mirror'] * max((customitemarray[22] -1 ), 0)) pool.extend(['Moon Pearl'] * max((customitemarray[28] - 1), 0)) else: @@ -628,13 +671,14 @@ def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, s def test(): for difficulty in ['normal', 'hard', 'expert']: for goal in ['ganon', 'triforcehunt', 'pedestal']: - for timer in ['none', 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown']: + for timer in [False, 'display', 'timed', 'timed-ohko', 'ohko', 'timed-countdown']: for mode in ['open', 'standard', 'inverted']: for swords in ['random', 'assured', 'swordless', 'vanilla']: for progressive in ['on', 'off']: for shuffle in ['full', 'insanity_legacy']: for retro in [True, False]: - out = get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, retro) + out = get_pool_core(progressive, shuffle, difficulty, timer, goal, mode, swords, + retro) count = len(out[0]) + len(out[1]) correct_count = total_items_to_place diff --git a/Items.py b/Items.py index f9a7d884..6c9bbed9 100644 --- a/Items.py +++ b/Items.py @@ -25,11 +25,12 @@ def ItemFactory(items, player): # Format: Name: (Advancement, Priority, Type, ItemCode, Pedestal Hint Text, Pedestal Credit Text, Sick Kid Credit Text, Zora Credit Text, Witch Credit Text, Flute Boy Credit Text, Hint Text) item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher class.', 'the stick and twine', 'arrow-slinging kid', 'arrow sling for sale', 'witch and robin hood', 'archer boy shoots again', 'the Bow'), 'Progressive Bow': (True, False, None, 0x64, 'You have\nchosen the\narcher class.', 'the stick and twine', 'arrow-slinging kid', 'arrow sling for sale', 'witch and robin hood', 'archer boy shoots again', 'a Bow'), + 'Progressive Bow (Alt)': (True, False, None, 0x65, 'You have\nchosen the\narcher class.', 'the stick and twine', 'arrow-slinging kid', 'arrow sling for sale', 'witch and robin hood', 'archer boy shoots again', 'a Bow'), 'Book of Mudora': (True, False, None, 0x1D, 'This is a\nparadox?!', 'and the story book', 'the scholarly kid', 'moon runes for sale', 'drugs for literacy', 'book-worm boy can read again', 'the Book'), 'Hammer': (True, False, None, 0x09, 'stop\nhammer time!', 'and m c hammer', 'hammer-smashing kid', 'm c hammer for sale', 'stop... hammer time', 'stop, hammer time', 'the hammer'), 'Hookshot': (True, False, None, 0x0A, 'BOING!!!\nBOING!!!\nBOING!!!', 'and the tickle beam', 'tickle-monster kid', 'tickle beam for sale', 'witch and tickle boy', 'beam boy tickles again', 'the Hookshot'), 'Magic Mirror': (True, False, None, 0x1A, 'Isn\'t your\nreflection so\npretty?', 'the face reflector', 'the narcissistic kid', 'your face for sale', 'trades looking-glass', 'narcissistic boy is happy again', 'the Mirror'), - 'Ocarina': (True, False, None, 0x14, 'Save the duck\nand fly to\nfreedom!', 'and the duck call', 'the duck-call kid', 'duck call for sale', 'duck-calls for trade', 'ocarina boy plays again', 'the Flute'), + 'Flute': (True, False, None, 0x14, 'Save the duck\nand fly to\nfreedom!', 'and the duck call', 'the duck-call kid', 'duck call for sale', 'duck-calls for trade', 'flute boy plays again', 'the Flute'), 'Pegasus Boots': (True, False, None, 0x4B, 'Gotta go fast!', 'and the sprint shoes', 'the running-man kid', 'sprint shoe for sale', 'shrooms for speed', 'gotta-go-fast boy runs again', 'the Boots'), 'Power Glove': (True, False, None, 0x1B, 'Now you can\nlift weak\nstuff!', 'and the grey mittens', 'body-building kid', 'lift glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'the glove'), 'Cape': (True, False, None, 0x19, 'Wear this to\nbecome\ninvisible!', 'the camouflage cape', 'red riding-hood kid', 'red hood for sale', 'hood from a hood', 'dapper boy hides again', 'the cape'), @@ -43,14 +44,14 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla 'Flippers': (True, False, None, 0x1E, 'fancy a swim?', 'and the toewebs', 'the swimming kid', 'finger webs for sale', 'shrooms let you swim', 'swimming boy swims again', 'the flippers'), 'Ice Rod': (True, False, None, 0x08, 'I\'m the cold\nrod. I make\nthings freeze!', 'and the freeze ray', 'the ice-bending kid', 'freeze ray for sale', 'fungus for ice-rod', 'ice-cube boy freezes again', 'the ice rod'), 'Titans Mitts': (True, False, None, 0x1C, 'Now you can\nlift heavy\nstuff!', 'and the golden glove', 'body-building kid', 'carry glove for sale', 'fungus for bling-gloves', 'body-building boy has gold again', 'the mitts'), - 'Ether': (True, False, None, 0x10, 'This magic\ncoin freezes\neverything!', 'and the bolt coin', 'coin-collecting kid', 'bolt coin for sale', 'shrooms for bolt-coin', 'medallion boy sees floor again', 'Ether'), 'Bombos': (True, False, None, 0x0F, 'Burn, baby,\nburn! Fear my\nring of fire!', 'and the swirly coin', 'coin-collecting kid', 'swirly coin for sale', 'shrooms for swirly-coin', 'medallion boy melts room again', 'Bombos'), + 'Ether': (True, False, None, 0x10, 'This magic\ncoin freezes\neverything!', 'and the bolt coin', 'coin-collecting kid', 'bolt coin for sale', 'shrooms for bolt-coin', 'medallion boy sees floor again', 'Ether'), 'Quake': (True, False, None, 0x11, 'Maxing out the\nRichter scale\nis what I do!', 'and the wavy coin', 'coin-collecting kid', 'wavy coin for sale', 'shrooms for wavy-coin', 'medallion boy shakes dirt again', 'Quake'), 'Bottle': (True, False, None, 0x16, 'Now you can\nstore potions\nand stuff!', 'and the terrarium', 'the terrarium kid', 'terrarium for sale', 'special promotion', 'bottle boy has terrarium again', 'a Bottle'), 'Bottle (Red Potion)': (True, False, None, 0x2B, 'Hearty red goop!', 'and the red goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has red goo again', 'a Bottle'), 'Bottle (Green Potion)': (True, False, None, 0x2C, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a Bottle'), 'Bottle (Blue Potion)': (True, False, None, 0x2D, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a Bottle'), - 'Bottle (Fairy)': (True, False, None, 0x3D, 'Save me and I will revive you', 'and the captive', 'the tingle kid', 'hostage for sale', 'fairy dust and shrooms', 'bottle boy has friend again', 'a Bottle'), + 'Bottle (Fairy)': (True, False, None, 0x3D, 'Save me and I will revive you', 'and the captive', 'the tingle kid','hostage for sale', 'fairy dust and shrooms', 'bottle boy has friend again', 'a Bottle'), 'Bottle (Bee)': (True, False, None, 0x3C, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a Bottle'), 'Bottle (Good Bee)': (True, False, None, 0x48, 'I will sting your foes a whole lot!', 'and the sparkle sting', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has beetor again', 'a Bottle'), 'Master Sword': (True, False, 'Sword', 0x50, 'I beat barries and pigs alike', 'and the master sword', 'sword-wielding kid', 'glow sword for sale', 'fungus for blue slasher', 'sword boy fights again', 'the Master Sword'), @@ -60,19 +61,19 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla 'Progressive Sword': (True, False, 'Sword', 0x5E, 'a better copy\nof your sword\nfor your time', 'the unknown sword', 'sword-wielding kid', 'sword for sale', 'fungus for some slasher', 'sword boy fights again', 'a sword'), 'Progressive Glove': (True, False, None, 0x61, 'a way to lift\nheavier things', 'and the lift upgrade', 'body-building kid', 'some glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'a glove'), 'Silver Arrows': (True, False, None, 0x58, 'Do you fancy\nsilver tipped\narrows?', 'and the ganonsbane', 'ganon-killing kid', 'ganon doom for sale', 'fungus for pork', 'archer boy shines again', 'the silver arrows'), - 'Green Pendant': (True, False, 'Crystal', [0x04, 0x38, 0x62, 0x00, 0x69, 0x01], None, None, None, None, None, None, None), - 'Red Pendant': (True, False, 'Crystal', [0x02, 0x34, 0x60, 0x00, 0x69, 0x02], None, None, None, None, None, None, None), - 'Blue Pendant': (True, False, 'Crystal', [0x01, 0x32, 0x60, 0x00, 0x69, 0x03], None, None, None, None, None, None, None), + 'Green Pendant': (True, False, 'Crystal', (0x04, 0x38, 0x62, 0x00, 0x69, 0x01), None, None, None, None, None, None, None), + 'Red Pendant': (True, False, 'Crystal', (0x02, 0x34, 0x60, 0x00, 0x69, 0x02), None, None, None, None, None, None, None), + 'Blue Pendant': (True, False, 'Crystal', (0x01, 0x32, 0x60, 0x00, 0x69, 0x03), None, None, None, None, None, None, None), 'Triforce': (True, False, None, 0x6A, '\n YOU WIN!', 'and the triforce', 'victorious kid', 'victory for sale', 'fungus for the win', 'greedy boy wins game again', 'the Triforce'), 'Power Star': (True, False, None, 0x6B, 'a small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Power Star'), 'Triforce Piece': (True, False, None, 0x6C, 'a small victory', 'and the thirdforce', 'triangular kid', 'triangle for sale', 'fungus for triangle', 'wise boy has triangle again', 'a Triforce Piece'), - 'Crystal 1': (True, False, 'Crystal', [0x02, 0x34, 0x64, 0x40, 0x7F, 0x06], None, None, None, None, None, None, None), - 'Crystal 2': (True, False, 'Crystal', [0x10, 0x34, 0x64, 0x40, 0x79, 0x06], None, None, None, None, None, None, None), - 'Crystal 3': (True, False, 'Crystal', [0x40, 0x34, 0x64, 0x40, 0x6C, 0x06], None, None, None, None, None, None, None), - 'Crystal 4': (True, False, 'Crystal', [0x20, 0x34, 0x64, 0x40, 0x6D, 0x06], None, None, None, None, None, None, None), - 'Crystal 5': (True, False, 'Crystal', [0x04, 0x32, 0x64, 0x40, 0x6E, 0x06], None, None, None, None, None, None, None), - 'Crystal 6': (True, False, 'Crystal', [0x01, 0x32, 0x64, 0x40, 0x6F, 0x06], None, None, None, None, None, None, None), - 'Crystal 7': (True, False, 'Crystal', [0x08, 0x34, 0x64, 0x40, 0x7C, 0x06], None, None, None, None, None, None, None), + 'Crystal 1': (True, False, 'Crystal', (0x02, 0x34, 0x64, 0x40, 0x7F, 0x06), None, None, None, None, None, None, None), + 'Crystal 2': (True, False, 'Crystal', (0x10, 0x34, 0x64, 0x40, 0x79, 0x06), None, None, None, None, None, None, None), + 'Crystal 3': (True, False, 'Crystal', (0x40, 0x34, 0x64, 0x40, 0x6C, 0x06), None, None, None, None, None, None, None), + 'Crystal 4': (True, False, 'Crystal', (0x20, 0x34, 0x64, 0x40, 0x6D, 0x06), None, None, None, None, None, None, None), + 'Crystal 5': (True, False, 'Crystal', (0x04, 0x32, 0x64, 0x40, 0x6E, 0x06), None, None, None, None, None, None, None), + 'Crystal 6': (True, False, 'Crystal', (0x01, 0x32, 0x64, 0x40, 0x6F, 0x06), None, None, None, None, None, None, None), + 'Crystal 7': (True, False, 'Crystal', (0x08, 0x34, 0x64, 0x40, 0x7C, 0x06), None, None, None, None, None, None, None), 'Single Arrow': (False, False, None, 0x43, 'a lonely arrow\nsits here.', 'and the arrow', 'stick-collecting kid', 'sewing needle for sale', 'fungus for arrow', 'archer boy sews again', 'an arrow'), 'Arrows (10)': (False, False, None, 0x44, 'This will give\nyou ten shots\nwith your bow!', 'and the arrow pack', 'stick-collecting kid', 'sewing kit for sale', 'fungus for arrows', 'archer boy sews again', 'ten arrows'), 'Arrow Upgrade (+10)': (False, False, None, 0x54, 'increase arrow\nstorage, low\nlow price', 'and the quiver', 'quiver-enlarging kid', 'arrow boost for sale', 'witch and more skewers', 'upgrade boy sews more again', 'arrow capacity'), @@ -161,15 +162,20 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla 'Map (Ganons Tower)': (False, True, 'Map', 0x72, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Ganon\'s Tower'), 'Small Key (Universal)': (False, True, None, 0xAF, 'A small key for any door', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key'), 'Nothing': (False, False, None, 0x5A, 'Some Hot Air', 'and the Nothing', 'the zen kid', 'outright theft', 'shroom theft', 'empty boy is bored again', 'nothing'), - 'Red Potion': (False, False, None, 0x2E, None, None, None, None, None, None, None), - 'Green Potion': (False, False, None, 0x2F, None, None, None, None, None, None, None), - 'Blue Potion': (False, False, None, 0x30, None, None, None, None, None, None, None), - 'Bee': (False, False, None, 0x0E, None, None, None, None, None, None, None), - 'Small Heart': (False, False, None, 0x42, None, None, None, None, None, None, None), + 'Bee Trap': (False, False, None, 0xB0, 'We will sting your face a whole lot!', 'and the sting buddies', 'the beekeeper kid', 'insects for sale', 'shroom pollenation', 'bottle boy has mad bees again', 'friendship'), + 'Red Potion': (False, False, None, 0x2E, 'Hearty red goop!', 'and the red goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has red goo again', 'a red potion'), + 'Green Potion': (False, False, None, 0x2F, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a green potion'), + 'Blue Potion': (False, False, None, 0x30, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a blue potion'), + 'Bee': (False, False, None, 0x0E, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a bee'), + 'Small Heart': (False, False, None, 0x42, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart'), 'Beat Agahnim 1': (True, False, 'Event', None, None, None, None, None, None, None, None), 'Beat Agahnim 2': (True, False, 'Event', None, None, None, None, None, None, None, None), 'Get Frog': (True, False, 'Event', None, None, None, None, None, None, None, None), 'Return Smith': (True, False, 'Event', None, None, None, None, None, None, None, None), 'Pick Up Purple Chest': (True, False, 'Event', None, None, None, None, None, None, None, None), 'Open Floodgate': (True, False, 'Event', None, None, None, None, None, None, None, None), - } + } + +lookup_id_to_name = {data[3]: name for name, data in item_table.items()} + +hint_blacklist = {"Triforce"} \ No newline at end of file diff --git a/LICENSE b/LICENSE index fd7e98c1..2d235b1c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License Copyright (c) 2017 LLCoolDave +Copyright (c) 2020 Berserker66 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Main.py b/Main.py index 1e3860b6..a68c29e3 100644 --- a/Main.py +++ b/Main.py @@ -6,25 +6,33 @@ import logging import os import random import time +import zlib from BaseClasses import World, CollectionState, Item, Region, Location, Shop -from Regions import create_regions, mark_light_world_regions +from Items import ItemFactory +from Regions import create_regions, create_shops, mark_light_world_regions from InvertedRegions import create_inverted_regions, mark_dark_world_regions from EntranceShuffle import link_entrances, link_inverted_entrances -from Rom import patch_rom, get_enemizer_patch, apply_rom_settings, Sprite, LocalRom, JsonRom +from Rom import patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, LocalRom, JsonRom, get_hash_string from Rules import set_rules from Dungeons import create_dungeons, fill_dungeons, fill_dungeons_restrictive from Fill import distribute_items_cutoff, distribute_items_staleness, distribute_items_restrictive, flood_items, balance_multiworld_progression from ItemList import generate_itempool, difficulties, fill_prizes -from Utils import output_path +from Utils import output_path, parse_player_names __version__ = '0.6.3-pre' def main(args, seed=None): + if args.outputpath: + os.makedirs(args.outputpath, exist_ok=True) + output_path.cached_path = args.outputpath + start = time.perf_counter() # initialize the world - world = World(args.multi, args.shuffle, args.logic, args.mode, args.swords, args.difficulty, args.item_functionality, args.timer, args.progressive, args.goal, args.algorithm, not args.nodungeonitems, args.accessibility, args.shuffleganon, args.quickswap, args.fastmenu, args.disablemusic, args.keysanity, args.retro, args.custom, args.customitemarray, args.shufflebosses, args.hints) + world = World(args.multi, args.shuffle, args.logic, args.mode, args.swords, args.difficulty, + args.item_functionality, args.timer, args.progressive.copy(), args.goal, args.algorithm, + args.accessibility, args.shuffleganon, args.retro, args.custom, args.customitemarray, args.hints) logger = logging.getLogger('') if seed is None: random.seed(None) @@ -33,36 +41,65 @@ def main(args, seed=None): world.seed = int(seed) random.seed(world.seed) - world.crystals_needed_for_ganon = random.randint(0, 7) if args.crystals_ganon == 'random' else int(args.crystals_ganon) - world.crystals_needed_for_gt = random.randint(0, 7) if args.crystals_gt == 'random' else int(args.crystals_gt) + world.remote_items = args.remote_items.copy() + world.mapshuffle = args.mapshuffle.copy() + world.compassshuffle = args.compassshuffle.copy() + world.keyshuffle = args.keyshuffle.copy() + world.bigkeyshuffle = args.bigkeyshuffle.copy() + world.crystals_needed_for_ganon = {player: random.randint(0, 7) if args.crystals_ganon[player] == 'random' else int(args.crystals_ganon[player]) for player in range(1, world.players + 1)} + world.crystals_needed_for_gt = {player: random.randint(0, 7) if args.crystals_gt[player] == 'random' else int(args.crystals_gt[player]) for player in range(1, world.players + 1)} + world.open_pyramid = args.openpyramid.copy() + world.boss_shuffle = args.shufflebosses.copy() + world.enemy_shuffle = args.shuffleenemies.copy() + world.enemy_health = args.enemy_health.copy() + world.enemy_damage = args.enemy_damage.copy() + world.beemizer = args.beemizer.copy() + world.timer = args.timer.copy() + world.shufflepots = args.shufflepots.copy() + world.progressive = args.progressive.copy() + world.extendedmsu = args.extendedmsu.copy() world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)} - logger.info('ALttP Entrance Randomizer Version %s - Seed: %s\n\n', __version__, world.seed) + logger.info('ALttP Entrance Randomizer Version %s - Seed: %s\n', __version__, world.seed) - world.difficulty_requirements = difficulties[world.difficulty] + parsed_names = parse_player_names(args.names, world.players, args.teams) + world.teams = len(parsed_names) + for i, team in enumerate(parsed_names, 1): + if world.players > 1: + logger.info('%s%s', 'Team%d: ' % i if world.teams > 1 else 'Players: ', ', '.join(team)) + for player, name in enumerate(team, 1): + world.player_names[player].append(name) - if world.mode != 'inverted': - for player in range(1, world.players + 1): + logger.info('') + + for player in range(1, world.players + 1): + world.difficulty_requirements[player] = difficulties[world.difficulty[player]] + + if world.mode[player] == 'standard' and world.enemy_shuffle[player] != 'none': + world.escape_assist[player].append('bombs') # enemized escape assumes infinite bombs available and will likely be unbeatable without it + + for tok in filter(None, args.startinventory[player].split(',')): + item = ItemFactory(tok.strip(), player) + if item: + world.push_precollected(item) + + if world.mode[player] != 'inverted': create_regions(world, player) - create_dungeons(world, player) - else: - for player in range(1, world.players + 1): + else: create_inverted_regions(world, player) - create_dungeons(world, player) + create_shops(world, player) + create_dungeons(world, player) logger.info('Shuffling the World about.') - if world.mode != 'inverted': - for player in range(1, world.players + 1): + for player in range(1, world.players + 1): + if world.mode[player] != 'inverted': link_entrances(world, player) - - mark_light_world_regions(world) - else: - for player in range(1, world.players + 1): + mark_light_world_regions(world, player) + else: link_inverted_entrances(world, player) - - mark_dark_world_regions(world) + mark_dark_world_regions(world, player) logger.info('Generating Item Pool.') @@ -81,7 +118,8 @@ def main(args, seed=None): logger.info('Placing Dungeon Items.') shuffled_locations = None - if args.algorithm in ['balanced', 'vt26'] or args.keysanity: + if args.algorithm in ['balanced', 'vt26'] or any(list(args.mapshuffle.values()) + list(args.compassshuffle.values()) + + list(args.keyshuffle.values()) + list(args.bigkeyshuffle.values())): shuffled_locations = world.get_unfilled_locations() random.shuffle(shuffled_locations) fill_dungeons_restrictive(world, shuffled_locations) @@ -99,12 +137,12 @@ def main(args, seed=None): elif args.algorithm == 'freshness': distribute_items_staleness(world) elif args.algorithm == 'vt25': - distribute_items_restrictive(world, 0) + distribute_items_restrictive(world, False) elif args.algorithm == 'vt26': - distribute_items_restrictive(world, gt_filler(world), shuffled_locations) + distribute_items_restrictive(world, True, shuffled_locations) elif args.algorithm == 'balanced': - distribute_items_restrictive(world, gt_filler(world)) + distribute_items_restrictive(world, True) if world.players > 1: logger.info('Balancing multiworld progression.') @@ -112,55 +150,105 @@ def main(args, seed=None): logger.info('Patching ROM.') - if args.sprite is not None: - if isinstance(args.sprite, Sprite): - sprite = args.sprite - else: - sprite = Sprite(args.sprite) - else: - sprite = None - - outfilebase = 'ER_%s_%s-%s-%s-%s%s_%s-%s%s%s%s%s_%s' % (world.logic, world.difficulty, world.difficulty_adjustments, world.mode, world.goal, "" if world.timer in ['none', 'display'] else "-" + world.timer, world.shuffle, world.algorithm, "-keysanity" if world.keysanity else "", "-retro" if world.retro else "", "-prog_" + world.progressive if world.progressive in ['off', 'random'] else "", "-nohints" if not world.hints else "", world.seed) - - use_enemizer = args.enemizercli and (args.shufflebosses != 'none' or args.shuffleenemies or args.enemy_health != 'default' or args.enemy_health != 'default' or args.enemy_damage or args.shufflepalette or args.shufflepots) + outfilebase = 'ER_%s' % (args.outputname if args.outputname else world.seed) + rom_names = [] jsonout = {} - if not args.suppress_rom: - if world.players > 1: - raise NotImplementedError("Multiworld rom writes have not been implemented") + + def _gen_rom(team: int, player: int): + sprite_random_on_hit = type(args.sprite[player]) is str and args.sprite[player].lower() == 'randomonhit' + use_enemizer = (world.boss_shuffle[player] != 'none' or world.enemy_shuffle[player] != 'none' + or world.enemy_health[player] != 'default' or world.enemy_damage[player] != 'default' + or args.shufflepots[player] or sprite_random_on_hit) + + rom = JsonRom() if args.jsonout or use_enemizer else LocalRom(args.rom, extendedmsu=args.extendedmsu[player]) + + patch_rom(world, rom, player, team, use_enemizer) + + if use_enemizer and (args.enemizercli or not args.jsonout): + patch_enemizer(world, player, rom, args.rom, args.enemizercli, args.shufflepots[player], + sprite_random_on_hit, extendedmsu=args.extendedmsu[player]) + if not args.jsonout: + rom = LocalRom.fromJsonRom(rom, args.rom, 0x400000, args.extendedmsu[player]) + + if args.race: + patch_race_rom(rom) + + world.spoiler.hashes[(player, team)] = get_hash_string(rom.hash) + + apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player], + args.fastmenu[player], args.disablemusic[player], args.sprite[player], + args.ow_palettes[player], args.uw_palettes[player]) + + if args.jsonout: + jsonout[f'patch_t{team}_p{player}'] = rom.patches else: - player = 1 + mcsb_name = '' + if all([world.mapshuffle[player], world.compassshuffle[player], world.keyshuffle[player], + world.bigkeyshuffle[player]]): + mcsb_name = '-keysanity' + elif [world.mapshuffle[player], world.compassshuffle[player], world.keyshuffle[player], + world.bigkeyshuffle[player]].count(True) == 1: + mcsb_name = '-mapshuffle' if world.mapshuffle[player] else '-compassshuffle' if world.compassshuffle[ + player] else '-keyshuffle' if world.keyshuffle[player] else '-bigkeyshuffle' + elif any([world.mapshuffle[player], world.compassshuffle[player], world.keyshuffle[player], + world.bigkeyshuffle[player]]): + mcsb_name = '-%s%s%s%sshuffle' % ( + 'M' if world.mapshuffle[player] else '', 'C' if world.compassshuffle[player] else '', + 'S' if world.keyshuffle[player] else '', 'B' if world.bigkeyshuffle[player] else '') - local_rom = None - if args.jsonout: - rom = JsonRom() - else: - if use_enemizer: - local_rom = LocalRom(args.rom) - rom = JsonRom() - else: - rom = LocalRom(args.rom) + outfilepname = f'_T{team + 1}' if world.teams > 1 else '' + if world.players > 1: + outfilepname += f'_P{player}' + if world.players > 1 or world.teams > 1: + outfilepname += f"_{world.player_names[player][team].replace(' ', '_')}" if world.player_names[player][ + team] != 'Player %d' % player else '' + outfilesuffix = ('_%s_%s-%s-%s-%s%s_%s-%s%s%s%s%s' % (world.logic[player], world.difficulty[player], + world.difficulty_adjustments[player], + world.mode[player], world.goal[player], + "" if world.timer[player] in [False, + 'display'] else "-" + + world.timer[ + player], + world.shuffle[player], world.algorithm, + mcsb_name, + "-retro" if world.retro[player] else "", + "-prog_" + world.progressive[player] if + world.progressive[player] in ['off', + 'random'] else "", + "-nohints" if not world.hints[ + player] else "")) if not args.outputname else '' + rompath = output_path(f'{outfilebase}{outfilepname}{outfilesuffix}.sfc') + rom.write_to_file(rompath) + if args.create_diff: + import Patch + Patch.create_patch_file(rompath) + return (player, team, list(rom.name)) - patch_rom(world, player, rom) - - enemizer_patch = [] - if use_enemizer: - enemizer_patch = get_enemizer_patch(world, player, rom, args.rom, args.enemizercli, args.shuffleenemies, args.enemy_health, args.enemy_damage, args.shufflepalette, args.shufflepots) - - if args.jsonout: - jsonout['patch'] = rom.patches - if use_enemizer: - jsonout['enemizer' % player] = enemizer_patch - else: - if use_enemizer: - local_rom.patch_enemizer(rom.patches, os.path.join(os.path.dirname(args.enemizercli), "enemizerBasePatch.json"), enemizer_patch) - rom = local_rom - - apply_rom_settings(rom, args.heartbeep, args.heartcolor, world.quickswap, world.fastmenu, world.disable_music, sprite) - rom.write_to_file(output_path('%s.sfc' % outfilebase)) - - if args.create_spoiler and not args.jsonout: - world.spoiler.to_file(output_path('%s_Spoiler.txt' % outfilebase)) + if not args.suppress_rom: + import concurrent.futures + futures = [] + with concurrent.futures.ThreadPoolExecutor() as pool: + for team in range(world.teams): + for player in range(1, world.players + 1): + futures.append(pool.submit(_gen_rom, team, player)) + for future in futures: + rom_name = future.result() + rom_names.append(rom_name) + multidata = zlib.compress(json.dumps({"names": parsed_names, + "roms": rom_names, + "remote_items": [player for player in range(1, world.players + 1) if + world.remote_items[player]], + "locations": [((location.address, location.player), + (location.item.code, location.item.player)) + for location in world.get_filled_locations() if + type(location.address) is int] + }).encode("utf-8")) + if args.jsonout: + jsonout["multidata"] = list(multidata) + else: + with open(output_path('%s_multidata' % outfilebase), 'wb') as f: + f.write(multidata) if not args.skip_playthrough: logger.info('Calculating playthrough.') @@ -176,44 +264,54 @@ def main(args, seed=None): return world -def gt_filler(world): - if world.goal == 'triforcehunt': - return random.randint(15, 50) - return random.randint(0, 15) - def copy_world(world): # ToDo: Not good yet - ret = World(world.players, world.shuffle, world.logic, world.mode, world.swords, world.difficulty, world.difficulty_adjustments, world.timer, world.progressive, world.goal, world.algorithm, world.place_dungeon_items, world.accessibility, world.shuffle_ganon, world.quickswap, world.fastmenu, world.disable_music, world.keysanity, world.retro, world.custom, world.customitemarray, world.boss_shuffle, world.hints) + ret = World(world.players, world.shuffle, world.logic, world.mode, world.swords, world.difficulty, world.difficulty_adjustments, world.timer, world.progressive, world.goal, world.algorithm, world.accessibility, world.shuffle_ganon, world.retro, world.custom, world.customitemarray, world.hints) + ret.teams = world.teams + ret.player_names = copy.deepcopy(world.player_names) + ret.remote_items = world.remote_items.copy() ret.required_medallions = world.required_medallions.copy() ret.swamp_patch_required = world.swamp_patch_required.copy() ret.ganon_at_pyramid = world.ganon_at_pyramid.copy() ret.powder_patch_required = world.powder_patch_required.copy() ret.ganonstower_vanilla = world.ganonstower_vanilla.copy() - ret.treasure_hunt_count = world.treasure_hunt_count - ret.treasure_hunt_icon = world.treasure_hunt_icon - ret.sewer_light_cone = world.sewer_light_cone + ret.treasure_hunt_count = world.treasure_hunt_count.copy() + ret.treasure_hunt_icon = world.treasure_hunt_icon.copy() + ret.sewer_light_cone = world.sewer_light_cone.copy() ret.light_world_light_cone = world.light_world_light_cone ret.dark_world_light_cone = world.dark_world_light_cone ret.seed = world.seed - ret.can_access_trock_eyebridge = world.can_access_trock_eyebridge - ret.can_access_trock_front = world.can_access_trock_front - ret.can_access_trock_big_chest = world.can_access_trock_big_chest - ret.can_access_trock_middle = world.can_access_trock_middle + ret.can_access_trock_eyebridge = world.can_access_trock_eyebridge.copy() + ret.can_access_trock_front = world.can_access_trock_front.copy() + ret.can_access_trock_big_chest = world.can_access_trock_big_chest.copy() + ret.can_access_trock_middle = world.can_access_trock_middle.copy() ret.can_take_damage = world.can_take_damage - ret.difficulty_requirements = world.difficulty_requirements - ret.fix_fake_world = world.fix_fake_world + ret.difficulty_requirements = world.difficulty_requirements.copy() + ret.fix_fake_world = world.fix_fake_world.copy() ret.lamps_needed_for_dark_rooms = world.lamps_needed_for_dark_rooms - ret.crystals_needed_for_ganon = world.crystals_needed_for_ganon - ret.crystals_needed_for_gt = world.crystals_needed_for_gt + ret.mapshuffle = world.mapshuffle.copy() + ret.compassshuffle = world.compassshuffle.copy() + ret.keyshuffle = world.keyshuffle.copy() + ret.bigkeyshuffle = world.bigkeyshuffle.copy() + ret.crystals_needed_for_ganon = world.crystals_needed_for_ganon.copy() + ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy() + ret.open_pyramid = world.open_pyramid.copy() + ret.boss_shuffle = world.boss_shuffle.copy() + ret.enemy_shuffle = world.enemy_shuffle.copy() + ret.enemy_health = world.enemy_health.copy() + ret.enemy_damage = world.enemy_damage.copy() + ret.beemizer = world.beemizer.copy() + ret.timer = world.timer.copy() + ret.shufflepots = world.shufflepots.copy() + ret.extendedmsu = world.extendedmsu.copy() - if world.mode != 'inverted': - for player in range(1, world.players + 1): + for player in range(1, world.players + 1): + if world.mode[player] != 'inverted': create_regions(ret, player) - create_dungeons(ret, player) - else: - for player in range(1, world.players + 1): + else: create_inverted_regions(ret, player) - create_dungeons(ret, player) + create_shops(ret, player) + create_dungeons(ret, player) copy_dynamic_regions_and_locations(world, ret) @@ -224,7 +322,6 @@ def copy_world(world): for shop in world.shops: copied_shop = ret.get_region(shop.region.name, shop.region.player).shop - copied_shop.active = shop.active copied_shop.inventory = copy.copy(shop.inventory) # connect copied world @@ -241,6 +338,7 @@ def copy_world(world): item = Item(location.item.name, location.item.advancement, location.item.priority, location.item.type, player = location.item.player) ret.get_location(location.name, location.player).item = item item.location = ret.get_location(location.name, location.player) + item.world = ret if location.event: ret.get_location(location.name, location.player).event = True if location.locked: @@ -250,9 +348,11 @@ def copy_world(world): for item in world.itempool: ret.itempool.append(Item(item.name, item.advancement, item.priority, item.type, player = item.player)) + for item in world.precollected_items: + ret.push_precollected(ItemFactory(item.name, item.player)) + # copy progress items in state ret.state.prog_items = world.state.prog_items.copy() - ret.precollected_items = world.precollected_items.copy() ret.state.stale = {player: True for player in range(1, world.players + 1)} for player in range(1, world.players + 1): @@ -263,14 +363,14 @@ def copy_world(world): def copy_dynamic_regions_and_locations(world, ret): for region in world.dynamic_regions: new_reg = Region(region.name, region.type, region.hint_text, region.player) - new_reg.world = ret ret.regions.append(new_reg) + ret.initialize_regions([new_reg]) ret.dynamic_regions.append(new_reg) # Note: ideally exits should be copied here, but the current use case (Take anys) do not require this if region.shop: - new_reg.shop = Shop(new_reg, region.shop.room_id, region.shop.type, region.shop.shopkeeper_config, region.shop.replaceable) + new_reg.shop = Shop(new_reg, region.shop.room_id, region.shop.type, region.shop.shopkeeper_config, region.shop.custom, region.shop.locked) ret.shops.append(new_reg.shop) for location in world.dynamic_locations: @@ -292,7 +392,7 @@ def create_playthrough(world): world = copy_world(world) # if we only check for beatable, we can do this sanity check first before writing down spheres - if world.accessibility == 'none' and not world.can_beat_game(): + if not world.can_beat_game(): raise RuntimeError('Cannot beat game. Something went terribly wrong here!') # get locations containing progress items @@ -303,8 +403,7 @@ def create_playthrough(world): sphere_candidates = list(prog_locations) logging.getLogger('').debug('Building up collection spheres.') while sphere_candidates: - if not world.keysanity: - state.sweep_for_events(key_only=True) + state.sweep_for_events(key_only=True) sphere = [] # build up spheres of collection radius. Everything in each sphere is independent from each other in dependencies and only depends on lower spheres @@ -323,9 +422,10 @@ def create_playthrough(world): logging.getLogger('').debug('Calculated sphere %i, containing %i of %i progress items.', len(collection_spheres), len(sphere), len(prog_locations)) if not sphere: logging.getLogger('').debug('The following items could not be reached: %s', ['%s (Player %d) at %s (Player %d)' % (location.item.name, location.item.player, location.name, location.player) for location in sphere_candidates]) - if not world.accessibility == 'none': + if any([world.accessibility[location.item.player] != 'none' for location in sphere_candidates]): raise RuntimeError('Not all progression items reachable. Something went terribly wrong here.') else: + old_world.spoiler.unreachables = sphere_candidates.copy() break # in the second phase, we cull each sphere such that the game is still beatable, reducing each range of influence to the bare minimum required inside it @@ -336,7 +436,6 @@ def create_playthrough(world): logging.getLogger('').debug('Checking if %s (Player %d) is required to beat the game.', location.item.name, location.item.player) old_item = location.item location.item = None - state.remove(old_item) if world.can_beat_game(state_cache[num]): to_delete.append(location) else: @@ -347,6 +446,14 @@ def create_playthrough(world): for location in to_delete: sphere.remove(location) + # second phase, sphere 0 + for item in [i for i in world.precollected_items if i.advancement]: + logging.getLogger('').debug('Checking if %s (Player %d) is required to beat the game.', item.name, item.player) + world.precollected_items.remove(item) + world.state.remove(item) + if not world.can_beat_game(): + world.push_precollected(item) + # we are now down to just the required progress items in collection_spheres. Unfortunately # the previous pruning stage could potentially have made certain items dependant on others # in the same or later sphere (because the location had 2 ways to access but the item originally @@ -357,8 +464,7 @@ def create_playthrough(world): state = CollectionState(world) collection_spheres = [] while required_locations: - if not world.keysanity: - state.sweep_for_events(key_only=True) + state.sweep_for_events(key_only=True) sphere = list(filter(state.can_reach, required_locations)) @@ -393,10 +499,12 @@ def create_playthrough(world): old_world.spoiler.paths.update({ str(location) : get_path(state, location.parent_region) for sphere in collection_spheres for location in sphere if location.player == player}) for _, path in dict(old_world.spoiler.paths).items(): if any(exit == 'Pyramid Fairy' for (_, exit) in path): - if world.mode != 'inverted': + if world.mode[player] != 'inverted': old_world.spoiler.paths[str(world.get_region('Big Bomb Shop', player))] = get_path(state, world.get_region('Big Bomb Shop', player)) else: old_world.spoiler.paths[str(world.get_region('Inverted Big Bomb Shop', player))] = get_path(state, world.get_region('Inverted Big Bomb Shop', player)) # we can finally output our playthrough - old_world.spoiler.playthrough = OrderedDict([(str(i + 1), {str(location): str(location.item) for location in sphere}) for i, sphere in enumerate(collection_spheres)]) + old_world.spoiler.playthrough = OrderedDict([("0", [str(item) for item in world.precollected_items if item.advancement])]) + for i, sphere in enumerate(collection_spheres): + old_world.spoiler.playthrough[str(i + 1)] = {str(location): str(location.item) for location in sphere} diff --git a/ModuleUpdate.py b/ModuleUpdate.py new file mode 100644 index 00000000..abae05c4 --- /dev/null +++ b/ModuleUpdate.py @@ -0,0 +1,50 @@ +import os +import sys +import subprocess +import importlib + +update_ran = hasattr(sys, "frozen") and getattr(sys, "frozen") # don't run update if environment is frozen/compiled + + +def update_command(): + subprocess.call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt', '--upgrade']) + + +naming_specialties = {"PyYAML": "yaml"} # PyYAML is imported as the name yaml + + +def update(): + global update_ran + if not update_ran: + update_ran = True + path = os.path.join(os.path.dirname(sys.argv[0]), 'requirements.txt') + if not os.path.exists(path): + os.path.join(os.path.dirname(__file__), 'requirements.txt') + with open(path) as requirementsfile: + for line in requirementsfile.readlines(): + module, remote_version = line.split(">=") + module = naming_specialties.get(module, module) + try: + module = importlib.import_module(module) + except: + import traceback + traceback.print_exc() + input(f'Required python module {module} not found, press enter to install it') + update_command() + return + else: + if hasattr(module, "__version__"): + module_version = module.__version__ + module = module.__name__ # also unloads the module to make it writable + if type(module_version) == str: + module_version = tuple(int(part.strip()) for part in module_version.split(".")) + remote_version = tuple(int(part.strip()) for part in remote_version.split(".")) + if module_version < remote_version: + input(f'Required python module {module} is outdated ({module_version}<{remote_version}),' + ' press enter to upgrade it') + update_command() + return + + +if __name__ == "__main__": + update() diff --git a/MultiClient.py b/MultiClient.py new file mode 100644 index 00000000..e4bf3a03 --- /dev/null +++ b/MultiClient.py @@ -0,0 +1,1041 @@ +import argparse +import asyncio +import json +import logging +import typing +import urllib.parse +import atexit + + +exit_func = atexit.register(input, "Press enter to close.") + +import ModuleUpdate + +ModuleUpdate.update() + +import colorama +import websockets +import prompt_toolkit +from prompt_toolkit.patch_stdout import patch_stdout + +import Items +import Regions +import Utils + + +class ReceivedItem(typing.NamedTuple): + item: int + location: int + player: int + +class Context: + def __init__(self, snes_address, server_address, password, found_items): + self.snes_address = snes_address + self.server_address = server_address + + self.exit_event = asyncio.Event() + self.watcher_event = asyncio.Event() + + self.input_queue = asyncio.Queue() + self.input_requests = 0 + + self.snes_socket = None + self.snes_state = SNES_DISCONNECTED + self.snes_attached_device = None + self.snes_reconnect_address = None + self.snes_recv_queue = asyncio.Queue() + self.snes_request_lock = asyncio.Lock() + self.is_sd2snes = False + self.snes_write_buffer = [] + + self.server_task = None + self.socket = None + self.password = password + + self.team = None + self.slot = None + self.player_names = {} + self.locations_checked = set() + self.locations_scouted = set() + self.items_received = [] + self.locations_info = {} + self.awaiting_rom = False + self.rom = None + self.auth = None + self.found_items = found_items + + +color_codes = {'reset': 0, 'bold': 1, 'underline': 4, 'black': 30, 'red': 31, 'green': 32, 'yellow': 33, 'blue': 34, + 'magenta': 35, 'cyan': 36, 'white': 37, 'black_bg': 40, 'red_bg': 41, 'green_bg': 42, 'yellow_bg': 43, + 'blue_bg': 44, 'purple_bg': 45, 'cyan_bg': 46, 'white_bg': 47} + + +def color_code(*args): + return '\033[' + ';'.join([str(color_codes[arg]) for arg in args]) + 'm' + + +def color(text, *args): + return color_code(*args) + text + color_code('reset') + + +RECONNECT_DELAY = 5 + +ROM_START = 0x000000 +WRAM_START = 0xF50000 +WRAM_SIZE = 0x20000 +SRAM_START = 0xE00000 + +ROMNAME_START = SRAM_START + 0x2000 +ROMNAME_SIZE = 0x15 + +INGAME_MODES = {0x07, 0x09, 0x0b} + +SAVEDATA_START = WRAM_START + 0xF000 +SAVEDATA_SIZE = 0x500 + +RECV_PROGRESS_ADDR = SAVEDATA_START + 0x4D0 # 2 bytes +RECV_ITEM_ADDR = SAVEDATA_START + 0x4D2 # 1 byte +RECV_ITEM_PLAYER_ADDR = SAVEDATA_START + 0x4D3 # 1 byte +ROOMID_ADDR = SAVEDATA_START + 0x4D4 # 2 bytes +ROOMDATA_ADDR = SAVEDATA_START + 0x4D6 # 1 byte +SCOUT_LOCATION_ADDR = SAVEDATA_START + 0x4D7 # 1 byte +SCOUTREPLY_LOCATION_ADDR = SAVEDATA_START + 0x4D8 # 1 byte +SCOUTREPLY_ITEM_ADDR = SAVEDATA_START + 0x4D9 # 1 byte +SCOUTREPLY_PLAYER_ADDR = SAVEDATA_START + 0x4DA # 1 byte + +location_table_uw = {"Blind's Hideout - Top": (0x11d, 0x10), + "Blind's Hideout - Left": (0x11d, 0x20), + "Blind's Hideout - Right": (0x11d, 0x40), + "Blind's Hideout - Far Left": (0x11d, 0x80), + "Blind's Hideout - Far Right": (0x11d, 0x100), + 'Secret Passage': (0x55, 0x10), + 'Waterfall Fairy - Left': (0x114, 0x10), + 'Waterfall Fairy - Right': (0x114, 0x20), + "King's Tomb": (0x113, 0x10), + 'Floodgate Chest': (0x10b, 0x10), + "Link's House": (0x104, 0x10), + 'Kakariko Tavern': (0x103, 0x10), + 'Chicken House': (0x108, 0x10), + "Aginah's Cave": (0x10a, 0x10), + "Sahasrahla's Hut - Left": (0x105, 0x10), + "Sahasrahla's Hut - Middle": (0x105, 0x20), + "Sahasrahla's Hut - Right": (0x105, 0x40), + 'Kakariko Well - Top': (0x2f, 0x10), + 'Kakariko Well - Left': (0x2f, 0x20), + 'Kakariko Well - Middle': (0x2f, 0x40), + 'Kakariko Well - Right': (0x2f, 0x80), + 'Kakariko Well - Bottom': (0x2f, 0x100), + 'Lost Woods Hideout': (0xe1, 0x200), + 'Lumberjack Tree': (0xe2, 0x200), + 'Cave 45': (0x11b, 0x400), + 'Graveyard Cave': (0x11b, 0x200), + 'Checkerboard Cave': (0x126, 0x200), + 'Mini Moldorm Cave - Far Left': (0x123, 0x10), + 'Mini Moldorm Cave - Left': (0x123, 0x20), + 'Mini Moldorm Cave - Right': (0x123, 0x40), + 'Mini Moldorm Cave - Far Right': (0x123, 0x80), + 'Mini Moldorm Cave - Generous Guy': (0x123, 0x400), + 'Ice Rod Cave': (0x120, 0x10), + 'Bonk Rock Cave': (0x124, 0x10), + 'Desert Palace - Big Chest': (0x73, 0x10), + 'Desert Palace - Torch': (0x73, 0x400), + 'Desert Palace - Map Chest': (0x74, 0x10), + 'Desert Palace - Compass Chest': (0x85, 0x10), + 'Desert Palace - Big Key Chest': (0x75, 0x10), + 'Desert Palace - Boss': (0x33, 0x800), + 'Eastern Palace - Compass Chest': (0xa8, 0x10), + 'Eastern Palace - Big Chest': (0xa9, 0x10), + 'Eastern Palace - Cannonball Chest': (0xb9, 0x10), + 'Eastern Palace - Big Key Chest': (0xb8, 0x10), + 'Eastern Palace - Map Chest': (0xaa, 0x10), + 'Eastern Palace - Boss': (0xc8, 0x800), + 'Hyrule Castle - Boomerang Chest': (0x71, 0x10), + 'Hyrule Castle - Map Chest': (0x72, 0x10), + "Hyrule Castle - Zelda's Chest": (0x80, 0x10), + 'Sewers - Dark Cross': (0x32, 0x10), + 'Sewers - Secret Room - Left': (0x11, 0x10), + 'Sewers - Secret Room - Middle': (0x11, 0x20), + 'Sewers - Secret Room - Right': (0x11, 0x40), + 'Sanctuary': (0x12, 0x10), + 'Castle Tower - Room 03': (0xe0, 0x10), + 'Castle Tower - Dark Maze': (0xd0, 0x10), + 'Spectacle Rock Cave': (0xea, 0x400), + 'Paradox Cave Lower - Far Left': (0xef, 0x10), + 'Paradox Cave Lower - Left': (0xef, 0x20), + 'Paradox Cave Lower - Right': (0xef, 0x40), + 'Paradox Cave Lower - Far Right': (0xef, 0x80), + 'Paradox Cave Lower - Middle': (0xef, 0x100), + 'Paradox Cave Upper - Left': (0xff, 0x10), + 'Paradox Cave Upper - Right': (0xff, 0x20), + 'Spiral Cave': (0xfe, 0x10), + 'Tower of Hera - Basement Cage': (0x87, 0x400), + 'Tower of Hera - Map Chest': (0x77, 0x10), + 'Tower of Hera - Big Key Chest': (0x87, 0x10), + 'Tower of Hera - Compass Chest': (0x27, 0x20), + 'Tower of Hera - Big Chest': (0x27, 0x10), + 'Tower of Hera - Boss': (0x7, 0x800), + 'Hype Cave - Top': (0x11e, 0x10), + 'Hype Cave - Middle Right': (0x11e, 0x20), + 'Hype Cave - Middle Left': (0x11e, 0x40), + 'Hype Cave - Bottom': (0x11e, 0x80), + 'Hype Cave - Generous Guy': (0x11e, 0x400), + 'Peg Cave': (0x127, 0x400), + 'Pyramid Fairy - Left': (0x116, 0x10), + 'Pyramid Fairy - Right': (0x116, 0x20), + 'Brewery': (0x106, 0x10), + 'C-Shaped House': (0x11c, 0x10), + 'Chest Game': (0x106, 0x400), + 'Mire Shed - Left': (0x10d, 0x10), + 'Mire Shed - Right': (0x10d, 0x20), + 'Superbunny Cave - Top': (0xf8, 0x10), + 'Superbunny Cave - Bottom': (0xf8, 0x20), + 'Spike Cave': (0x117, 0x10), + 'Hookshot Cave - Top Right': (0x3c, 0x10), + 'Hookshot Cave - Top Left': (0x3c, 0x20), + 'Hookshot Cave - Bottom Right': (0x3c, 0x80), + 'Hookshot Cave - Bottom Left': (0x3c, 0x40), + 'Mimic Cave': (0x10c, 0x10), + 'Swamp Palace - Entrance': (0x28, 0x10), + 'Swamp Palace - Map Chest': (0x37, 0x10), + 'Swamp Palace - Big Chest': (0x36, 0x10), + 'Swamp Palace - Compass Chest': (0x46, 0x10), + 'Swamp Palace - Big Key Chest': (0x35, 0x10), + 'Swamp Palace - West Chest': (0x34, 0x10), + 'Swamp Palace - Flooded Room - Left': (0x76, 0x10), + 'Swamp Palace - Flooded Room - Right': (0x76, 0x20), + 'Swamp Palace - Waterfall Room': (0x66, 0x10), + 'Swamp Palace - Boss': (0x6, 0x800), + "Thieves' Town - Big Key Chest": (0xdb, 0x20), + "Thieves' Town - Map Chest": (0xdb, 0x10), + "Thieves' Town - Compass Chest": (0xdc, 0x10), + "Thieves' Town - Ambush Chest": (0xcb, 0x10), + "Thieves' Town - Attic": (0x65, 0x10), + "Thieves' Town - Big Chest": (0x44, 0x10), + "Thieves' Town - Blind's Cell": (0x45, 0x10), + "Thieves' Town - Boss": (0xac, 0x800), + 'Skull Woods - Compass Chest': (0x67, 0x10), + 'Skull Woods - Map Chest': (0x58, 0x20), + 'Skull Woods - Big Chest': (0x58, 0x10), + 'Skull Woods - Pot Prison': (0x57, 0x20), + 'Skull Woods - Pinball Room': (0x68, 0x10), + 'Skull Woods - Big Key Chest': (0x57, 0x10), + 'Skull Woods - Bridge Room': (0x59, 0x10), + 'Skull Woods - Boss': (0x29, 0x800), + 'Ice Palace - Compass Chest': (0x2e, 0x10), + 'Ice Palace - Freezor Chest': (0x7e, 0x10), + 'Ice Palace - Big Chest': (0x9e, 0x10), + 'Ice Palace - Iced T Room': (0xae, 0x10), + 'Ice Palace - Spike Room': (0x5f, 0x10), + 'Ice Palace - Big Key Chest': (0x1f, 0x10), + 'Ice Palace - Map Chest': (0x3f, 0x10), + 'Ice Palace - Boss': (0xde, 0x800), + 'Misery Mire - Big Chest': (0xc3, 0x10), + 'Misery Mire - Map Chest': (0xc3, 0x20), + 'Misery Mire - Main Lobby': (0xc2, 0x10), + 'Misery Mire - Bridge Chest': (0xa2, 0x10), + 'Misery Mire - Spike Chest': (0xb3, 0x10), + 'Misery Mire - Compass Chest': (0xc1, 0x10), + 'Misery Mire - Big Key Chest': (0xd1, 0x10), + 'Misery Mire - Boss': (0x90, 0x800), + 'Turtle Rock - Compass Chest': (0xd6, 0x10), + 'Turtle Rock - Roller Room - Left': (0xb7, 0x10), + 'Turtle Rock - Roller Room - Right': (0xb7, 0x20), + 'Turtle Rock - Chain Chomps': (0xb6, 0x10), + 'Turtle Rock - Big Key Chest': (0x14, 0x10), + 'Turtle Rock - Big Chest': (0x24, 0x10), + 'Turtle Rock - Crystaroller Room': (0x4, 0x10), + 'Turtle Rock - Eye Bridge - Bottom Left': (0xd5, 0x80), + 'Turtle Rock - Eye Bridge - Bottom Right': (0xd5, 0x40), + 'Turtle Rock - Eye Bridge - Top Left': (0xd5, 0x20), + 'Turtle Rock - Eye Bridge - Top Right': (0xd5, 0x10), + 'Turtle Rock - Boss': (0xa4, 0x800), + 'Palace of Darkness - Shooter Room': (0x9, 0x10), + 'Palace of Darkness - The Arena - Bridge': (0x2a, 0x20), + 'Palace of Darkness - Stalfos Basement': (0xa, 0x10), + 'Palace of Darkness - Big Key Chest': (0x3a, 0x10), + 'Palace of Darkness - The Arena - Ledge': (0x2a, 0x10), + 'Palace of Darkness - Map Chest': (0x2b, 0x10), + 'Palace of Darkness - Compass Chest': (0x1a, 0x20), + 'Palace of Darkness - Dark Basement - Left': (0x6a, 0x10), + 'Palace of Darkness - Dark Basement - Right': (0x6a, 0x20), + 'Palace of Darkness - Dark Maze - Top': (0x19, 0x10), + 'Palace of Darkness - Dark Maze - Bottom': (0x19, 0x20), + 'Palace of Darkness - Big Chest': (0x1a, 0x10), + 'Palace of Darkness - Harmless Hellway': (0x1a, 0x40), + 'Palace of Darkness - Boss': (0x5a, 0x800), + "Ganons Tower - Bob's Torch": (0x8c, 0x400), + 'Ganons Tower - Hope Room - Left': (0x8c, 0x20), + 'Ganons Tower - Hope Room - Right': (0x8c, 0x40), + 'Ganons Tower - Tile Room': (0x8d, 0x10), + 'Ganons Tower - Compass Room - Top Left': (0x9d, 0x10), + 'Ganons Tower - Compass Room - Top Right': (0x9d, 0x20), + 'Ganons Tower - Compass Room - Bottom Left': (0x9d, 0x40), + 'Ganons Tower - Compass Room - Bottom Right': (0x9d, 0x80), + 'Ganons Tower - DMs Room - Top Left': (0x7b, 0x10), + 'Ganons Tower - DMs Room - Top Right': (0x7b, 0x20), + 'Ganons Tower - DMs Room - Bottom Left': (0x7b, 0x40), + 'Ganons Tower - DMs Room - Bottom Right': (0x7b, 0x80), + 'Ganons Tower - Map Chest': (0x8b, 0x10), + 'Ganons Tower - Firesnake Room': (0x7d, 0x10), + 'Ganons Tower - Randomizer Room - Top Left': (0x7c, 0x10), + 'Ganons Tower - Randomizer Room - Top Right': (0x7c, 0x20), + 'Ganons Tower - Randomizer Room - Bottom Left': (0x7c, 0x40), + 'Ganons Tower - Randomizer Room - Bottom Right': (0x7c, 0x80), + "Ganons Tower - Bob's Chest": (0x8c, 0x80), + 'Ganons Tower - Big Chest': (0x8c, 0x10), + 'Ganons Tower - Big Key Room - Left': (0x1c, 0x20), + 'Ganons Tower - Big Key Room - Right': (0x1c, 0x40), + 'Ganons Tower - Big Key Chest': (0x1c, 0x10), + 'Ganons Tower - Mini Helmasaur Room - Left': (0x3d, 0x10), + 'Ganons Tower - Mini Helmasaur Room - Right': (0x3d, 0x20), + 'Ganons Tower - Pre-Moldorm Chest': (0x3d, 0x40), + 'Ganons Tower - Validation Chest': (0x4d, 0x10)} +location_table_npc = {'Mushroom': 0x1000, + 'King Zora': 0x2, + 'Sahasrahla': 0x10, + 'Blacksmith': 0x400, + 'Magic Bat': 0x8000, + 'Sick Kid': 0x4, + 'Library': 0x80, + 'Potion Shop': 0x2000, + 'Old Man': 0x1, + 'Ether Tablet': 0x100, + 'Catfish': 0x20, + 'Stumpy': 0x8, + 'Bombos Tablet': 0x200} +location_table_ow = {'Flute Spot': 0x2a, + 'Sunken Treasure': 0x3b, + "Zora's Ledge": 0x81, + 'Lake Hylia Island': 0x35, + 'Maze Race': 0x28, + 'Desert Ledge': 0x30, + 'Master Sword Pedestal': 0x80, + 'Spectacle Rock': 0x3, + 'Pyramid': 0x5b, + 'Digging Game': 0x68, + 'Bumper Cave Ledge': 0x4a, + 'Floating Island': 0x5} +location_table_misc = {'Bottle Merchant': (0x3c9, 0x2), + 'Purple Chest': (0x3c9, 0x10), + "Link's Uncle": (0x3c6, 0x1), + 'Hobo': (0x3c9, 0x1)} + +SNES_DISCONNECTED = 0 +SNES_CONNECTING = 1 +SNES_CONNECTED = 2 +SNES_ATTACHED = 3 + +async def snes_connect(ctx : Context, address): + if ctx.snes_socket is not None: + logging.error('Already connected to snes') + return + + ctx.snes_state = SNES_CONNECTING + recv_task = None + + address = f"ws://{address}" if "://" not in address else address + + logging.info("Connecting to QUsb2snes at %s ..." % address) + seen_problems = set() + while ctx.snes_state == SNES_CONNECTING: + try: + ctx.snes_socket = await websockets.connect(address, ping_timeout=None, ping_interval=None) + except Exception as e: + problem = "%s" % e + # only tell the user about new problems, otherwise silently lay in wait for a working connection + if problem not in seen_problems: + seen_problems.add(problem) + logging.error(f"Error connecting to QUsb2snes ({problem})") + await asyncio.sleep(1) + else: + ctx.snes_state = SNES_CONNECTED + try: + DeviceList_Request = { + "Opcode": "DeviceList", + "Space": "SNES" + } + await ctx.snes_socket.send(json.dumps(DeviceList_Request)) + + reply = json.loads(await ctx.snes_socket.recv()) + devices = reply['Results'] if 'Results' in reply and len(reply['Results']) > 0 else None + + if not devices: + logging.info('No device found, waiting for device. Run multibridge and connect it to QUSB2SNES.') + while not devices: + await asyncio.sleep(1) + await ctx.snes_socket.send(json.dumps(DeviceList_Request)) + reply = json.loads(await ctx.snes_socket.recv()) + devices = reply['Results'] if 'Results' in reply and len(reply['Results']) > 0 else None + + logging.info("Available devices:") + for id, device in enumerate(devices): + logging.info("[%d] %s" % (id + 1, device)) + + device = None + if len(devices) == 1: + device = devices[0] + elif ctx.snes_reconnect_address: + if ctx.snes_attached_device[1] in devices: + device = ctx.snes_attached_device[1] + else: + device = devices[ctx.snes_attached_device[0]] + else: + while True: + logging.info("Select a device:") + choice = await console_input(ctx) + if choice is None: + raise Exception('Abort input') + if not choice.isdigit() or int(choice) < 1 or int(choice) > len(devices): + logging.warning("Invalid choice (%s)" % choice) + continue + + device = devices[int(choice) - 1] + break + + logging.info("Attaching to " + device) + + Attach_Request = { + "Opcode" : "Attach", + "Space" : "SNES", + "Operands" : [device] + } + await ctx.snes_socket.send(json.dumps(Attach_Request)) + ctx.snes_state = SNES_ATTACHED + ctx.snes_attached_device = (devices.index(device), device) + + if 'SD2SNES'.lower() in device.lower() or (len(device) == 4 and device[:3] == 'COM'): + logging.info("SD2SNES Detected") + ctx.is_sd2snes = True + await ctx.snes_socket.send(json.dumps({"Opcode" : "Info", "Space" : "SNES"})) + reply = json.loads(await ctx.snes_socket.recv()) + if reply and 'Results' in reply: + logging.info(reply['Results']) + else: + ctx.is_sd2snes = False + + ctx.snes_reconnect_address = address + recv_task = asyncio.create_task(snes_recv_loop(ctx)) + + except Exception as e: + if recv_task is not None: + if not ctx.snes_socket.closed: + await ctx.snes_socket.close() + else: + if ctx.snes_socket is not None: + if not ctx.snes_socket.closed: + await ctx.snes_socket.close() + ctx.snes_socket = None + ctx.snes_state = SNES_DISCONNECTED + if not ctx.snes_reconnect_address: + logging.error("Error connecting to snes (%s)" % e) + else: + logging.error(f"Error connecting to snes, attempt again in {RECONNECT_DELAY}s") + asyncio.create_task(snes_autoreconnect(ctx)) + + +async def snes_autoreconnect(ctx: Context): + # unfortunately currently broken. See: https://github.com/prompt-toolkit/python-prompt-toolkit/issues/1033 + # with prompt_toolkit.shortcuts.ProgressBar() as pb: + # for _ in pb(range(100)): + # await asyncio.sleep(RECONNECT_DELAY/100) + await asyncio.sleep(RECONNECT_DELAY) + if ctx.snes_reconnect_address and ctx.snes_socket is None: + await snes_connect(ctx, ctx.snes_reconnect_address) + +async def snes_recv_loop(ctx : Context): + try: + async for msg in ctx.snes_socket: + ctx.snes_recv_queue.put_nowait(msg) + logging.warning("Snes disconnected") + except Exception as e: + if not isinstance(e, websockets.WebSocketException): + logging.exception(e) + logging.error("Lost connection to the snes, type /snes to reconnect") + finally: + socket, ctx.snes_socket = ctx.snes_socket, None + if socket is not None and not socket.closed: + await socket.close() + + ctx.snes_state = SNES_DISCONNECTED + ctx.snes_recv_queue = asyncio.Queue() + ctx.hud_message_queue = [] + + ctx.rom = None + + if ctx.snes_reconnect_address: + logging.info(f"...reconnecting in {RECONNECT_DELAY}s") + asyncio.create_task(snes_autoreconnect(ctx)) + +async def snes_read(ctx : Context, address, size): + try: + await ctx.snes_request_lock.acquire() + + if ctx.snes_state != SNES_ATTACHED or ctx.snes_socket is None or not ctx.snes_socket.open or ctx.snes_socket.closed: + return None + + GetAddress_Request = { + "Opcode" : "GetAddress", + "Space" : "SNES", + "Operands" : [hex(address)[2:], hex(size)[2:]] + } + try: + await ctx.snes_socket.send(json.dumps(GetAddress_Request)) + except websockets.ConnectionClosed: + return None + + data = bytes() + while len(data) < size: + try: + data += await asyncio.wait_for(ctx.snes_recv_queue.get(), 5) + except asyncio.TimeoutError: + break + + if len(data) != size: + logging.error('Error reading %s, requested %d bytes, received %d' % (hex(address), size, len(data))) + if len(data): + logging.error(str(data)) + if ctx.snes_socket is not None and not ctx.snes_socket.closed: + await ctx.snes_socket.close() + return None + + return data + finally: + ctx.snes_request_lock.release() + +async def snes_write(ctx : Context, write_list): + try: + await ctx.snes_request_lock.acquire() + + if ctx.snes_state != SNES_ATTACHED or ctx.snes_socket is None or not ctx.snes_socket.open or ctx.snes_socket.closed: + return False + + PutAddress_Request = { + "Opcode" : "PutAddress", + "Operands" : [] + } + + if ctx.is_sd2snes: + cmd = b'\x00\xE2\x20\x48\xEB\x48' + + for address, data in write_list: + if (address < WRAM_START) or ((address + len(data)) > (WRAM_START + WRAM_SIZE)): + logging.error("SD2SNES: Write out of range %s (%d)" % (hex(address), len(data))) + return False + for ptr, byte in enumerate(data, address + 0x7E0000 - WRAM_START): + cmd += b'\xA9' # LDA + cmd += bytes([byte]) + cmd += b'\x8F' # STA.l + cmd += bytes([ptr & 0xFF, (ptr >> 8) & 0xFF, (ptr >> 16) & 0xFF]) + + cmd += b'\xA9\x00\x8F\x00\x2C\x00\x68\xEB\x68\x28\x6C\xEA\xFF\x08' + + PutAddress_Request['Space'] = 'CMD' + PutAddress_Request['Operands'] = ["2C00", hex(len(cmd)-1)[2:], "2C00", "1"] + try: + if ctx.snes_socket is not None: + await ctx.snes_socket.send(json.dumps(PutAddress_Request)) + if ctx.snes_socket is not None: + await ctx.snes_socket.send(cmd) + except websockets.ConnectionClosed: + return False + else: + PutAddress_Request['Space'] = 'SNES' + try: + #will pack those requests as soon as qusb2snes actually supports that for real + for address, data in write_list: + PutAddress_Request['Operands'] = [hex(address)[2:], hex(len(data))[2:]] + if ctx.snes_socket is not None: + await ctx.snes_socket.send(json.dumps(PutAddress_Request)) + if ctx.snes_socket is not None: + await ctx.snes_socket.send(data) + except websockets.ConnectionClosed: + return False + + return True + finally: + ctx.snes_request_lock.release() + +def snes_buffered_write(ctx : Context, address, data): + if len(ctx.snes_write_buffer) > 0 and (ctx.snes_write_buffer[-1][0] + len(ctx.snes_write_buffer[-1][1])) == address: + ctx.snes_write_buffer[-1] = (ctx.snes_write_buffer[-1][0], ctx.snes_write_buffer[-1][1] + data) + else: + ctx.snes_write_buffer.append((address, data)) + +async def snes_flush_writes(ctx : Context): + if not ctx.snes_write_buffer: + return + + await snes_write(ctx, ctx.snes_write_buffer) + ctx.snes_write_buffer = [] + +async def send_msgs(websocket, msgs): + if not websocket or not websocket.open or websocket.closed: + return + try: + await websocket.send(json.dumps(msgs)) + except websockets.ConnectionClosed: + pass + +async def server_loop(ctx : Context, address = None): + if ctx.socket is not None: + logging.error('Already connected') + return + + if address is None: + address = ctx.server_address + + while not address: + logging.info('Enter multiworld server address') + address = await console_input(ctx) + + address = f"ws://{address}" if "://" not in address else address + port = urllib.parse.urlparse(address).port or 38281 + + logging.info('Connecting to multiworld server at %s' % address) + try: + ctx.socket = await websockets.connect(address, port=port, ping_timeout=None, ping_interval=None) + logging.info('Connected') + ctx.server_address = address + + async for data in ctx.socket: + for msg in json.loads(data): + cmd, args = (msg[0], msg[1]) if len(msg) > 1 else (msg, None) + await process_server_cmd(ctx, cmd, args) + logging.warning('Disconnected from multiworld server, type /connect to reconnect') + except ConnectionRefusedError: + logging.error('Connection refused by the multiworld server') + except (OSError, websockets.InvalidURI): + logging.error('Failed to connect to the multiworld server') + except Exception as e: + logging.error('Lost connection to the multiworld server, type /connect to reconnect') + if not isinstance(e, websockets.WebSocketException): + logging.exception(e) + finally: + ctx.awaiting_rom = False + ctx.auth = None + ctx.items_received = [] + ctx.locations_info = {} + socket, ctx.socket = ctx.socket, None + if socket is not None and not socket.closed: + await socket.close() + ctx.server_task = None + if ctx.server_address: + logging.info(f"... reconnecting in {RECONNECT_DELAY}s") + asyncio.create_task(server_autoreconnect(ctx)) + + +async def server_autoreconnect(ctx: Context): + # unfortunately currently broken. See: https://github.com/prompt-toolkit/python-prompt-toolkit/issues/1033 + # with prompt_toolkit.shortcuts.ProgressBar() as pb: + # for _ in pb(range(100)): + # await asyncio.sleep(RECONNECT_DELAY/100) + await asyncio.sleep(RECONNECT_DELAY) + if ctx.server_address and ctx.server_task is None: + ctx.server_task = asyncio.create_task(server_loop(ctx)) + +async def process_server_cmd(ctx : Context, cmd, args): + if cmd == 'RoomInfo': + logging.info('--------------------------------') + logging.info('Room Information:') + logging.info('--------------------------------') + version = args.get("version", "unknown Bonta Protocol") + if not type(version) == 'str': + version = ".".join(str(item) for item in version) + logging.info(f'Server protocol version: {version}') + if "tags" in args: + logging.info("Server protocol tags: " + ", ".join(args["tags"])) + if args['password']: + logging.info('Password required') + if len(args['players']) < 1: + logging.info('No player connected') + else: + args['players'].sort() + current_team = -1 + logging.info('Connected players:') + for team, slot, name in args['players']: + if team != current_team: + logging.info(f' Team #{team + 1}') + current_team = team + logging.info(' %s (Player %d)' % (name, slot)) + await server_auth(ctx, args['password']) + + elif cmd == 'ConnectionRefused': + if 'InvalidPassword' in args: + logging.error('Invalid password') + ctx.password = None + await server_auth(ctx, True) + if 'InvalidRom' in args: + ctx.snes_state = SNES_DISCONNECTED + ctx.rom = None + raise Exception( + 'Invalid ROM detected, please verify that you have loaded the correct rom and reconnect your snes (/snes)') + if 'SlotAlreadyTaken' in args: + raise Exception('Player slot already in use for that team') + if 'IncompatibleVersion' in args: + raise Exception('Server reported your client version as incompatible') + raise Exception('Connection refused by the multiworld host') + + elif cmd == 'Connected': + ctx.team, ctx.slot = args[0] + ctx.player_names = {p: n for p, n in args[1]} + msgs = [] + if ctx.locations_checked: + msgs.append(['LocationChecks', [Regions.location_table[loc][0] for loc in ctx.locations_checked]]) + if ctx.locations_scouted: + msgs.append(['LocationScouts', list(ctx.locations_scouted)]) + if msgs: + await send_msgs(ctx.socket, msgs) + + elif cmd == 'ReceivedItems': + start_index, items = args + if start_index == 0: + ctx.items_received = [] + elif start_index != len(ctx.items_received): + sync_msg = [['Sync']] + if ctx.locations_checked: + sync_msg.append(['LocationChecks', [Regions.location_table[loc][0] for loc in ctx.locations_checked]]) + await send_msgs(ctx.socket, sync_msg) + if start_index == len(ctx.items_received): + for item in items: + ctx.items_received.append(ReceivedItem(*item)) + ctx.watcher_event.set() + + elif cmd == 'LocationInfo': + for location, item, player in args: + if location not in ctx.locations_info: + replacements = {0xA2: 'Small Key', 0x9D: 'Big Key', 0x8D: 'Compass', 0x7D: 'Map'} + item_name = replacements.get(item, get_item_name_from_id(item)) + logging.info( + f"Saw {color(item_name, 'red', 'bold')} at {list(Regions.location_table.keys())[location - 1]}") + ctx.locations_info[location] = (item, player) + ctx.watcher_event.set() + + elif cmd == 'ItemSent': + player_sent, location, player_recvd, item = args + item = color(get_item_name_from_id(item), 'cyan' if player_sent != ctx.slot else 'green') + player_sent = color(ctx.player_names[player_sent], 'yellow' if player_sent != ctx.slot else 'magenta') + player_recvd = color(ctx.player_names[player_recvd], 'yellow' if player_recvd != ctx.slot else 'magenta') + logging.info( + '%s sent %s to %s (%s)' % (player_sent, item, player_recvd, get_location_name_from_address(location))) + + elif cmd == 'ItemFound': + found = ReceivedItem(*args) + item = color(get_item_name_from_id(found.item), 'cyan' if found.player != ctx.slot else 'green') + player_sent = color(ctx.player_names[found.player], 'yellow' if found.player != ctx.slot else 'magenta') + logging.info('%s found %s (%s)' % (player_sent, item, get_location_name_from_address(found.location))) + + elif cmd == 'Hint': + hints = [Utils.Hint(*hint) for hint in args] + for hint in hints: + item = color(get_item_name_from_id(hint.item), 'green' if hint.found else 'cyan') + player_find = color(ctx.player_names[hint.finding_player], + 'yellow' if hint.finding_player != ctx.slot else 'magenta') + player_recvd = color(ctx.player_names[hint.receiving_player], + 'yellow' if hint.receiving_player != ctx.slot else 'magenta') + logging.info(f"[Hint]: {player_recvd}'s {item} can be found " + f"at {get_location_name_from_address(hint.location)} in {player_find}'s World." + + (" (found)" if hint.found else "")) + elif cmd == 'Print': + logging.info(args) + +def get_tags(ctx: Context): + tags = ['Berserker'] + if ctx.found_items: + tags.append('FoundItems') + return tags + +async def server_auth(ctx: Context, password_requested): + if password_requested and not ctx.password: + logging.info('Enter the password required to join this game:') + ctx.password = await console_input(ctx) + if ctx.rom is None: + ctx.awaiting_rom = True + logging.info('No ROM detected, awaiting snes connection to authenticate to the multiworld server (/snes)') + return + ctx.awaiting_rom = False + ctx.auth = ctx.rom.copy() + await send_msgs(ctx.socket, [['Connect', { + 'password': ctx.password, 'rom': ctx.auth, 'version': [1, 2, 0], 'tags': get_tags(ctx) + }]]) + +async def console_input(ctx : Context): + ctx.input_requests += 1 + return await ctx.input_queue.get() + +async def disconnect(ctx: Context): + if ctx.socket is not None and not ctx.socket.closed: + await ctx.socket.close() + if ctx.server_task is not None: + await ctx.server_task + +async def connect(ctx: Context, address=None): + await disconnect(ctx) + ctx.server_task = asyncio.create_task(server_loop(ctx, address)) + + +async def console_loop(ctx : Context): + session = prompt_toolkit.PromptSession() + while not ctx.exit_event.is_set(): + try: + with patch_stdout(): + input_text = await session.prompt_async() + + if ctx.input_requests > 0: + ctx.input_requests -= 1 + ctx.input_queue.put_nowait(input_text) + continue + + command = input_text.split() + if not command: + continue + + if command[0][:1] != '/': + asyncio.create_task(send_msgs(ctx.socket, [['Say', input_text]])) + continue + + precommand = command[0][1:] + + if precommand == 'exit': + ctx.exit_event.set() + + elif precommand == 'snes': + ctx.snes_reconnect_address = None + asyncio.create_task(snes_connect(ctx, command[1] if len(command) > 1 else ctx.snes_address)) + + elif precommand in {'snes_close', 'snes_quit'}: + ctx.snes_reconnect_address = None + if ctx.snes_socket is not None and not ctx.snes_socket.closed: + await ctx.snes_socket.close() + + elif precommand in {'connect', 'reconnect'}: + ctx.server_address = None + asyncio.create_task(connect(ctx, command[1] if len(command) > 1 else None)) + + elif precommand == 'disconnect': + ctx.server_address = None + asyncio.create_task(disconnect(ctx)) + + + elif precommand == 'received': + logging.info('Received items:') + for index, item in enumerate(ctx.items_received, 1): + logging.info('%s from %s (%s) (%d/%d in list)' % ( + color(get_item_name_from_id(item.item), 'red', 'bold'), + color(ctx.player_names[item.player], 'yellow'), + get_location_name_from_address(item.location), index, len(ctx.items_received))) + + elif precommand == 'missing': + for location in [k for k, v in Regions.location_table.items() if type(v[0]) is int]: + if location not in ctx.locations_checked: + logging.info('Missing: ' + location) + + elif precommand == "show_items": + if len(command) > 1: + ctx.found_items = command[1].lower() in {"1", "true", "on"} + else: + ctx.found_items = not ctx.found_items + logging.info(f"Set showing team items to {ctx.found_items}") + asyncio.create_task(send_msgs(ctx.socket, [['UpdateTags', get_tags(ctx)]])) + + elif precommand == "license": + with open("LICENSE") as f: + logging.info(f.read()) + except Exception as e: + logging.exception(e) + await snes_flush_writes(ctx) + +def get_item_name_from_id(code): + return Items.lookup_id_to_name.get(code, f'Unknown item (ID:{code})') + +def get_location_name_from_address(address): + return Regions.lookup_id_to_name.get(address, f'Unknown location (ID:{address})') + +async def track_locations(ctx : Context, roomid, roomdata): + new_locations = [] + def new_check(location): + ctx.locations_checked.add(location) + logging.info("New check: %s (%d/216)" % (location, len(ctx.locations_checked))) + new_locations.append(Regions.location_table[location][0]) + + for location, (loc_roomid, loc_mask) in location_table_uw.items(): + if location not in ctx.locations_checked and loc_roomid == roomid and (roomdata << 4) & loc_mask != 0: + new_check(location) + + uw_begin = 0x129 + uw_end = 0 + uw_unchecked = {} + for location, (roomid, mask) in location_table_uw.items(): + if location not in ctx.locations_checked: + uw_unchecked[location] = (roomid, mask) + uw_begin = min(uw_begin, roomid) + uw_end = max(uw_end, roomid + 1) + if uw_begin < uw_end: + uw_data = await snes_read(ctx, SAVEDATA_START + (uw_begin * 2), (uw_end - uw_begin) * 2) + if uw_data is not None: + for location, (roomid, mask) in uw_unchecked.items(): + offset = (roomid - uw_begin) * 2 + roomdata = uw_data[offset] | (uw_data[offset + 1] << 8) + if roomdata & mask != 0: + new_check(location) + + ow_begin = 0x82 + ow_end = 0 + ow_unchecked = {} + for location, screenid in location_table_ow.items(): + if location not in ctx.locations_checked: + ow_unchecked[location] = screenid + ow_begin = min(ow_begin, screenid) + ow_end = max(ow_end, screenid + 1) + if ow_begin < ow_end: + ow_data = await snes_read(ctx, SAVEDATA_START + 0x280 + ow_begin, ow_end - ow_begin) + if ow_data is not None: + for location, screenid in ow_unchecked.items(): + if ow_data[screenid - ow_begin] & 0x40 != 0: + new_check(location) + + if not all([location in ctx.locations_checked for location in location_table_npc.keys()]): + npc_data = await snes_read(ctx, SAVEDATA_START + 0x410, 2) + if npc_data is not None: + npc_value = npc_data[0] | (npc_data[1] << 8) + for location, mask in location_table_npc.items(): + if npc_value & mask != 0 and location not in ctx.locations_checked: + new_check(location) + + if not all([location in ctx.locations_checked for location in location_table_misc.keys()]): + misc_data = await snes_read(ctx, SAVEDATA_START + 0x3c6, 4) + if misc_data is not None: + for location, (offset, mask) in location_table_misc.items(): + assert(0x3c6 <= offset <= 0x3c9) + if misc_data[offset - 0x3c6] & mask != 0 and location not in ctx.locations_checked: + new_check(location) + + await send_msgs(ctx.socket, [['LocationChecks', new_locations]]) + +async def game_watcher(ctx : Context): + while not ctx.exit_event.is_set(): + try: + await asyncio.wait_for(ctx.watcher_event.wait(), 2) + except asyncio.TimeoutError: + pass + ctx.watcher_event.clear() + + if not ctx.rom: + rom = await snes_read(ctx, ROMNAME_START, ROMNAME_SIZE) + if rom is None or rom == bytes([0] * ROMNAME_SIZE): + continue + + ctx.rom = list(rom) + ctx.locations_checked = set() + ctx.locations_scouted = set() + if ctx.awaiting_rom: + await server_auth(ctx, False) + + if ctx.auth and ctx.auth != ctx.rom: + logging.warning("ROM change detected, please reconnect to the multiworld server") + await disconnect(ctx) + + gamemode = await snes_read(ctx, WRAM_START + 0x10, 1) + if gamemode is None or gamemode[0] not in INGAME_MODES: + continue + + data = await snes_read(ctx, RECV_PROGRESS_ADDR, 8) + if data is None: + continue + + recv_index = data[0] | (data[1] << 8) + assert RECV_ITEM_ADDR == RECV_PROGRESS_ADDR + 2 + recv_item = data[2] + assert ROOMID_ADDR == RECV_PROGRESS_ADDR + 4 + roomid = data[4] | (data[5] << 8) + assert ROOMDATA_ADDR == RECV_PROGRESS_ADDR + 6 + roomdata = data[6] + assert SCOUT_LOCATION_ADDR == RECV_PROGRESS_ADDR + 7 + scout_location = data[7] + + if recv_index < len(ctx.items_received) and recv_item == 0: + item = ctx.items_received[recv_index] + logging.info('Received %s from %s (%s) (%d/%d in list)' % ( + color(get_item_name_from_id(item.item), 'red', 'bold'), color(ctx.player_names[item.player], 'yellow'), + get_location_name_from_address(item.location), recv_index + 1, len(ctx.items_received))) + recv_index += 1 + snes_buffered_write(ctx, RECV_PROGRESS_ADDR, bytes([recv_index & 0xFF, (recv_index >> 8) & 0xFF])) + snes_buffered_write(ctx, RECV_ITEM_ADDR, bytes([item.item])) + snes_buffered_write(ctx, RECV_ITEM_PLAYER_ADDR, bytes([item.player if item.player != ctx.slot else 0])) + if scout_location > 0 and scout_location in ctx.locations_info: + snes_buffered_write(ctx, SCOUTREPLY_LOCATION_ADDR, bytes([scout_location])) + snes_buffered_write(ctx, SCOUTREPLY_ITEM_ADDR, bytes([ctx.locations_info[scout_location][0]])) + snes_buffered_write(ctx, SCOUTREPLY_PLAYER_ADDR, bytes([ctx.locations_info[scout_location][1]])) + + await snes_flush_writes(ctx) + + if scout_location > 0 and scout_location not in ctx.locations_scouted: + ctx.locations_scouted.add(scout_location) + logging.info(f'Scouting item at {list(Regions.location_table.keys())[scout_location - 1]}') + await send_msgs(ctx.socket, [['LocationScouts', [scout_location]]]) + await track_locations(ctx, roomid, roomdata) + + +async def run_game(romfile): + import webbrowser + webbrowser.open(romfile) + + +async def main(): + parser = argparse.ArgumentParser() + parser.add_argument('diff_file', default="", type=str, nargs="?", + help='Path to a Berserker Multiworld Binary Patch file') + parser.add_argument('--snes', default='localhost:8080', help='Address of the QUsb2snes server.') + parser.add_argument('--connect', default=None, help='Address of the multiworld host.') + parser.add_argument('--password', default=None, help='Password of the multiworld host.') + parser.add_argument('--loglevel', default='info', choices=['debug', 'info', 'warning', 'error', 'critical']) + parser.add_argument('--founditems', default=False, action='store_true', help='Show items found by other players for themselves.') + args = parser.parse_args() + + logging.basicConfig(format='%(message)s', level=getattr(logging, args.loglevel.upper(), logging.INFO)) + + if args.diff_file: + import Patch + meta, romfile = Patch.create_rom_file(args.diff_file) + args.connect = meta["server"] + logging.info(f"Wrote rom file to {romfile}") + asyncio.create_task(run_game(romfile)) + + ctx = Context(args.snes, args.connect, args.password, args.founditems) + + input_task = asyncio.create_task(console_loop(ctx)) + + await snes_connect(ctx, ctx.snes_address) + + if ctx.server_task is None: + ctx.server_task = asyncio.create_task(server_loop(ctx)) + + watcher_task = asyncio.create_task(game_watcher(ctx)) + + + await ctx.exit_event.wait() + ctx.server_address = None + ctx.snes_reconnect_address = None + + await watcher_task + + if ctx.socket is not None and not ctx.socket.closed: + await ctx.socket.close() + if ctx.server_task is not None: + await ctx.server_task + + if ctx.snes_socket is not None and not ctx.snes_socket.closed: + await ctx.snes_socket.close() + + while ctx.input_requests > 0: + ctx.input_queue.put_nowait(None) + ctx.input_requests -= 1 + + await input_task + +if __name__ == '__main__': + colorama.init() + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + loop.close() + colorama.deinit() + atexit.unregister(exit_func) diff --git a/MultiMystery.py b/MultiMystery.py new file mode 100644 index 00000000..961afe78 --- /dev/null +++ b/MultiMystery.py @@ -0,0 +1,182 @@ +__author__ = "Berserker55" # you can find me on the ALTTP Randomizer Discord + +""" +This script launches a Multiplayer "Multiworld" Mystery Game + +.yaml files for all participating players should be placed in a /Players folder. +For every player a mystery game is rolled and a ROM created. +After generation the server is automatically launched. +It is still up to the host to forward the correct port (38281 by default) and distribute the roms to the players. +Regular Mystery has to work for this first, such as a ALTTP Base ROM and Enemizer Setup. +A guide can be found here: https://docs.google.com/document/d/19FoqUkuyStMqhOq8uGiocskMo1KMjOW4nEeG81xrKoI/edit +Configuration can be found in host.yaml +""" + +import os +import subprocess +import sys + +def feedback(text:str): + print(text) + input("Press Enter to ignore and probably crash.") + + +if __name__ == "__main__": + try: + print(f"{__author__}'s MultiMystery Launcher") + import ModuleUpdate + + ModuleUpdate.update() + + + from Utils import get_public_ipv4, get_options + + from Patch import create_patch_file + + options = get_options() + + multi_mystery_options = options["multi_mystery_options"] + output_path = multi_mystery_options["output_path"] + enemizer_path = multi_mystery_options["enemizer_path"] + player_files_path = multi_mystery_options["player_files_path"] + race = multi_mystery_options["race"] + create_spoiler = multi_mystery_options["create_spoiler"] + zip_roms = multi_mystery_options["zip_roms"] + zip_diffs = multi_mystery_options["zip_diffs"] + zip_spoiler = multi_mystery_options["zip_spoiler"] + zip_multidata = multi_mystery_options["zip_multidata"] + zip_format = multi_mystery_options["zip_format"] + #zip_password = multi_mystery_options["zip_password"] not at this time + player_name = multi_mystery_options["player_name"] + meta_file_path = multi_mystery_options["meta_file_path"] + teams = multi_mystery_options["teams"] + rom_file = options["general_options"]["rom_file"] + host = options["server_options"]["host"] + port = options["server_options"]["port"] + + + py_version = f"{sys.version_info.major}.{sys.version_info.minor}" + + if not os.path.exists(enemizer_path): + feedback(f"Enemizer not found at {enemizer_path}, please adjust the path in MultiMystery.py's config or put Enemizer in the default location.") + if not os.path.exists(rom_file): + feedback(f"Base rom is expected as {rom_file} in the Multiworld root folder please place/rename it there.") + player_files = [] + os.makedirs(player_files_path, exist_ok=True) + for file in os.listdir(player_files_path): + lfile = file.lower() + if lfile.endswith(".yaml") and lfile != meta_file_path.lower(): + player_files.append(file) + print(f"Found player's file {file}.") + player_count = len(player_files) + if player_count == 0: + feedback(f"No player files found. Please put them in a {player_files_path} folder.") + else: + print(player_count, "Players found.") + + player_string = "" + for i, file in enumerate(player_files, 1): + player_string += f"--p{i} {os.path.join(player_files_path, file)} " + + + if os.path.exists("BerserkerMultiServer.exe"): + basemysterycommand = "BerserkerMystery.exe" #compiled windows + elif os.path.exists("BerserkerMultiServer"): + basemysterycommand = "BerserkerMystery" # compiled linux + else: + basemysterycommand = f"py -{py_version} Mystery.py" #source + + command = f"{basemysterycommand} --multi {len(player_files)} {player_string} " \ + f"--rom \"{rom_file}\" --enemizercli \"{enemizer_path}\" " \ + f"--outputpath \"{output_path}\" --teams {teams}" + + if create_spoiler: + command += " --create_spoiler" + if race: + command += " --race" + if os.path.exists(os.path.join(player_files_path, meta_file_path)): + command += f" --meta {os.path.join(player_files_path, meta_file_path)}" + + print(command) + import time + start = time.perf_counter() + text = subprocess.check_output(command, shell=True).decode() + print(f"Took {time.perf_counter()-start:.3f} seconds to generate rom(s).") + seedname = "" + + for segment in text.split(): + if segment.startswith("M"): + seedname = segment + break + + multidataname = f"ER_{seedname}_multidata" + spoilername = f"ER_{seedname}_Spoiler.txt" + romfilename = "" + + if player_name: + for file in os.listdir(output_path): + if player_name in file: + import webbrowser + + romfilename = os.path.join(output_path, file) + print(f"Launching ROM file {romfilename}") + webbrowser.open(romfilename) + break + + if any((zip_roms, zip_multidata, zip_spoiler, zip_diffs)): + import zipfile + compression = {1 : zipfile.ZIP_DEFLATED, + 2 : zipfile.ZIP_LZMA, + 3 : zipfile.ZIP_BZIP2}[zip_format] + + typical_zip_ending = {1: "zip", + 2: "7z", + 3: "bz2"}[zip_format] + + def pack_file(file: str): + zf.write(os.path.join(output_path, file), file) + print(f"Packed {file} into zipfile {zipname}") + + def remove_zipped_file(file: str): + os.remove(os.path.join(output_path, file)) + print(f"Removed {file} which is now present in the zipfile") + + zipname = os.path.join(output_path, f"ER_{seedname}.{typical_zip_ending}") + + print(f"Creating zipfile {zipname}") + ipv4 = (host if host else get_public_ipv4()) + ":" + str(port) + with zipfile.ZipFile(zipname, "w", compression=compression, compresslevel=9) as zf: + for file in os.listdir(output_path): + if file.endswith(".sfc") and seedname in file: + if zip_diffs: + diff = os.path.split(create_patch_file(os.path.join(output_path, file), ipv4))[1] + pack_file(diff) + if zip_diffs == 2: + remove_zipped_file(diff) + if zip_roms: + pack_file(file) + if zip_roms == 2 and player_name.lower() not in file.lower(): + remove_zipped_file(file) + if zip_multidata and os.path.exists(os.path.join(output_path, multidataname)): + pack_file(multidataname) + if zip_multidata == 2: + remove_zipped_file(multidataname) + if zip_spoiler and create_spoiler: + pack_file(spoilername) + if zip_spoiler == 2: + remove_zipped_file(spoilername) + + if os.path.exists(os.path.join(output_path, multidataname)): + if os.path.exists("BerserkerMultiServer.exe"): + baseservercommand = "BerserkerMultiServer.exe" # compiled windows + elif os.path.exists("BerserkerMultiServer"): + baseservercommand = "BerserkerMultiServer" # compiled linux + else: + baseservercommand = f"py -{py_version} MultiServer.py" # source + #don't have a mac to test that. If you try to run compiled on mac, good luck. + + subprocess.call(f"{baseservercommand} --multidata {os.path.join(output_path, multidataname)}") + except: + import traceback + traceback.print_exc() + input("Press enter to close") diff --git a/MultiServer.py b/MultiServer.py new file mode 100644 index 00000000..79778564 --- /dev/null +++ b/MultiServer.py @@ -0,0 +1,705 @@ +import argparse +import asyncio +import functools +import json +import logging +import zlib +import collections +import typing + +import ModuleUpdate + +ModuleUpdate.update() + +import websockets +import prompt_toolkit +from prompt_toolkit.patch_stdout import patch_stdout +from fuzzywuzzy import process as fuzzy_process + +import Items +import Regions +import Utils +from MultiClient import ReceivedItem, get_item_name_from_id, get_location_name_from_address + +console_names = frozenset(set(Items.item_table) | set(Regions.location_table)) + + +class Client: + version: typing.List[int] = [0, 0, 0] + tags: typing.List[str] = [] + + def __init__(self, socket: websockets.server.WebSocketServerProtocol): + self.socket = socket + self.auth = False + self.name = None + self.team = None + self.slot = None + self.send_index = 0 + self.tags = [] + self.version = [0, 0, 0] + + @property + def wants_item_notification(self): + return self.auth and "FoundItems" in self.tags + + +class Context: + def __init__(self, host: str, port: int, password: str, location_check_points: int, hint_cost: int, + item_cheat: bool): + self.data_filename = None + self.save_filename = None + self.disable_save = False + self.player_names = {} + self.rom_names = {} + self.remote_items = set() + self.locations = {} + self.host = host + self.port = port + self.password = password + self.server = None + self.countdown_timer = 0 + self.clients = [] + self.received_items = {} + self.location_checks = collections.defaultdict(set) + self.hint_cost = hint_cost + self.location_check_points = location_check_points + self.hints_used = collections.defaultdict(int) + self.hints_sent = collections.defaultdict(set) + self.item_cheat = item_cheat + + def get_save(self) -> dict: + return { + "rom_names": list(self.rom_names.items()), + "received_items": tuple((k, v) for k, v in self.received_items.items()), + "hints_used" : tuple((key,value) for key, value in self.hints_used.items()), + "hints_sent" : tuple((key,tuple(value)) for key, value in self.hints_sent.items()), + "location_checks" : tuple((key,tuple(value)) for key, value in self.location_checks.items()) + } + + def set_save(self, savedata: dict): + rom_names = savedata["rom_names"] + received_items = {tuple(k): [ReceivedItem(*i) for i in v] for k, v in savedata["received_items"]} + if not all([self.rom_names[tuple(rom)] == (team, slot) for rom, (team, slot) in rom_names]): + raise Exception('Save file mismatch, will start a new game') + self.received_items = received_items + self.hints_used.update({tuple(key): value for key, value in savedata["hints_used"]}) + self.hints_sent.update({tuple(key): set(value) for key, value in savedata["hints_sent"]}) + self.location_checks.update({tuple(key): set(value) for key, value in savedata["location_checks"]}) + logging.info(f'Loaded save file with {sum([len(p) for p in received_items.values()])} received items ' + f'for {len(received_items)} players') + + +async def send_msgs(websocket, msgs): + if not websocket or not websocket.open or websocket.closed: + return + try: + await websocket.send(json.dumps(msgs)) + except websockets.ConnectionClosed: + pass + +def broadcast_all(ctx : Context, msgs): + for client in ctx.clients: + if client.auth: + asyncio.create_task(send_msgs(client.socket, msgs)) + +def broadcast_team(ctx : Context, team, msgs): + for client in ctx.clients: + if client.auth and client.team == team: + asyncio.create_task(send_msgs(client.socket, msgs)) + +def notify_all(ctx : Context, text): + logging.info("Notice (all): %s" % text) + broadcast_all(ctx, [['Print', text]]) + + +def notify_team(ctx: Context, team: int, text: str): + logging.info("Notice (Team #%d): %s" % (team + 1, text)) + broadcast_team(ctx, team, [['Print', text]]) + + +def notify_client(client: Client, text: str): + if not client.auth: + return + logging.info("Notice (Player %s in team %d): %s" % (client.name, client.team + 1, text)) + asyncio.create_task(send_msgs(client.socket, [['Print', text]])) + + +# separated out, due to compatibilty between client's +def notify_hints(ctx: Context, team: int, hints: typing.List[Utils.Hint]): + cmd = [["Hint", hints]] + texts = [['Print', format_hint(ctx, team, hint)] for hint in hints] + for _, text in texts: + logging.info("Notice (Team #%d): %s" % (team + 1, text)) + for client in ctx.clients: + if client.auth and client.team == team: + if "Berserker" in client.tags: + payload = cmd + else: + payload = texts + asyncio.create_task(send_msgs(client.socket, payload)) + +async def server(websocket, path, ctx: Context): + client = Client(websocket) + ctx.clients.append(client) + + try: + await on_client_connected(ctx, client) + async for data in websocket: + for msg in json.loads(data): + if len(msg) == 1: + cmd = msg + args = None + else: + cmd = msg[0] + args = msg[1] + await process_client_cmd(ctx, client, cmd, args) + except Exception as e: + if not isinstance(e, websockets.WebSocketException): + logging.exception(e) + finally: + await on_client_disconnected(ctx, client) + ctx.clients.remove(client) + +async def on_client_connected(ctx: Context, client: Client): + await send_msgs(client.socket, [['RoomInfo', { + 'password': ctx.password is not None, + 'players': [(client.team, client.slot, client.name) for client in ctx.clients if client.auth], + # tags are for additional features in the communication. + # Name them by feature or fork, as you feel is appropriate. + 'tags': ['Berserker'], + 'version': [1, 2, 0] + }]]) + +async def on_client_disconnected(ctx: Context, client: Client): + if client.auth: + await on_client_left(ctx, client) + +async def on_client_joined(ctx: Context, client: Client): + notify_all(ctx, "%s (Team #%d) has joined the game. Client(%s, %s)." % (client.name, client.team + 1, + ".".join(str(x) for x in client.version), + client.tags)) + +async def on_client_left(ctx: Context, client: Client): + notify_all(ctx, "%s (Team #%d) has left the game" % (client.name, client.team + 1)) + +async def countdown(ctx: Context, timer): + notify_all(ctx, f'[Server]: Starting countdown of {timer}s') + if ctx.countdown_timer: + ctx.countdown_timer = timer # timer is already running, set it to a different time + else: + ctx.countdown_timer = timer + while ctx.countdown_timer > 0: + notify_all(ctx, f'[Server]: {ctx.countdown_timer}') + ctx.countdown_timer -= 1 + await asyncio.sleep(1) + notify_all(ctx, f'[Server]: GO') + +def get_connected_players_string(ctx: Context): + auth_clients = {(c.team, c.slot) for c in ctx.clients if c.auth} + + player_names = sorted(ctx.player_names.keys()) + current_team = -1 + text = '' + for team, slot in player_names: + player_name = ctx.player_names[team, slot] + if team != current_team: + text += f':: Team #{team + 1}: ' + current_team = team + if (team, slot) in auth_clients: + text += f'{player_name} ' + else: + text += f'({player_name}) ' + return f'{len(auth_clients)} players of {len(ctx.player_names)} connected ' + text[:-1] + + +def get_received_items(ctx: Context, team: int, player: int) -> typing.List[ReceivedItem]: + return ctx.received_items.setdefault((team, player), []) + + +def tuplize_received_items(items): + return [(item.item, item.location, item.player) for item in items] + + +def send_new_items(ctx: Context): + for client in ctx.clients: + if not client.auth: + continue + items = get_received_items(ctx, client.team, client.slot) + if len(items) > client.send_index: + asyncio.create_task(send_msgs(client.socket, [['ReceivedItems', (client.send_index, tuplize_received_items(items)[client.send_index:])]])) + client.send_index = len(items) + + +def forfeit_player(ctx: Context, team: int, slot: int): + all_locations = {values[0] for values in Regions.location_table.values() if type(values[0]) is int} + notify_all(ctx, "%s (Team #%d) has forfeited" % (ctx.player_names[(team, slot)], team + 1)) + register_location_checks(ctx, team, slot, all_locations) + + +def register_location_checks(ctx: Context, team: int, slot: int, locations): + found_items = False + for location in locations: + if (location, slot) in ctx.locations: + target_item, target_player = ctx.locations[(location, slot)] + if target_player != slot or slot in ctx.remote_items: + found = False + recvd_items = get_received_items(ctx, team, target_player) + for recvd_item in recvd_items: + if recvd_item.location == location and recvd_item.player == slot: + found = True + break + + if not found: + new_item = ReceivedItem(target_item, location, slot) + recvd_items.append(new_item) + if slot != target_player: + broadcast_team(ctx, team, [['ItemSent', (slot, location, target_player, target_item)]]) + logging.info('(Team #%d) %s sent %s to %s (%s)' % ( + team + 1, ctx.player_names[(team, slot)], get_item_name_from_id(target_item), + ctx.player_names[(team, target_player)], get_location_name_from_address(location))) + found_items = True + elif target_player == slot: # local pickup, notify clients of the pickup + if location not in ctx.location_checks[team, slot]: + for client in ctx.clients: + if client.team == team and client.wants_item_notification: + asyncio.create_task( + send_msgs(client.socket, [['ItemFound', (target_item, location, slot)]])) + ctx.location_checks[team, slot] |= set(locations) + send_new_items(ctx) + + if found_items: + save(ctx) + + +def save(ctx: Context): + if not ctx.disable_save: + try: + jsonstr = json.dumps(ctx.get_save()) + with open(ctx.save_filename, "wb") as f: + f.write(zlib.compress(jsonstr.encode("utf-8"))) + except Exception as e: + logging.exception(e) + + +def collect_hints(ctx: Context, team: int, slot: int, item: str) -> typing.List[Utils.Hint]: + hints = [] + seeked_item_id = Items.item_table[item][3] + for check, result in ctx.locations.items(): + item_id, receiving_player = result + if receiving_player == slot and item_id == seeked_item_id: + location_id, finding_player = check + found = location_id in ctx.location_checks[team, finding_player] + hints.append(Utils.Hint(receiving_player, finding_player, location_id, item_id, found)) + + return hints + + +def collect_hints_location(ctx: Context, team: int, slot: int, location: str) -> typing.List[Utils.Hint]: + hints = [] + seeked_location = Regions.location_table[location][0] + for check, result in ctx.locations.items(): + location_id, finding_player = check + if finding_player == slot and location_id == seeked_location: + item_id, receiving_player = result + found = location_id in ctx.location_checks[team, finding_player] + hints.append(Utils.Hint(receiving_player, finding_player, location_id, item_id, found)) + break # each location has 1 item + return hints + + +def format_hint(ctx: Context, team: int, hint: Utils.Hint) -> str: + return f"[Hint]: {ctx.player_names[team, hint.receiving_player]}'s " \ + f"{Items.lookup_id_to_name[hint.item]} can be found " \ + f"at {get_location_name_from_address(hint.location)} " \ + f"in {ctx.player_names[team, hint.finding_player]}'s World." \ + + (" (found)" if hint.found else "") + + +def get_intended_text(input_text: str, possible_answers: typing.Iterable[str]= console_names) -> typing.Tuple[str, bool, str]: + picks = fuzzy_process.extract(input_text, possible_answers, limit=2) + dif = picks[0][1] - picks[1][1] + if picks[0][1] == 100: + return picks[0][0], True, "Perfect Match" + elif picks[0][1] < 75: + return picks[0][0], False, f"Didn't find something that closely matches, did you mean {picks[0][0]}?" + elif dif > 5: + return picks[0][0], True, "Close Match" + else: + return picks[0][0], False, f"Too many close matches, did you mean {picks[0][0]}?" + + +async def process_client_cmd(ctx: Context, client: Client, cmd, args): + if type(cmd) is not str: + await send_msgs(client.socket, [['InvalidCmd']]) + return + + if cmd == 'Connect': + if not args or type(args) is not dict or \ + 'password' not in args or type(args['password']) not in [str, type(None)] or \ + 'rom' not in args or type(args['rom']) is not list: + await send_msgs(client.socket, [['InvalidArguments', 'Connect']]) + return + + errors = set() + if ctx.password is not None and args['password'] != ctx.password: + errors.add('InvalidPassword') + + if tuple(args['rom']) not in ctx.rom_names: + errors.add('InvalidRom') + else: + team, slot = ctx.rom_names[tuple(args['rom'])] + if any([c.slot == slot and c.team == team for c in ctx.clients if c.auth]): + errors.add('SlotAlreadyTaken') + else: + client.name = ctx.player_names[(team, slot)] + client.team = team + client.slot = slot + + if errors: + await send_msgs(client.socket, [['ConnectionRefused', list(errors)]]) + else: + client.auth = True + client.version = args.get('version', Client.version) + client.tags = args.get('tags', Client.tags) + reply = [['Connected', [(client.team, client.slot), + [(p, n) for (t, p), n in ctx.player_names.items() if t == client.team]]]] + items = get_received_items(ctx, client.team, client.slot) + if items: + reply.append(['ReceivedItems', (0, tuplize_received_items(items))]) + client.send_index = len(items) + await send_msgs(client.socket, reply) + await on_client_joined(ctx, client) + + if not client.auth: + return + + if cmd == 'Sync': + items = get_received_items(ctx, client.team, client.slot) + if items: + client.send_index = len(items) + await send_msgs(client.socket, [['ReceivedItems', (0, tuplize_received_items(items))]]) + + if cmd == 'LocationChecks': + if type(args) is not list: + await send_msgs(client.socket, [['InvalidArguments', 'LocationChecks']]) + return + register_location_checks(ctx, client.team, client.slot, args) + + if cmd == 'LocationScouts': + if type(args) is not list: + await send_msgs(client.socket, [['InvalidArguments', 'LocationScouts']]) + return + locs = [] + for location in args: + if type(location) is not int or 0 >= location > len(Regions.location_table): + await send_msgs(client.socket, [['InvalidArguments', 'LocationScouts']]) + return + loc_name = list(Regions.location_table.keys())[location - 1] + target_item, target_player = ctx.locations[(Regions.location_table[loc_name][0], client.slot)] + + replacements = {'SmallKey': 0xA2, 'BigKey': 0x9D, 'Compass': 0x8D, 'Map': 0x7D} + item_type = [i[2] for i in Items.item_table.values() if type(i[3]) is int and i[3] == target_item] + if item_type: + target_item = replacements.get(item_type[0], target_item) + + locs.append([loc_name, location, target_item, target_player]) + + logging.info(f"{client.name} in team {client.team+1} scouted {', '.join([l[0] for l in locs])}") + await send_msgs(client.socket, [['LocationInfo', [l[1:] for l in locs]]]) + + if cmd == 'UpdateTags': + if not args or type(args) is not list: + await send_msgs(client.socket, [['InvalidArguments', 'UpdateTags']]) + return + client.tags = args + + if cmd == 'Say': + if type(args) is not str or not args.isprintable(): + await send_msgs(client.socket, [['InvalidArguments', 'Say']]) + return + + notify_all(ctx, client.name + ': ' + args) + + if args.startswith('!players'): + notify_all(ctx, get_connected_players_string(ctx)) + elif args.startswith('!forfeit'): + forfeit_player(ctx, client.team, client.slot) + elif args.startswith('!countdown'): + try: + timer = int(args.split()[1]) + except (IndexError, ValueError): + timer = 10 + asyncio.create_task(countdown(ctx, timer)) + elif args.startswith('!getitem') and ctx.item_cheat: + item_name = args[9:].lower() + item_name, usable, response = get_intended_text(item_name, Items.item_table.keys()) + if usable: + new_item = ReceivedItem(Items.item_table[item_name][3], -1, client.slot) + get_received_items(ctx, client.team, client.slot).append(new_item) + notify_all(ctx, 'Cheat console: sending "' + item_name + '" to ' + client.name) + send_new_items(ctx) + else: + notify_client(client, response) + elif args.startswith("!hint"): + points_available = ctx.location_check_points * len(ctx.location_checks[client.team, client.slot]) - \ + ctx.hint_cost * ctx.hints_used[client.team, client.slot] + item_name = args[6:] + + if not item_name: + notify_client(client, "Use !hint {item_name/location_name}, " + "for example !hint Lamp or !hint Link's House. " + f"A hint costs {ctx.hint_cost} points. " + f"You have {points_available} points.") + for item_name in ctx.hints_sent[client.team, client.slot]: + if item_name in Items.item_table: # item name + hints = collect_hints(ctx, client.team, client.slot, item_name) + else: # location name + hints = collect_hints_location(ctx, client.team, client.slot, item_name) + notify_hints(ctx, client.team, hints) + else: + item_name, usable, response = get_intended_text(item_name) + if usable: + if item_name in Items.hint_blacklist: + notify_client(client, f"Sorry, \"{item_name}\" is marked as non-hintable.") + hints = [] + elif item_name in Items.item_table: # item name + hints = collect_hints(ctx, client.team, client.slot, item_name) + else: # location name + hints = collect_hints_location(ctx, client.team, client.slot, item_name) + + if hints: + if item_name in ctx.hints_sent[client.team, client.slot]: + notify_hints(ctx, client.team, hints) + notify_client(client, "Hint was previously used, no points deducted.") + else: + found = 0 + for hint in hints: + found += 1 - hint.found + if not found: + notify_hints(ctx, client.team, hints) + notify_client(client, "No new items found, no points deducted.") + else: + if ctx.hint_cost: + can_pay = points_available // (ctx.hint_cost * found) >= 1 + else: + can_pay = True + + if can_pay: + ctx.hints_used[client.team, client.slot] += found + ctx.hints_sent[client.team, client.slot].add(item_name) + notify_hints(ctx, client.team, hints) + save(ctx) + else: + notify_client(client, f"You can't afford the hint. " + f"You have {points_available} points and need at least {ctx.hint_cost}, " + f"more if multiple items are still to be found.") + else: + notify_client(client, "Nothing found. Item/Location may not exist.") + else: + notify_client(client, response) + + +def set_password(ctx : Context, password): + ctx.password = password + logging.warning('Password set to ' + password if password else 'Password disabled') + + +async def console(ctx: Context): + session = prompt_toolkit.PromptSession() + running = True + while running: + with patch_stdout(): + input_text = await session.prompt_async() + try: + + command = input_text.split() + if not command: + continue + + if command[0] == '/exit': + await ctx.server.ws_server._close() + running = False + + if command[0] == '/players': + logging.info(get_connected_players_string(ctx)) + if command[0] == '/password': + set_password(ctx, command[1] if len(command) > 1 else None) + if command[0] == '/kick' and len(command) > 1: + team = int(command[2]) - 1 if len(command) > 2 and command[2].isdigit() else None + for client in ctx.clients: + if client.auth and client.name.lower() == command[1].lower() and (team is None or team == client.team): + if client.socket and not client.socket.closed: + await client.socket.close() + + if command[0] == '/forfeitslot' and len(command) > 1 and command[1].isdigit(): + if len(command) > 2 and command[2].isdigit(): + team = int(command[1]) - 1 + slot = int(command[2]) + else: + team = 0 + slot = int(command[1]) + forfeit_player(ctx, team, slot) + if command[0] == '/forfeitplayer' and len(command) > 1: + seeked_player = command[1].lower() + for (team, slot), name in ctx.player_names.items(): + if name.lower() == seeked_player: + forfeit_player(ctx, team, slot) + if command[0] == '/senditem': + if len(command) <= 2: + logging.info("Use /senditem {Playername} {itemname}\nFor example /senditem Berserker Lamp") + else: + seeked_player, usable, response = get_intended_text(command[1], ctx.player_names.values()) + if usable: + item = " ".join(command[2:]) + item, usable, response = get_intended_text(item, Items.item_table.keys()) + if usable: + for client in ctx.clients: + if client.name == seeked_player: + new_item = ReceivedItem(Items.item_table[item][3], -1, client.slot) + get_received_items(ctx, client.team, client.slot).append(new_item) + notify_all(ctx, 'Cheat console: sending "' + item + '" to ' + client.name) + send_new_items(ctx) + else: + logging.warning(response) + else: + logging.warning(response) + if command[0] == '/hint': + if len(command) <= 2: + logging.info("Use /hint {Playername} {itemname/locationname}\nFor example /hint Berserker Lamp") + else: + seeked_player, usable, response = get_intended_text(command[1], ctx.player_names.values()) + if usable: + for (team, slot), name in ctx.player_names.items(): + if name == seeked_player: + item = " ".join(command[2:]) + item, usable, response = get_intended_text(item) + if usable: + if item in Items.item_table: #item name + hints = collect_hints(ctx, team, slot, item) + notify_hints(ctx, team, hints) + else: #location name + hints = collect_hints_location(ctx, team, slot, item) + notify_hints(ctx, team, hints) + else: + logging.warning(response) + else: + logging.warning(response) + + if command[0][0] != '/': + notify_all(ctx, '[Server]: ' + input_text) + except: + import traceback + traceback.print_exc() + + +async def forward_port(port: int): + import upnpy + import socket + + upnp = upnpy.UPnP() + upnp.discover() + device = upnp.get_igd() + + service = device['WANPPPConnection.1'] + + # get own lan IP + ip = socket.gethostbyname(socket.gethostname()) + + # This specific action returns an empty dict: {} + service.AddPortMapping( + NewRemoteHost='', + NewExternalPort=port, + NewProtocol='TCP', + NewInternalPort=port, + NewInternalClient=ip, + NewEnabled=1, + NewPortMappingDescription='Berserker\'s Multiworld', + NewLeaseDuration=60 * 60 * 24 # 24 hours + ) + + logging.info(f"Attempted to forward port {port} to {ip}, your local ip address.") + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + defaults = Utils.get_options()["server_options"] + parser.add_argument('--host', default=defaults["host"]) + parser.add_argument('--port', default=defaults["port"], type=int) + parser.add_argument('--password', default=defaults["password"]) + parser.add_argument('--multidata', default=defaults["multidata"]) + parser.add_argument('--savefile', default=defaults["savefile"]) + parser.add_argument('--disable_save', default=defaults["disable_save"], action='store_true') + parser.add_argument('--loglevel', default=defaults["loglevel"], + choices=['debug', 'info', 'warning', 'error', 'critical']) + parser.add_argument('--location_check_points', default=defaults["location_check_points"], type=int) + parser.add_argument('--hint_cost', default=defaults["hint_cost"], type=int) + parser.add_argument('--disable_item_cheat', default=defaults["disable_item_cheat"], action='store_true') + parser.add_argument('--port_forward', default=defaults["port_forward"], action='store_true') + args = parser.parse_args() + return args + + +async def main(args: argparse.Namespace): + logging.basicConfig(format='[%(asctime)s] %(message)s', level=getattr(logging, args.loglevel.upper(), logging.INFO)) + portforwardtask = None + if args.port_forward: + portforwardtask = asyncio.create_task(forward_port(args.port)) + + ctx = Context(args.host, args.port, args.password, args.location_check_points, args.hint_cost, + not args.disable_item_cheat) + + ctx.data_filename = args.multidata + + try: + if not ctx.data_filename: + import tkinter + import tkinter.filedialog + root = tkinter.Tk() + root.withdraw() + ctx.data_filename = tkinter.filedialog.askopenfilename(filetypes=(("Multiworld data","*multidata"),)) + + with open(ctx.data_filename, 'rb') as f: + jsonobj = json.loads(zlib.decompress(f.read()).decode("utf-8")) + for team, names in enumerate(jsonobj['names']): + for player, name in enumerate(names, 1): + ctx.player_names[(team, player)] = name + ctx.rom_names = {tuple(rom): (team, slot) for slot, team, rom in jsonobj['roms']} + ctx.remote_items = set(jsonobj['remote_items']) + ctx.locations = {tuple(k): tuple(v) for k, v in jsonobj['locations']} + except Exception as e: + logging.error('Failed to read multiworld data (%s)' % e) + return + + ip = args.host if args.host else Utils.get_public_ipv4() + + + + ctx.disable_save = args.disable_save + if not ctx.disable_save: + if not ctx.save_filename: + ctx.save_filename = (ctx.data_filename[:-9] if ctx.data_filename[-9:] == 'multidata' else ( + ctx.data_filename + '_')) + 'multisave' + try: + with open(ctx.save_filename, 'rb') as f: + jsonobj = json.loads(zlib.decompress(f.read()).decode("utf-8")) + ctx.set_save(jsonobj) + except FileNotFoundError: + logging.error('No save data found, starting a new game') + except Exception as e: + logging.exception(e) + if portforwardtask: + try: + await portforwardtask + except: + logging.exception("Automatic port forwarding failed with:") + ctx.server = websockets.serve(functools.partial(server, ctx=ctx), ctx.host, ctx.port, ping_timeout=None, + ping_interval=None) + logging.info('Hosting game at %s:%d (%s)' % (ip, ctx.port, + 'No password' if not ctx.password else 'Password: %s' % ctx.password)) + await ctx.server + await console(ctx) + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main(parse_args())) + loop.close() diff --git a/Mystery.py b/Mystery.py new file mode 100644 index 00000000..114da3db --- /dev/null +++ b/Mystery.py @@ -0,0 +1,304 @@ +import argparse +import logging +import random +import urllib.request +import urllib.parse +import typing +import os + +import ModuleUpdate + +ModuleUpdate.update() + +from Utils import parse_yaml +from Rom import get_sprite_from_name +from EntranceRandomizer import parse_arguments +from Main import main as ERmain + + + +def main(): + parser = argparse.ArgumentParser(add_help=False) + parser.add_argument('--multi', default=1, type=lambda value: min(max(int(value), 1), 255)) + multiargs, _ = parser.parse_known_args() + + parser = argparse.ArgumentParser() + parser.add_argument('--weights', + help='Path to the weights file to use for rolling game settings, urls are also valid') + parser.add_argument('--samesettings', help='Rolls settings per weights file rather than per player', + action='store_true') + parser.add_argument('--seed', help='Define seed number to generate.', type=int) + parser.add_argument('--multi', default=1, type=lambda value: min(max(int(value), 1), 255)) + parser.add_argument('--teams', default=1, type=lambda value: max(int(value), 1)) + parser.add_argument('--create_spoiler', action='store_true') + parser.add_argument('--rom') + parser.add_argument('--enemizercli') + parser.add_argument('--outputpath') + parser.add_argument('--race', action='store_true') + parser.add_argument('--meta', default=None) + + for player in range(1, multiargs.multi + 1): + parser.add_argument(f'--p{player}', help=argparse.SUPPRESS) + args = parser.parse_args() + + if args.seed is None: + random.seed(None) + seed = random.randint(0, 999999999) + else: + seed = args.seed + random.seed(seed) + + seedname = "M"+(f"{random.randint(0, 999999999)}".zfill(9)) + print(f"Generating mystery for {args.multi} player{'s' if args.multi > 1 else ''}, {seedname} Seed {seed}") + + weights_cache = {} + if args.weights: + try: + weights_cache[args.weights] = get_weights(args.weights) + except Exception as e: + raise ValueError(f"File {args.weights} is destroyed. Please fix your yaml.") from e + print(f"Weights: {args.weights} >> {weights_cache[args.weights]['description']}") + if args.meta: + try: + weights_cache[args.meta] = get_weights(args.meta) + except Exception as e: + raise ValueError(f"File {args.meta} is destroyed. Please fix your yaml.") from e + print(f"Meta: {args.meta} >> {weights_cache[args.meta]['meta_description']}") + if args.samesettings: + raise Exception("Cannot mix --samesettings with --meta") + + for player in range(1, args.multi + 1): + path = getattr(args, f'p{player}') + if path: + try: + if path not in weights_cache: + weights_cache[path] = get_weights(path) + print(f"P{player} Weights: {path} >> {weights_cache[path]['description']}") + + except Exception as e: + raise ValueError(f"File {path} is destroyed. Please fix your yaml.") from e + erargs = parse_arguments(['--multi', str(args.multi)]) + erargs.seed = seed + erargs.name = {x: "" for x in range(1, args.multi + 1)} # only so it can be overwrittin in mystery + erargs.create_spoiler = args.create_spoiler + erargs.race = args.race + erargs.outputname = seedname + erargs.outputpath = args.outputpath + erargs.teams = args.teams + + # set up logger + loglevel = {'error': logging.ERROR, 'info': logging.INFO, 'warning': logging.WARNING, 'debug': logging.DEBUG}[erargs.loglevel] + logging.basicConfig(format='%(message)s', level=loglevel) + + if args.rom: + erargs.rom = args.rom + + if args.enemizercli: + erargs.enemizercli = args.enemizercli + + settings_cache = {k: (roll_settings(v) if args.samesettings else None) for k, v in weights_cache.items()} + player_path_cache = {} + for player in range(1, args.multi + 1): + player_path_cache[player] = getattr(args, f'p{player}') if getattr(args, f'p{player}') else args.weights + + if args.meta: + for player, path in player_path_cache.items(): + weights_cache[path].setdefault("meta_ignore", []) + meta_weights = weights_cache[args.meta] + for key in meta_weights: + option = get_choice(key, meta_weights) + if option is not None: + for player, path in player_path_cache.items(): + players_meta = weights_cache[path]["meta_ignore"] + if key not in players_meta: + weights_cache[path][key] = option + elif type(players_meta) == dict and option not in players_meta[key]: + weights_cache[path][key] = option + + for player in range(1, args.multi + 1): + path = player_path_cache[player] + if path: + try: + settings = settings_cache[path] if settings_cache[path] else roll_settings(weights_cache[path]) + if settings.sprite is not None and not os.path.isfile(settings.sprite) and not get_sprite_from_name(settings.sprite): + logging.warning(f"Warning: The chosen sprite, \"{settings.sprite}\", for yaml \"{path}\", does not exist.") + for k, v in vars(settings).items(): + if v is not None: + getattr(erargs, k)[player] = v + except Exception as e: + raise ValueError(f"File {path} is destroyed. Please fix your yaml.") from e + else: + raise RuntimeError(f'No weights specified for player {player}') + if not erargs.name[player]: + erargs.name[player] = os.path.split(path)[-1].split(".")[0] + + erargs.names = ",".join(erargs.name[i] for i in range(1, args.multi + 1)) + del(erargs.name) + + ERmain(erargs, seed) + + +def get_weights(path): + try: + if urllib.parse.urlparse(path).scheme: + yaml = str(urllib.request.urlopen(path).read(), "utf-8") + else: + with open(path, 'rb') as f: + yaml = str(f.read(), "utf-8") + except Exception as e: + print('Failed to read weights (%s)' % e) + return + + return parse_yaml(yaml) + + +def interpret_on_off(value): + return {"on": True, "off": False}.get(value, value) + + +def convert_to_on_off(value): + return {True: "on", False: "off"}.get(value, value) + + +def get_choice(option, root) -> typing.Any: + if option not in root: + return None + if type(root[option]) is not dict: + return interpret_on_off(root[option]) + if not root[option]: + return None + return interpret_on_off( + random.choices(list(root[option].keys()), weights=list(map(int, root[option].values())))[0]) + + +def handle_name(name: str): + return name.strip().replace(' ', '_') + + +def roll_settings(weights): + ret = argparse.Namespace() + ret.name = get_choice('name', weights) + if ret.name: + ret.name = handle_name(ret.name) + glitches_required = get_choice('glitches_required', weights) + if glitches_required not in ['none', 'no_logic']: + logging.warning("Only NMG and No Logic supported") + glitches_required = 'none' + ret.logic = {None: 'noglitches', 'none': 'noglitches', 'no_logic': 'nologic'}[glitches_required] + + # item_placement = get_choice('item_placement') + # not supported in ER + + dungeon_items = get_choice('dungeon_items', weights) + if dungeon_items == 'full' or dungeon_items == True: + dungeon_items = 'mcsb' + elif dungeon_items == 'standard': + dungeon_items = "" + elif not dungeon_items: + dungeon_items = "" + + ret.mapshuffle = get_choice('map_shuffle', weights) if 'map_shuffle' in weights else 'm' in dungeon_items + ret.compassshuffle = get_choice('compass_shuffle', weights) if 'compass_shuffle' in weights else 'c' in dungeon_items + ret.keyshuffle = get_choice('smallkey_shuffle', weights) if 'smallkey_shuffle' in weights else 's' in dungeon_items + ret.bigkeyshuffle = get_choice('bigkey_shuffle', weights) if 'bigkey_shuffle' in weights else 'b' in dungeon_items + + ret.accessibility = get_choice('accessibility', weights) + + entrance_shuffle = get_choice('entrance_shuffle', weights) + ret.shuffle = entrance_shuffle if entrance_shuffle != 'none' else 'vanilla' + + goal = get_choice('goals', weights) + ret.goal = {'ganon': 'ganon', + 'fast_ganon': 'crystals', + 'dungeons': 'dungeons', + 'pedestal': 'pedestal', + 'triforce-hunt': 'triforcehunt' + }[goal] + ret.openpyramid = goal == 'fast_ganon' + + ret.crystals_gt = get_choice('tower_open', weights) + + ret.crystals_ganon = get_choice('ganon_open', weights) + + ret.mode = get_choice('world_state', weights) + if ret.mode == 'retro': + ret.mode = 'open' + ret.retro = True + + ret.hints = get_choice('hints', weights) + + ret.swords = {'randomized': 'random', + 'assured': 'assured', + 'vanilla': 'vanilla', + 'swordless': 'swordless' + }[get_choice('weapons', weights)] + + ret.difficulty = get_choice('item_pool', weights) + + ret.item_functionality = get_choice('item_functionality', weights) + + ret.shufflebosses = {'none': 'none', + 'simple': 'basic', + 'full': 'normal', + 'random': 'chaos' + }[get_choice('boss_shuffle', weights)] + + ret.shuffleenemies = {'none': 'none', + 'shuffled': 'shuffled', + 'random': 'chaos' + }[get_choice('enemy_shuffle', weights)] + + ret.enemy_damage = {'default': 'default', + 'shuffled': 'shuffled', + 'random': 'chaos' + }[get_choice('enemy_damage', weights)] + + ret.enemy_health = get_choice('enemy_health', weights) + + ret.shufflepots = get_choice('pot_shuffle', weights) + + ret.beemizer = int(get_choice('beemizer', weights)) if 'beemizer' in weights else 0 + + ret.timer = {'none': False, + None: False, + False: False, + 'timed': 'timed', + 'timed_ohko': 'timed-ohko', + 'ohko': 'ohko', + 'timed_countdown': 'timed-countdown', + 'display': 'display'}[get_choice('timer', weights)] if 'timer' in weights.keys() else False + + ret.progressive = convert_to_on_off(get_choice('progressive', weights)) if "progressive" in weights else 'on' + inventoryweights = weights.get('startinventory', {}) + startitems = [] + for item in inventoryweights.keys(): + itemvalue = get_choice(item, inventoryweights) + if item.startswith(('Progressive ', 'Small Key ', 'Rupee', 'Piece of Heart', 'Boss Heart Container', + 'Sanctuary Heart Container', 'Arrow', 'Bombs ', 'Bomb ', 'Bottle')) and isinstance( + itemvalue, int): + for i in range(int(itemvalue)): + startitems.append(item) + elif itemvalue: + startitems.append(item) + if glitches_required in ['no_logic'] and 'Pegasus Boots' not in startitems: + startitems.append('Pegasus Boots') + ret.startinventory = ','.join(startitems) + + ret.remote_items = get_choice('remote_items', weights) if 'remote_items' in weights else False + + if 'rom' in weights: + romweights = weights['rom'] + ret.sprite = get_choice('sprite', romweights) + ret.disablemusic = get_choice('disablemusic', romweights) + ret.extendedmsu = get_choice('extendedmsu', romweights) + ret.quickswap = get_choice('quickswap', romweights) + ret.fastmenu = get_choice('menuspeed', romweights) + ret.heartcolor = get_choice('heartcolor', romweights) + ret.heartbeep = convert_to_on_off(get_choice('heartbeep', romweights)) + ret.ow_palettes = get_choice('ow_palettes', romweights) + ret.uw_palettes = get_choice('uw_palettes', romweights) + + return ret + +if __name__ == '__main__': + main() diff --git a/Options.py b/Options.py new file mode 100644 index 00000000..111e498b --- /dev/null +++ b/Options.py @@ -0,0 +1,104 @@ +from __future__ import annotations +from enum import IntEnum, auto, Enum + + +class Toggle(IntEnum): + off = 0 + on = 1 + + @classmethod + def from_text(cls, text: str) -> Toggle: + if text.lower() in {"off", "0", "false", "none", "null", "no"}: + return Toggle.off + else: + return Toggle.on + + +class Choice(IntEnum): + @classmethod + def from_text(cls, text: str) -> Choice: + for option in cls: + if option.name == text.lower(): + return option + raise KeyError( + f'Could not find option "{text}" for "{cls.__name__}", known options are {", ".join(f"{option.name}" for option in cls)}') + + +class Logic(Choice): + no_glitches = auto() + no_logic = auto() + + +class Goal(Choice): + ganon = auto() + fast_ganon = auto() + all_dungeons = auto() + pedestal = auto() + triforce_hunt = auto() + + +class Accessibility(Choice): + locations = auto() + items = auto() + beatable = auto() + + +class Crystals(Enum): + # can't use IntEnum since there's also random + C0 = 0 + C1 = 1 + C2 = 2 + C3 = 3 + C4 = 4 + C5 = 5 + C6 = 6 + C7 = 7 + Random = -1 + + @staticmethod + def from_text(text: str) -> Crystals: + for option in Crystals: + if str(option.value) == text.lower(): + return option + return Crystals.Random + + +class WorldState(Choice): + standard = auto() + open = auto() + retro = auto() + inverted = auto() + + +class Bosses(Choice): + vanilla = auto() + simple = auto() + full = auto() + chaos = auto() + + +class Enemies(Choice): + vanilla = auto() + shuffled = auto() + chaos = auto() + + +mapshuffle = Toggle +compassshuffle = Toggle +keyshuffle = Toggle +bigkeyshuffle = Toggle +hints = Toggle + +if __name__ == "__main__": + import argparse + + test = argparse.Namespace() + test.logic = Logic.from_text("no_logic") + test.mapshuffle = mapshuffle.from_text("ON") + try: + test.logic = Logic.from_text("owg") + except KeyError as e: + print(e) + if test.mapshuffle: + print("Mapshuffle is on") + print(test) diff --git a/Patch.py b/Patch.py new file mode 100644 index 00000000..def899e8 --- /dev/null +++ b/Patch.py @@ -0,0 +1,76 @@ +import bsdiff4 +import yaml +import os +import lzma +import hashlib +from typing import Tuple, Optional + +import Utils +from Rom import JAP10HASH, read_rom + +base_rom_bytes = None + + +def get_base_rom_bytes(file_name: str = None) -> bytes: + global base_rom_bytes + if not base_rom_bytes: + options = Utils.get_options() + if not file_name: + file_name = options["general_options"]["rom_file"] + if not os.path.exists(file_name): + file_name = Utils.local_path(file_name) + base_rom_bytes = bytes(read_rom(open(file_name, "rb"))) + + basemd5 = hashlib.md5() + basemd5.update(base_rom_bytes) + if JAP10HASH != basemd5.hexdigest(): + raise Exception('Supplied Base Rom does not match known MD5 for JAP(1.0) release. ' + 'Get the correct game and version, then dump it') + return base_rom_bytes + + +def generate_patch(rom: bytes, metadata=None) -> bytes: + if metadata is None: + metadata = {} + patch = bsdiff4.diff(get_base_rom_bytes(), rom) + patch = yaml.dump({"meta": metadata, + "patch": patch}) + return patch.encode(encoding="utf-8-sig") + + +def create_patch_file(rom_file_to_patch: str, server: str = "") -> str: + bytes = generate_patch(load_bytes(rom_file_to_patch), + { + "server": server}) # allow immediate connection to server in multiworld. Empty string otherwise + target = os.path.splitext(rom_file_to_patch)[0] + ".bmbp" + write_lzma(bytes, target) + return target + + +def create_rom_file(patch_file) -> Tuple[dict, str]: + data = Utils.parse_yaml(lzma.decompress(load_bytes(patch_file)).decode("utf-8-sig")) + patched_data = bsdiff4.patch(get_base_rom_bytes(), data["patch"]) + target = os.path.splitext(patch_file)[0] + ".sfc" + with open(target, "wb") as f: + f.write(patched_data) + return data["meta"], target + + +def load_bytes(path: str): + with open(path, "rb") as f: + return f.read() + + +def write_lzma(data: bytes, path: str): + with lzma.LZMAFile(path, 'wb') as f: + f.write(data) + +if __name__ == "__main__": + ipv4 = Utils.get_public_ipv4() + import sys + + for rom in sys.argv: + if rom.endswith(".sfc"): + print(f"Creating patch for {rom}") + result = create_patch_file(rom, ipv4) + print(f"Created patch {result}") diff --git a/Plando.py b/Plando.py index 1f2992bf..d864e8d4 100755 --- a/Plando.py +++ b/Plando.py @@ -10,7 +10,7 @@ import sys from BaseClasses import World from Regions import create_regions from EntranceShuffle import link_entrances, connect_entrance, connect_two_way, connect_exit -from Rom import patch_rom, LocalRom, Sprite, write_string_to_rom +from Rom import patch_rom, LocalRom, write_string_to_rom, apply_rom_settings, get_sprite_from_name from Rules import set_rules from Dungeons import create_dungeons from Items import ItemFactory @@ -23,7 +23,8 @@ def main(args): start_time = time.perf_counter() # initialize the world - world = World(1, 'vanilla', 'noglitches', 'standard', 'normal', 'none', 'on', 'ganon', 'freshness', False, False, False, args.quickswap, args.fastmenu, args.disablemusic, False, False, False, None, 'none', False) + world = World(1, 'vanilla', 'noglitches', 'standard', 'normal', 'none', 'on', 'ganon', 'freshness', False, False, False, False, False, False, None, False) + world.player_names[1].append("Player 1") logger = logging.getLogger('') hasher = hashlib.md5() @@ -36,7 +37,7 @@ def main(args): logger.info('ALttP Plandomizer Version %s - Seed: %s\n\n', __version__, args.plando) - world.difficulty_requirements = difficulties[world.difficulty] + world.difficulty_requirements[1] = difficulties[world.difficulty[1]] create_regions(world, 1) create_dungeons(world, 1) @@ -68,13 +69,10 @@ def main(args): logger.info('Patching ROM.') - if args.sprite is not None: - sprite = Sprite(args.sprite) - else: - sprite = None - rom = LocalRom(args.rom) - patch_rom(world, 1, rom, args.heartbeep, args.heartcolor, sprite) + patch_rom(world, rom, 1, 1, False) + + apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic, args.sprite, args.ow_palettes, args.uw_palettes) for textname, texttype, text in text_patches: if texttype == 'text': @@ -114,16 +112,16 @@ def fill_world(world, plando, text_patches): tr_medallion = medallionstr.strip() elif line.startswith('!mode'): _, modestr = line.split(':', 1) - world.mode = modestr.strip() + world.mode = {1: modestr.strip()} elif line.startswith('!logic'): _, logicstr = line.split(':', 1) - world.logic = logicstr.strip() + world.logic = {1: logicstr.strip()} elif line.startswith('!goal'): _, goalstr = line.split(':', 1) - world.goal = goalstr.strip() + world.goal = {1: goalstr.strip()} elif line.startswith('!light_cone_sewers'): _, sewerstr = line.split(':', 1) - world.sewer_light_cone = sewerstr.strip().lower() == 'true' + world.sewer_light_cone = {1: sewerstr.strip().lower() == 'true'} elif line.startswith('!light_cone_lw'): _, lwconestr = line.split(':', 1) world.light_world_light_cone = lwconestr.strip().lower() == 'true' @@ -132,19 +130,19 @@ def fill_world(world, plando, text_patches): world.dark_world_light_cone = dwconestr.strip().lower() == 'true' elif line.startswith('!fix_trock_doors'): _, trdstr = line.split(':', 1) - world.fix_trock_doors = trdstr.strip().lower() == 'true' + world.fix_trock_doors = {1: trdstr.strip().lower() == 'true'} elif line.startswith('!fix_trock_exit'): _, trfstr = line.split(':', 1) - world.fix_trock_exit = trfstr.strip().lower() == 'true' + world.fix_trock_exit = {1: trfstr.strip().lower() == 'true'} elif line.startswith('!fix_gtower_exit'): _, gtfstr = line.split(':', 1) world.fix_gtower_exit = gtfstr.strip().lower() == 'true' elif line.startswith('!fix_pod_exit'): _, podestr = line.split(':', 1) - world.fix_palaceofdarkness_exit = podestr.strip().lower() == 'true' + world.fix_palaceofdarkness_exit = {1: podestr.strip().lower() == 'true'} elif line.startswith('!fix_skullwoods_exit'): _, swestr = line.split(':', 1) - world.fix_skullwoods_exit = swestr.strip().lower() == 'true' + world.fix_skullwoods_exit = {1: swestr.strip().lower() == 'true'} elif line.startswith('!check_beatable_only'): _, chkbtstr = line.split(':', 1) world.check_beatable_only = chkbtstr.strip().lower() == 'true' @@ -172,7 +170,7 @@ def fill_world(world, plando, text_patches): item = ItemFactory(itemstr.strip(), 1) if item is not None: world.push_item(location, item) - if item.key: + if item.smallkey or item.bigkey: location.event = True elif '<=>' in line: entrance, exit = line.split('<=>', 1) @@ -211,6 +209,8 @@ def start(): help='Select the rate at which the heart beep sound is played at low health.') parser.add_argument('--heartcolor', default='red', const='red', nargs='?', choices=['red', 'blue', 'green', 'yellow'], help='Select the color of Link\'s heart meter. (default: %(default)s)') + parser.add_argument('--ow_palettes', default='default', choices=['default', 'random', 'blackout']) + parser.add_argument('--uw_palettes', default='default', choices=['default', 'random', 'blackout']) parser.add_argument('--sprite', help='Path to a sprite sheet to use for Link. Needs to be in binary format and have a length of 0x7000 (28672) bytes.') parser.add_argument('--plando', help='Filled out template to use for setting up the rom.') args = parser.parse_args() @@ -222,8 +222,8 @@ def start(): if not os.path.isfile(args.plando): input('Could not find Plandomizer distribution at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.plando) sys.exit(1) - if args.sprite is not None and not os.path.isfile(args.rom): - input('Could not find link sprite sheet at given location. \nPress Enter to exit.' % args.sprite) + if args.sprite is not None and not os.path.isfile(args.sprite) and not get_sprite_from_name(args.sprite): + input('Could not find link sprite sheet at given location. \nPress Enter to exit.') sys.exit(1) # set up logger diff --git a/Plandomizer_Template.txt b/Plandomizer_Template.txt index 6c94cc76..a7160c9b 100644 --- a/Plandomizer_Template.txt +++ b/Plandomizer_Template.txt @@ -18,7 +18,7 @@ Mushroom: Mushroom Bottle Merchant: Bottle -Flute Spot: Ocarina +Flute Spot: Flute Sunken Treasure: Nothing Purple Chest: Nothing Blind's Hideout - Top: Nothing diff --git a/README.md b/README.md index b0628d14..c6f4cfd8 100644 --- a/README.md +++ b/README.md @@ -1,489 +1,60 @@ -# ALttPEntranceRandomizer - -This is a entrance randomizer for _The Legend of Zelda: A Link to the Past_ for the SNES. -See https://alttpr.com/ for more details on the normal randomizer. - -# Installation - -Clone this repository and then run ```EntranceRandomizer.py``` (requires Python 3). - -Alternatively, run ```Gui.py``` for a simple graphical user interface. - -For releases, a Windows standalone executable is available for users without Python 3. - -# Settings - -## Game Mode - -### Standard - -Fixes Hyrule Castle Secret Entrance and Front Door, but may lead to weird rain state issues if you exit through the Hyrule Castle side exits before rescuing Zelda in a full shuffle. - -Gives lightcone in Hyrule Castle Sewers even without the Lamp. - -### Open - -This mode starts with the option to start in your house or the sanctuary, you are free to explore. - -Special notes: - -- Uncle already in sewers and most likely does not have a sword. -- Sewers do not get a free light cone. -- It may be a while before you find a sword, think of other ways to do damage to enemies. (bombs are a great tool, as well as picking up bushes in over world). - -### Swordless - -This mode removes all swords from the itempool. Otherwise just like open. - -Special notes: - -- The Medallions to open Misery Mire and Turtle Rock can be used without a sword if you stand on the symbol. -- The curtains in Skull Woods and Hyrule Castle Tower that normally require a sword to cut have been removed. -- Ganon takes damage from the Hammer. -- The magic barrier to Hyrule Castle Tower can be broken with a Hammer. -- The Hammer can be used to activate the Ether and Bombos tablets. - -### Inverted - -This mode is similar to Open but requires the Moon Pearl in order to not transform into a bunny in the Light World and the Sanctuary spawn point is moved to the Dark Sanctuary - -Special Notes: - -- Link's House is shuffled freely. The Dark Sanctuary is shuffled within West Dark World. -- There are a number of overworld changes to account for the inability to mirror from the Light World to the Dark World. -- Legacy shuffles are not implemente for this mode. - -## Game Logic -This determines the Item Requirements for each location. - -### No Glitches - -The game can be completed without knowing how to perform glitches of any kind. - -### Minor Glitches - -May require Fake Flippers, Bunny Revival. - -### No Logic - -Items are placed without regard for progression or the seed being possible. Major glitches are likely required. - -## Game Goal - -### Ganon - -Standard game completion requiring you to collect the 7 crystals, defeat Agahnim 2 and then beat Ganon. - -### Pedestal - -Places the Triforce at the Master Sword Pedestal. Ganon cannot be damaged. - -### All Dungeons - -Ganon cannot be damaged until all dungeons (including Hyrule Castle Tower and Ganons Tower) are cleared. - -### Triforce Hunt - -Triforce Pieces are added to the item pool, and some number of them being found will trigger game completion. Ganon cannot be damaged. -By default 30 Triforce Pieces are placed while 20 are needed to beat the game. Both values can be adjusted with the custom item pool feature. - -### Crystals - -Standard game completion requiring you to collect the 7 crystals and then beat Ganon. - -This is only noticeably different if the the Ganon shuffle option is enabled. - -## Game Difficulty - -### Normal - -This is the default setting that has an item pool most similar to the original -The Legend of Zelda: A Link to the Past. - -### Hard - -This setting reduces the availability of a variety of minor helpful items, most notably -limiting the player to two bottles, a Tempered Sword, and Blue Mail. Several minor game -mechanics are adjusted to increase difficulty, most notably weakening potions and preventing -the player from having fairies in bottles. - -### Expert - -This setting is a more extreme version of the Hard setting. Potions are further nerfed, the item -pool is less helpful, and the player can find no armor, only a Master Sword, and only a single bottle. - -## Timer Setting - -### None - -Does not invoke a timer. - -### Display - -Displays a timer on-screen but does not alter the item pool. -This will prevent the dungeon item count feature in Easy and Keysanity from working. - -### Timed - -Displays a count-up timer on screen that can be reduced with Green Clocks and Blue Clocks or -increased with Red Clocks found in chests that will be added to the itempool. - -### Timed-OHKO - -Displays a countdown timer on screen that, when it hits zero, will put the player into a one hit -knockout state until more time is added to the clock via some of the Green Clocks that will be added -to the itempool. - -### OHKO - -The player will be in a one hit knockout state the entire game. This is the same as Timed-OHKO except -without the Clock items and the timer permanently at zero. - -### Timed-countdown - -Displays a countdown timer on screen that can be increased with Green Clocks and Blue Clocks or -decreased with Red Clocks found in chests that will be added to the itempool. The goal of this mode -is to finish the game without the timer reaching zero, but the game will continue uninterrupted if -the player runs out of time. - -## Progressive equipment - -Determines if Sword, Shield, and gloves are progressive (upgrading in sequence) or not. - -### On (Default) - -This setting makes swords, shields, armor, and gloves progressive. The first of any type of equipment found -by the player will be the lowest level item, and each subsequent find of a category will upgrade that type of -equipment. - -### Off - -This setting makes swords, shields, armor, and gloves non-progressive. All of the items of these types will be -randomly placed in chests, and the player could find them in any order and thus instantly receive high level equipment. -Downgrades are not possible; finding a lower level piece of equipment than what is already in the player's possession -will simply do nothing. - -### Random - -This setting makes swords, shields, armor, and gloves randomly either progressive or not. Each category is independently -randomized. - -## Item Distribution Algorithm - -Determines how the items are shuffled. - -### Balanced -This is a variation of VT26 that aims to strike a balance between the overworld heavy VT25 and the dungeon heavy VT26 algorithm. -It does this by reshuffling the remaining locations after placing dungeon items. - -### VT26 -Items and locations are shuffled like in VT25, and dungeon items are now placed using the same algorithm. When Ganon is not -shuffled it includes a slight deliberate bias against having too many desireable items in Ganon's Tower to help counterbalance -the sheer number of chests in that single location. - -### VT25 -Items and locations are shuffled and placed from the top of the lists. The only thing preventing an item from being placed into a spot -is if is absolutely impossible to be there given the previous made placement choices. Leads to very uniform but guaranteed solvable distributions. - -### VT22 -The ordinary VT v8.22 algorithm. Fixes issues in placement in VT21 by discarding all previously skipped and unfilled locations -after 2/3 of the progression items were placed to prevent stale late game locations from soaking up the same items all the time. - -### VT21 -The ordinary VT v8.21 algorithm. Unbiased placement of items into unlocked locations, placing items that unlock new locations first. -May lead to distributions that seem a bit wonky (high likelyhood of ice rod in Turtle Rock, for instance) - -### Flood -Pushes out items starting from Link's House and is slightly biased to placing progression items with less restrictions. Use for relatively simple distributions. - -### Freshness -Alternative approach to VT22 to improve on VT21 flaws. Locations that are skipped because they are currently unreachable increase in -staleness, decreasing the likelihood of receiving a progress item. - -## Entrance Shuffle Algorithm - -Determines how locations are shuffled. In all modes other than Insanity and the similar legacy versions, holes shuffle as a pair with the connecting cave and the front -two sections of Skull Woods remain confined to the general Skull Woods area. Link's house is never shuffled as a design decision. - -### Vanilla - -Places entrances in the same locations they were in the original The Legend of Zelda: A Link to the Past. - -### Simple - -Shuffles dungeon entrances between each other and keeps all 4-entrance dungeons confined to one location such that dungeons will one to one swap with each other. -Other than on Light World Death Mountain, interiors are shuffled but still connect the same points on the overworld. On Death Mountain, entrances are connected more freely. - -### Restricted - -Uses dungeon shuffling from Simple but freely connects remaining entrances. Caves and dungeons with multiple entrances will be confined to one world. - -### Full - -Mixes cave and dungeon entrances freely. Caves and dungeons with multiple entrances will be confined to one world. - -### Crossed - -Mixes cave and dungeon entrances freely, but now connector caves and dungeons can link Light World and Dark World. - -### Insanity - -Decouples entrances and exits from each other and shuffles them freely. Caves that were single entrance in vanilla still can only exit to the same location from which they were entered. - -### Legacy Variants - -Similar to the base shuffles, but the distinction between single entrance and multi-entrance caves from older versions of the randomizer is maintained. -Madness_Legacy is the more similar to the modern Insanity. Insanity_Legacy has fake worlds and guaranteed Moon Pearl and Magic Mirror for a very different experience. - -### Dungeon Variants - -The dungeon variants only mix up dungeons and keep the rest of the overworld vanilla. - -## Heartbeep Sound Rate - -Select frequency of beeps when on low health. Can completely disable them. - -## Heart Color - -Select the color of Link's hearts. - -## Menu Speed - -A setting that lets the player set the rate at which the menu opens and closes. - -## Create Spoiler Log - -Output a Spoiler File. - -## Do not Create Patched Rom - -If set, will not produce a patched rom as output. Useful in conjunction with the spoiler log option to batch -generate spoilers for statistical analysis. - -## Enable L/R button quickswapping - -Use to enable quick item swap with L/R buttons. Press L and R together to switch the state of items like the Mushroom/Powder pair. - -## Keysanity - -This setting allows dungeon specific items (Small Key, Big Key, Map, Compass) to be distributed anywhere in the world and not just -in their native dungeon. Small Keys dropped by enemies or found in pots are not affected. The chest in southeast Skull Woods that -is traditionally a guaranteed Small Key still is. These items will be distributed according to the v26/balanced algorithm, but -the rest of the itempool will respect the algorithm setting. Music for dungeons is randomized so it cannot be used as a tell -for which dungeons contain pendants and crystals; finding a Map for a dungeon will allow the overworld map to display its prize. - -## Retro - -This setting turns all Small Keys into universal Small Keys that can be used in any dungeon and are distributed across the world. -The Bow now consumed rupees to shoot; the cost is 10 rupees per Wood Arrow and 50 per Silver Arrow. Shooting Wood Arrows requires -the purchase of an arrow item from shops, and to account for this and the dynamic use of keys, both Wood Arrows and Small Keys will -be added to several shops around the world. Four "take any" caves are added that allow the player to choose between an extra Heart -Container and a Bottle being filled with Blue Potion, and one of the four swords from the item pool is placed into a special cave as -well. The five caves that are removed for these will be randomly selected single entrance caves that did not contain any items or any shops. -In further concert with the Bow changes, all arrows under pots, in chests, and elsewhere in the seed will be replaced with rupees. - -## Place Dungeon Items - -If not set, Compasses and Maps are removed from the dungeon item pools and replaced by empty chests that may end up anywhere in the world. -This may lead to different amount of itempool items being placed in a dungeon than you are used to. - -## Include Ganon's Tower and Pyramid Hole in Shuffle pool - -If set, Ganon's Tower is included in the dungeon shuffle pool and the Pyramid Hole/Exit pair is included in the Holes shuffle pool. Ganon can not be defeated until the primary goal is fulfilled. -This setting removes any bias against Ganon's Tower that some algorithms may have. - -## Include Helpful Hints - -If set, the 15 telepathic tiles and 5 storytellers scattered about Hyrule will give helpful hints about various items and entrances. An exact breakdown of the hint -distribution is provided as an included text file. - -## Use Custom Item Pool - -If set, the item pool normally associated with your difficulty setting is replaced by the item pool specified in the custom tab. This feature is only supported when the randomizer is run -via the GUI; attempting to set this via the command line does nothing. - -## Seed - -Can be used to set a seed number to generate. Using the same seed with same settings on the same version of the entrance randomizer will always yield an identical output. - -## Count - -Use to batch generate multiple seeds with same settings. If a seed number is provided, it will be used for the first seed, then used to derive the next seed (i.e. generating 10 seeds with the same seed number given will produce the same 10 (different) roms each time). - -# Command Line Options - -``` --h, --help -``` - -Show the help message and exit. - -``` ---create_spoiler -``` - -Output a Spoiler File (default: False) - -``` ---logic [{noglitches,minorglitches,nologic}] -``` - -Select the game logic (default: noglitches) - -``` ---mode [{standard,open,swordless,inverted}] -``` - -Select the game mode. (default: open) - -``` ---goal [{ganon,pedestal,dungeons,triforcehunt,crystals}] -``` - -Select the game completion goal. (default: ganon) - -``` ---difficulty [{normal,hard,expert}] -``` - -Select the game difficulty. Affects available itempool. (default: normal) - -``` ---item_functionality [{normal,hard,expert}] -``` - -Select limits on item functionality to increase difficulty. (default: normal) - -``` ---timer [{none,display,timed,timed-ohko,ohko,timed-countdown}] -``` - -Select the timer setting. (default: none) - -``` ---progressive [{on,off,random}] -``` - -Select the setting for progressive equipment. (default: on) - -``` ---algorithm [{freshness,flood,vt21,vt22,vt25,vt26,balanced}] -``` - -Select item distribution algorithm. (default: balanced) - -``` ---shuffle [{default,simple,restricted,full,crossed,insanity,restricted_legacy,full_legacy,madness_legacy,insanity_legacy,dungeonsfull,dungeonssimple}] -``` - -Select entrance shuffle algorithm. (default: full) - -``` ---rom ROM -``` - -Path to a Japanese 1.0 A Link to the Past Rom. (default: Zelda no Densetsu - Kamigami no Triforce (Japan).sfc) - -``` ---loglevel [{error,info,warning,debug}] -``` - -Select level of logging for output. (default: info) - -``` ---seed SEED -``` - -Define seed number to generate. (default: None) - -``` ---count COUNT -``` - -Set the count option (default: None) - -``` ---quickswap -``` - -Use to enable quick item swap with L/R buttons. (default: False) - -``` ---fastmenu [{normal,instant,double,triple,quadruple,half}] -``` - -Alters the rate at which the menu opens and closes. (default: normal) - - -``` ---disablemusic -``` - -Disables game music, resulting in the game sound being just the SFX. (default: False) - -``` ---keysanity -``` - -Enable Keysanity (default: False) - -``` ---retro -``` - -Enable Retro mode (default: False) - -``` ---nodungeonitems -``` - -If set, Compasses and Maps are removed from the dungeon item pools and replaced by empty chests that may end up anywhere in the world. -This may lead to different amount of itempool items being placed in a dungeon than you are used to. (default: False) - -``` ---heartbeep [{normal,half,quarter,off}] -``` - -Select frequency of beeps when on low health. (default: normal) - -``` ---heartcolor [{red,blue,green,yellow,random}] -``` - -Select the color of Link\'s heart meter. (default: red) - -``` ---sprite SPRITE -``` - -Use to select a different sprite sheet to use for Link. Path to a binary file of length 0x7000 containing the sprite data stored at address 0x80000 in the rom. (default: None) - -``` ---accessibility [{items,locations,none}] -``` - -Sets the item/location accessibility rules. (default: items) - -``` ---hints -``` - -Enables helpful hints from storytellers and telepathic tiles (default: False) - -``` ---no-shuffleganon -``` - -Disables the "Include Ganon's Tower and Pyramid Hole in Shuffle pool" option. (default: Enabled) - -``` ---suppress_rom -``` - -Enables the "Do not Create Patched Rom" option. (default: False) - -``` ---gui -``` - -Open the graphical user interface. Preloads selections with set command line parameters. +Berserker's Multiworld Utilities for Bonta's Multiworld +======================================================= + +This is a complete fork of Bonta's Multiworld V31, which assumes you already know how to setup and use that project. Instructions here are only for the additions. +This is a drop-in replacement with everything from Bonta's Multiworld included. +You can find a guide here: https://docs.google.com/document/d/1r7qs1-MK7YbFf2d-mEUeTy2wHykIf1ALG9pLtVvUbSw/edit# + +Additions/Changes +----------------- + +Project + * Available in precompiled form for Windows 64Bit on [Releases](https://github.com/Berserker66/MultiWorld-Utilities/releases) page. + * Compatible with Python 3.7 and 3.8. Potentially future versions as well. + * Update modules if they are too old, preventing a crash when trying to connect among potential other issues + * Autoinstall missing modules + * Allow newer versions of modules than specified, as they will *usually* not break compatibility + * Support for V31 extendedmsu + * Has support for binary patching to allow legal distribution of multiworld rom files + * Various performance improvements + * Various crash fixes + +MultiMystery.py + * Allows you to generate a Multiworld with individual player mystery weights. Since weights can also be set to 100%, this also allows for individual settings for each player in a regular multiworld. +Basis is a .yaml file that sets these weights. You can find an [easy.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/easy.yaml) in this project folder to get started. + * Additional instructions are at the start of the file. Open with a text editor. + * Configuration options in the host.yaml file. + + MultiServer.py + * Added a try/except to prevent malformed console commands from crashing the entire server + * Supports automatic port-forwarding, can be enabled in host.yaml + * improved `!players` command, mentioning how many players are currently connected of how many expected and who's missing + * /forfeitplayer Playername now works when the player is not currently connected + * various commands, like /senditem and /hint use "fuzzy text matching", no longer requiring you to enter a location, player name or item name perfectly + * Added /hint command on the server (use just /hint for help on command) +can be used as /hint Playername Itemname +All Itemnames can be found in Items.py starting at line 25 +example: +/hint Berserker Progressive Sword +Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Hype Cave - Top in ahhdurr's World +Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Blind's Hideout - Far Right in Schulzer's World +Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Palace of Darkness - Map Chest in Thorus's World +Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Ganons Tower - Map Chest in Will's World + * A player-side hint command "!hint" also exists. It needs to be turned on in the host.yaml and is based on points. + +Mystery.py + * Defaults to generating a non-race ROM (Bonta's only makes race ROMs at this time) +If a race ROM is desired, pass --create-race as argument to it + * When an error is generated due to a broken .yaml file, it now mentions in the error trace which file, line and character is the culprit + * Option for progressive items, allowing you to turn them off (see easy.yaml for more info) + * Rom-Option for extendedmsu (see easy.yaml for more info) + * Option for "timer" + * Supports new Meta-Mystery mode. Read [meta.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/meta.yaml) for details. + * Added `dungeonssimple` and `dungeonsfull` ER modes + +MultiClient.py + * Awaits a Qusb2snes connection when started, latching on when available + * Terminal improvements + * Running it with a patch file will patch out the multiworld rom and then automatically connect to the host that created the multiworld + * Cheating is now controlled by the server and can be disabled through host.yaml + diff --git a/Regions.py b/Regions.py index 70ae3b0b..8ad5716b 100644 --- a/Regions.py +++ b/Regions.py @@ -293,35 +293,26 @@ def create_regions(world, player): create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Entrance', 'Pyramid Drop']) ] - for region_name, (room_id, shopkeeper, replaceable) in shop_table.items(): - region = world.get_region(region_name, player) - shop = Shop(region, room_id, ShopType.Shop, shopkeeper, replaceable) - region.shop = shop - world.shops.append(shop) - for index, (item, price) in enumerate(default_shop_contents[region_name]): - shop.add_inventory(index, item, price) + world.initialize_regions() - region = world.get_region('Capacity Upgrade', player) - shop = Shop(region, 0x0115, ShopType.UpgradeShop, 0x04, True) - region.shop = shop - world.shops.append(shop) - shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7) - shop.add_inventory(1, 'Arrow Upgrade (+5)', 100, 7) - world.intialize_regions() -def create_lw_region(player, name, locations=None, exits=None): +def create_lw_region(player: int, name: str, locations=None, exits=None): return _create_region(player, name, RegionType.LightWorld, 'Light World', locations, exits) -def create_dw_region(player, name, locations=None, exits=None): + +def create_dw_region(player: int, name: str, locations=None, exits=None): return _create_region(player, name, RegionType.DarkWorld, 'Dark World', locations, exits) -def create_cave_region(player, name, hint='Hyrule', locations=None, exits=None): + +def create_cave_region(player: int, name: str, hint: str, locations=None, exits=None): return _create_region(player, name, RegionType.Cave, hint, locations, exits) -def create_dungeon_region(player, name, hint='Hyrule', locations=None, exits=None): + +def create_dungeon_region(player: int, name: str, hint: str, locations=None, exits=None): return _create_region(player, name, RegionType.Dungeon, hint, locations, exits) -def _create_region(player, name, type, hint='Hyrule', locations=None, exits=None): + +def _create_region(player: int, name: str, type: RegionType, hint: str, locations=None, exits=None): ret = Region(name, type, hint, player) if locations is None: locations = [] @@ -331,14 +322,15 @@ def _create_region(player, name, type, hint='Hyrule', locations=None, exits=None for exit in exits: ret.exits.append(Entrance(player, exit, ret)) for location in locations: - address, crystal, hint_text = location_table[location] - ret.locations.append(Location(player, location, address, crystal, hint_text, ret)) + address, player_address, crystal, hint_text = location_table[location] + ret.locations.append(Location(player, location, address, crystal, hint_text, ret, player_address)) return ret -def mark_light_world_regions(world): + +def mark_light_world_regions(world, player: int): # cross world caves may have some sections marked as both in_light_world, and in_dark_work. # That is ok. the bunny logic will check for this case and incorporate special rules. - queue = collections.deque(region for region in world.regions if region.type == RegionType.LightWorld) + queue = collections.deque(region for region in world.get_regions(player) if region.type == RegionType.LightWorld) seen = set(queue) while queue: current = queue.popleft() @@ -351,7 +343,7 @@ def mark_light_world_regions(world): seen.add(exit.connected_region) queue.append(exit.connected_region) - queue = collections.deque(region for region in world.regions if region.type == RegionType.DarkWorld) + queue = collections.deque(region for region in world.get_regions(player) if region.type == RegionType.DarkWorld) seen = set(queue) while queue: current = queue.popleft() @@ -364,269 +356,278 @@ def mark_light_world_regions(world): seen.add(exit.connected_region) queue.append(exit.connected_region) -# (room_id, shopkeeper, replaceable) -shop_table = { - 'Cave Shop (Dark Death Mountain)': (0x0112, 0xC1, True), - 'Red Shield Shop': (0x0110, 0xC1, True), - 'Dark Lake Hylia Shop': (0x010F, 0xC1, True), - 'Dark World Lumberjack Shop': (0x010F, 0xC1, True), - 'Village of Outcasts Shop': (0x010F, 0xC1, True), - 'Dark World Potion Shop': (0x010F, 0xC1, True), - 'Light World Death Mountain Shop': (0x00FF, 0xA0, True), - 'Kakariko Shop': (0x011F, 0xA0, True), - 'Cave Shop (Lake Hylia)': (0x0112, 0xA0, True), - 'Potion Shop': (0x0109, 0xFF, False), - # Bomb Shop not currently modeled as a shop, due to special nature of items -} -# region, [item] -# slot, item, price, max=0, replacement=None, replacement_price=0 -# item = (item, price) +def create_shops(world, player: int): + for region_name, (room_id, type, shopkeeper, custom, locked, inventory) in shop_table.items(): + if world.mode[player] == 'inverted' and region_name == 'Dark Lake Hylia Shop': + locked = True + inventory = [('Blue Potion', 160), ('Blue Shield', 50), ('Bombs (10)', 50)] + region = world.get_region(region_name, player) + shop = Shop(region, room_id, type, shopkeeper, custom, locked) + region.shop = shop + world.shops.append(shop) + for index, item in enumerate(inventory): + shop.add_inventory(index, *item) + +# (type, room_id, shopkeeper, custom, locked, [items]) +# item = (item, price, max=0, replacement=None, replacement_price=0) _basic_shop_defaults = [('Red Potion', 150), ('Small Heart', 10), ('Bombs (10)', 50)] _dark_world_shop_defaults = [('Red Potion', 150), ('Blue Shield', 50), ('Bombs (10)', 50)] -default_shop_contents = { - 'Cave Shop (Dark Death Mountain)': _basic_shop_defaults, - 'Red Shield Shop': [('Red Shield', 500), ('Bee', 10), ('Arrows (10)', 30)], - 'Dark Lake Hylia Shop': _dark_world_shop_defaults, - 'Dark World Lumberjack Shop': _dark_world_shop_defaults, - 'Village of Outcasts Shop': _dark_world_shop_defaults, - 'Dark World Potion Shop': _dark_world_shop_defaults, - 'Light World Death Mountain Shop': _basic_shop_defaults, - 'Kakariko Shop': _basic_shop_defaults, - 'Cave Shop (Lake Hylia)': _basic_shop_defaults, - 'Potion Shop': [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)], +shop_table = { + 'Cave Shop (Dark Death Mountain)': (0x0112, ShopType.Shop, 0xC1, True, False, _basic_shop_defaults), + 'Red Shield Shop': (0x0110, ShopType.Shop, 0xC1, True, False, [('Red Shield', 500), ('Bee', 10), ('Arrows (10)', 30)]), + 'Dark Lake Hylia Shop': (0x010F, ShopType.Shop, 0xC1, True, False, _dark_world_shop_defaults), + 'Dark World Lumberjack Shop': (0x010F, ShopType.Shop, 0xC1, True, False, _dark_world_shop_defaults), + 'Village of Outcasts Shop': (0x010F, ShopType.Shop, 0xC1, True, False, _dark_world_shop_defaults), + 'Dark World Potion Shop': (0x010F, ShopType.Shop, 0xC1, True, False, _dark_world_shop_defaults), + 'Light World Death Mountain Shop': (0x00FF, ShopType.Shop, 0xA0, True, False, _basic_shop_defaults), + 'Kakariko Shop': (0x011F, ShopType.Shop, 0xA0, True, False, _basic_shop_defaults), + 'Cave Shop (Lake Hylia)': (0x0112, ShopType.Shop, 0xA0, True, False, _basic_shop_defaults), + 'Potion Shop': (0x0109, ShopType.Shop, 0xFF, False, True, [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)]), + 'Capacity Upgrade': (0x0115, ShopType.UpgradeShop, 0x04, True, True, [('Bomb Upgrade (+5)', 100, 7), ('Arrow Upgrade (+5)', 100, 7)]) } -location_table = {'Mushroom': (0x180013, False, 'in the woods'), - 'Bottle Merchant': (0x2eb18, False, 'with a merchant'), - 'Flute Spot': (0x18014a, False, 'underground'), - 'Sunken Treasure': (0x180145, False, 'underwater'), - 'Purple Chest': (0x33d68, False, 'from a box'), - "Blind's Hideout - Top": (0xeb0f, False, 'in a basement'), - "Blind's Hideout - Left": (0xeb12, False, 'in a basement'), - "Blind's Hideout - Right": (0xeb15, False, 'in a basement'), - "Blind's Hideout - Far Left": (0xeb18, False, 'in a basement'), - "Blind's Hideout - Far Right": (0xeb1b, False, 'in a basement'), - "Link's Uncle": (0x2df45, False, 'with your uncle'), - 'Secret Passage': (0xe971, False, 'near your uncle'), - 'King Zora': (0xee1c3, False, 'at a high price'), - "Zora's Ledge": (0x180149, False, 'near Zora'), - 'Waterfall Fairy - Left': (0xe9b0, False, 'near a fairy'), - 'Waterfall Fairy - Right': (0xe9d1, False, 'near a fairy'), - "King's Tomb": (0xe97a, False, 'alone in a cave'), - 'Floodgate Chest': (0xe98c, False, 'in the dam'), - "Link's House": (0xe9bc, False, 'in your home'), - 'Kakariko Tavern': (0xe9ce, False, 'in the bar'), - 'Chicken House': (0xe9e9, False, 'near poultry'), - "Aginah's Cave": (0xe9f2, False, 'with Aginah'), - "Sahasrahla's Hut - Left": (0xea82, False, 'near the elder'), - "Sahasrahla's Hut - Middle": (0xea85, False, 'near the elder'), - "Sahasrahla's Hut - Right": (0xea88, False, 'near the elder'), - 'Sahasrahla': (0x2f1fc, False, 'with the elder'), - 'Kakariko Well - Top': (0xea8e, False, 'in a well'), - 'Kakariko Well - Left': (0xea91, False, 'in a well'), - 'Kakariko Well - Middle': (0xea94, False, 'in a well'), - 'Kakariko Well - Right': (0xea97, False, 'in a well'), - 'Kakariko Well - Bottom': (0xea9a, False, 'in a well'), - 'Blacksmith': (0x18002a, False, 'with the smith'), - 'Magic Bat': (0x180015, False, 'with the bat'), - 'Sick Kid': (0x339cf, False, 'with the sick'), - 'Hobo': (0x33e7d, False, 'with the hobo'), - 'Lost Woods Hideout': (0x180000, False, 'near a thief'), - 'Lumberjack Tree': (0x180001, False, 'in a hole'), - 'Cave 45': (0x180003, False, 'alone in a cave'), - 'Graveyard Cave': (0x180004, False, 'alone in a cave'), - 'Checkerboard Cave': (0x180005, False, 'alone in a cave'), - 'Mini Moldorm Cave - Far Left': (0xeb42, False, 'near Moldorms'), - 'Mini Moldorm Cave - Left': (0xeb45, False, 'near Moldorms'), - 'Mini Moldorm Cave - Right': (0xeb48, False, 'near Moldorms'), - 'Mini Moldorm Cave - Far Right': (0xeb4b, False, 'near Moldorms'), - 'Mini Moldorm Cave - Generous Guy': (0x180010, False, 'near Moldorms'), - 'Ice Rod Cave': (0xeb4e, False, 'in a frozen cave'), - 'Bonk Rock Cave': (0xeb3f, False, 'alone in a cave'), - 'Library': (0x180012, False, 'near books'), - 'Potion Shop': (0x180014, False, 'near potions'), - 'Lake Hylia Island': (0x180144, False, 'on an island'), - 'Maze Race': (0x180142, False, 'at the race'), - 'Desert Ledge': (0x180143, False, 'in the desert'), - 'Desert Palace - Big Chest': (0xe98f, False, 'in Desert Palace'), - 'Desert Palace - Torch': (0x180160, False, 'in Desert Palace'), - 'Desert Palace - Map Chest': (0xe9b6, False, 'in Desert Palace'), - 'Desert Palace - Compass Chest': (0xe9cb, False, 'in Desert Palace'), - 'Desert Palace - Big Key Chest': (0xe9c2, False, 'in Desert Palace'), - 'Desert Palace - Boss': (0x180151, False, 'with Lanmolas'), - 'Eastern Palace - Compass Chest': (0xe977, False, 'in Eastern Palace'), - 'Eastern Palace - Big Chest': (0xe97d, False, 'in Eastern Palace'), - 'Eastern Palace - Cannonball Chest': (0xe9b3, False, 'in Eastern Palace'), - 'Eastern Palace - Big Key Chest': (0xe9b9, False, 'in Eastern Palace'), - 'Eastern Palace - Map Chest': (0xe9f5, False, 'in Eastern Palace'), - 'Eastern Palace - Boss': (0x180150, False, 'with the Armos'), - 'Master Sword Pedestal': (0x289b0, False, 'at the pedestal'), - 'Hyrule Castle - Boomerang Chest': (0xe974, False, 'in Hyrule Castle'), - 'Hyrule Castle - Map Chest': (0xeb0c, False, 'in Hyrule Castle'), - "Hyrule Castle - Zelda's Chest": (0xeb09, False, 'in Hyrule Castle'), - 'Sewers - Dark Cross': (0xe96e, False, 'in the sewers'), - 'Sewers - Secret Room - Left': (0xeb5d, False, 'in the sewers'), - 'Sewers - Secret Room - Middle': (0xeb60, False, 'in the sewers'), - 'Sewers - Secret Room - Right': (0xeb63, False, 'in the sewers'), - 'Sanctuary': (0xea79, False, 'in Sanctuary'), - 'Castle Tower - Room 03': (0xeab5, False, 'in Castle Tower'), - 'Castle Tower - Dark Maze': (0xeab2, False, 'in Castle Tower'), - 'Old Man': (0xf69fa, False, 'with the old man'), - 'Spectacle Rock Cave': (0x180002, False, 'alone in a cave'), - 'Paradox Cave Lower - Far Left': (0xeb2a, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Left': (0xeb2d, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Right': (0xeb30, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Far Right': (0xeb33, False, 'in a cave with seven chests'), - 'Paradox Cave Lower - Middle': (0xeb36, False, 'in a cave with seven chests'), - 'Paradox Cave Upper - Left': (0xeb39, False, 'in a cave with seven chests'), - 'Paradox Cave Upper - Right': (0xeb3c, False, 'in a cave with seven chests'), - 'Spiral Cave': (0xe9bf, False, 'in spiral cave'), - 'Ether Tablet': (0x180016, False, 'at a monolith'), - 'Spectacle Rock': (0x180140, False, 'atop a rock'), - 'Tower of Hera - Basement Cage': (0x180162, False, 'in Tower of Hera'), - 'Tower of Hera - Map Chest': (0xe9ad, False, 'in Tower of Hera'), - 'Tower of Hera - Big Key Chest': (0xe9e6, False, 'in Tower of Hera'), - 'Tower of Hera - Compass Chest': (0xe9fb, False, 'in Tower of Hera'), - 'Tower of Hera - Big Chest': (0xe9f8, False, 'in Tower of Hera'), - 'Tower of Hera - Boss': (0x180152, False, 'with Moldorm'), - 'Pyramid': (0x180147, False, 'on the pyramid'), - 'Catfish': (0xee185, False, 'with a catfish'), - 'Stumpy': (0x330c7, False, 'with tree boy'), - 'Digging Game': (0x180148, False, 'underground'), - 'Bombos Tablet': (0x180017, False, 'at a monolith'), - 'Hype Cave - Top': (0xeb1e, False, 'near a bat-like man'), - 'Hype Cave - Middle Right': (0xeb21, False, 'near a bat-like man'), - 'Hype Cave - Middle Left': (0xeb24, False, 'near a bat-like man'), - 'Hype Cave - Bottom': (0xeb27, False, 'near a bat-like man'), - 'Hype Cave - Generous Guy': (0x180011, False, 'with a bat-like man'), - 'Peg Cave': (0x180006, False, 'alone in a cave'), - 'Pyramid Fairy - Left': (0xe980, False, 'near a fairy'), - 'Pyramid Fairy - Right': (0xe983, False, 'near a fairy'), - 'Brewery': (0xe9ec, False, 'alone in a home'), - 'C-Shaped House': (0xe9ef, False, 'alone in a home'), - 'Chest Game': (0xeda8, False, 'as a prize'), - 'Bumper Cave Ledge': (0x180146, False, 'on a ledge'), - 'Mire Shed - Left': (0xea73, False, 'near sparks'), - 'Mire Shed - Right': (0xea76, False, 'near sparks'), - 'Superbunny Cave - Top': (0xea7c, False, 'in a connection'), - 'Superbunny Cave - Bottom': (0xea7f, False, 'in a connection'), - 'Spike Cave': (0xea8b, False, 'beyond spikes'), - 'Hookshot Cave - Top Right': (0xeb51, False, 'across pits'), - 'Hookshot Cave - Top Left': (0xeb54, False, 'across pits'), - 'Hookshot Cave - Bottom Right': (0xeb5a, False, 'across pits'), - 'Hookshot Cave - Bottom Left': (0xeb57, False, 'across pits'), - 'Floating Island': (0x180141, False, 'on an island'), - 'Mimic Cave': (0xe9c5, False, 'in a cave of mimicry'), - 'Swamp Palace - Entrance': (0xea9d, False, 'in Swamp Palace'), - 'Swamp Palace - Map Chest': (0xe986, False, 'in Swamp Palace'), - 'Swamp Palace - Big Chest': (0xe989, False, 'in Swamp Palace'), - 'Swamp Palace - Compass Chest': (0xeaa0, False, 'in Swamp Palace'), - 'Swamp Palace - Big Key Chest': (0xeaa6, False, 'in Swamp Palace'), - 'Swamp Palace - West Chest': (0xeaa3, False, 'in Swamp Palace'), - 'Swamp Palace - Flooded Room - Left': (0xeaa9, False, 'in Swamp Palace'), - 'Swamp Palace - Flooded Room - Right': (0xeaac, False, 'in Swamp Palace'), - 'Swamp Palace - Waterfall Room': (0xeaaf, False, 'in Swamp Palace'), - 'Swamp Palace - Boss': (0x180154, False, 'with Arrghus'), - "Thieves' Town - Big Key Chest": (0xea04, False, "in Thieves' Town"), - "Thieves' Town - Map Chest": (0xea01, False, "in Thieves' Town"), - "Thieves' Town - Compass Chest": (0xea07, False, "in Thieves' Town"), - "Thieves' Town - Ambush Chest": (0xea0a, False, "in Thieves' Town"), - "Thieves' Town - Attic": (0xea0d, False, "in Thieves' Town"), - "Thieves' Town - Big Chest": (0xea10, False, "in Thieves' Town"), - "Thieves' Town - Blind's Cell": (0xea13, False, "in Thieves' Town"), - "Thieves' Town - Boss": (0x180156, False, 'with Blind'), - 'Skull Woods - Compass Chest': (0xe992, False, 'in Skull Woods'), - 'Skull Woods - Map Chest': (0xe99b, False, 'in Skull Woods'), - 'Skull Woods - Big Chest': (0xe998, False, 'in Skull Woods'), - 'Skull Woods - Pot Prison': (0xe9a1, False, 'in Skull Woods'), - 'Skull Woods - Pinball Room': (0xe9c8, False, 'in Skull Woods'), - 'Skull Woods - Big Key Chest': (0xe99e, False, 'in Skull Woods'), - 'Skull Woods - Bridge Room': (0xe9fe, False, 'near Mothula'), - 'Skull Woods - Boss': (0x180155, False, 'with Mothula'), - 'Ice Palace - Compass Chest': (0xe9d4, False, 'in Ice Palace'), - 'Ice Palace - Freezor Chest': (0xe995, False, 'in Ice Palace'), - 'Ice Palace - Big Chest': (0xe9aa, False, 'in Ice Palace'), - 'Ice Palace - Iced T Room': (0xe9e3, False, 'in Ice Palace'), - 'Ice Palace - Spike Room': (0xe9e0, False, 'in Ice Palace'), - 'Ice Palace - Big Key Chest': (0xe9a4, False, 'in Ice Palace'), - 'Ice Palace - Map Chest': (0xe9dd, False, 'in Ice Palace'), - 'Ice Palace - Boss': (0x180157, False, 'with Kholdstare'), - 'Misery Mire - Big Chest': (0xea67, False, 'in Misery Mire'), - 'Misery Mire - Map Chest': (0xea6a, False, 'in Misery Mire'), - 'Misery Mire - Main Lobby': (0xea5e, False, 'in Misery Mire'), - 'Misery Mire - Bridge Chest': (0xea61, False, 'in Misery Mire'), - 'Misery Mire - Spike Chest': (0xe9da, False, 'in Misery Mire'), - 'Misery Mire - Compass Chest': (0xea64, False, 'in Misery Mire'), - 'Misery Mire - Big Key Chest': (0xea6d, False, 'in Misery Mire'), - 'Misery Mire - Boss': (0x180158, False, 'with Vitreous'), - 'Turtle Rock - Compass Chest': (0xea22, False, 'in Turtle Rock'), - 'Turtle Rock - Roller Room - Left': (0xea1c, False, 'in Turtle Rock'), - 'Turtle Rock - Roller Room - Right': (0xea1f, False, 'in Turtle Rock'), - 'Turtle Rock - Chain Chomps': (0xea16, False, 'in Turtle Rock'), - 'Turtle Rock - Big Key Chest': (0xea25, False, 'in Turtle Rock'), - 'Turtle Rock - Big Chest': (0xea19, False, 'in Turtle Rock'), - 'Turtle Rock - Crystaroller Room': (0xea34, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Bottom Left': (0xea31, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Bottom Right': (0xea2e, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Top Left': (0xea2b, False, 'in Turtle Rock'), - 'Turtle Rock - Eye Bridge - Top Right': (0xea28, False, 'in Turtle Rock'), - 'Turtle Rock - Boss': (0x180159, False, 'with Trinexx'), - 'Palace of Darkness - Shooter Room': (0xea5b, False, 'in Palace of Darkness'), - 'Palace of Darkness - The Arena - Bridge': (0xea3d, False, 'in Palace of Darkness'), - 'Palace of Darkness - Stalfos Basement': (0xea49, False, 'in Palace of Darkness'), - 'Palace of Darkness - Big Key Chest': (0xea37, False, 'in Palace of Darkness'), - 'Palace of Darkness - The Arena - Ledge': (0xea3a, False, 'in Palace of Darkness'), - 'Palace of Darkness - Map Chest': (0xea52, False, 'in Palace of Darkness'), - 'Palace of Darkness - Compass Chest': (0xea43, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Basement - Left': (0xea4c, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Basement - Right': (0xea4f, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Maze - Top': (0xea55, False, 'in Palace of Darkness'), - 'Palace of Darkness - Dark Maze - Bottom': (0xea58, False, 'in Palace of Darkness'), - 'Palace of Darkness - Big Chest': (0xea40, False, 'in Palace of Darkness'), - 'Palace of Darkness - Harmless Hellway': (0xea46, False, 'in Palace of Darkness'), - 'Palace of Darkness - Boss': (0x180153, False, 'with Helmasaur King'), - "Ganons Tower - Bob's Torch": (0x180161, False, "in Ganon's Tower"), - 'Ganons Tower - Hope Room - Left': (0xead9, False, "in Ganon's Tower"), - 'Ganons Tower - Hope Room - Right': (0xeadc, False, "in Ganon's Tower"), - 'Ganons Tower - Tile Room': (0xeae2, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Top Left': (0xeae5, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Top Right': (0xeae8, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Bottom Left': (0xeaeb, False, "in Ganon's Tower"), - 'Ganons Tower - Compass Room - Bottom Right': (0xeaee, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Top Left': (0xeab8, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Top Right': (0xeabb, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Bottom Left': (0xeabe, False, "in Ganon's Tower"), - 'Ganons Tower - DMs Room - Bottom Right': (0xeac1, False, "in Ganon's Tower"), - 'Ganons Tower - Map Chest': (0xead3, False, "in Ganon's Tower"), - 'Ganons Tower - Firesnake Room': (0xead0, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Top Left': (0xeac4, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Top Right': (0xeac7, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Bottom Left': (0xeaca, False, "in Ganon's Tower"), - 'Ganons Tower - Randomizer Room - Bottom Right': (0xeacd, False, "in Ganon's Tower"), - "Ganons Tower - Bob's Chest": (0xeadf, False, "in Ganon's Tower"), - 'Ganons Tower - Big Chest': (0xead6, False, "in Ganon's Tower"), - 'Ganons Tower - Big Key Room - Left': (0xeaf4, False, "in Ganon's Tower"), - 'Ganons Tower - Big Key Room - Right': (0xeaf7, False, "in Ganon's Tower"), - 'Ganons Tower - Big Key Chest': (0xeaf1, False, "in Ganon's Tower"), - 'Ganons Tower - Mini Helmasaur Room - Left': (0xeafd, False, "atop Ganon's Tower"), - 'Ganons Tower - Mini Helmasaur Room - Right': (0xeb00, False, "atop Ganon's Tower"), - 'Ganons Tower - Pre-Moldorm Chest': (0xeb03, False, "atop Ganon's Tower"), - 'Ganons Tower - Validation Chest': (0xeb06, False, "atop Ganon's Tower"), - 'Ganon': (None, False, 'from me'), - 'Agahnim 1': (None, False, 'from Ganon\'s wizardry form'), - 'Agahnim 2': (None, False, 'from Ganon\'s wizardry form'), - 'Floodgate': (None, False, None), - 'Frog': (None, False, None), - 'Missing Smith': (None, False, None), - 'Dark Blacksmith Ruins': (None, False, None), - 'Eastern Palace - Prize': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], True, 'Eastern Palace'), - 'Desert Palace - Prize': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], True, 'Desert Palace'), - 'Tower of Hera - Prize': ([0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], True, 'Tower of Hera'), - 'Palace of Darkness - Prize': ([0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], True, 'Palace of Darkness'), - 'Swamp Palace - Prize': ([0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], True, 'Swamp Palace'), - 'Thieves\' Town - Prize': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], True, 'Thieves\' Town'), - 'Skull Woods - Prize': ([0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], True, 'Skull Woods'), - 'Ice Palace - Prize': ([0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], True, 'Ice Palace'), - 'Misery Mire - Prize': ([0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], True, 'Misery Mire'), - 'Turtle Rock - Prize': ([0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], True, 'Turtle Rock')} +location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'), + 'Bottle Merchant': (0x2eb18, 0x186339, False, 'with a merchant'), + 'Flute Spot': (0x18014a, 0x18633d, False, 'underground'), + 'Sunken Treasure': (0x180145, 0x186354, False, 'underwater'), + 'Purple Chest': (0x33d68, 0x186359, False, 'from a box'), + "Blind's Hideout - Top": (0xeb0f, 0x1862e3, False, 'in a basement'), + "Blind's Hideout - Left": (0xeb12, 0x1862e6, False, 'in a basement'), + "Blind's Hideout - Right": (0xeb15, 0x1862e9, False, 'in a basement'), + "Blind's Hideout - Far Left": (0xeb18, 0x1862ec, False, 'in a basement'), + "Blind's Hideout - Far Right": (0xeb1b, 0x1862ef, False, 'in a basement'), + "Link's Uncle": (0x2df45, 0x18635f, False, 'with your uncle'), + 'Secret Passage': (0xe971, 0x186145, False, 'near your uncle'), + 'King Zora': (0xee1c3, 0x186360, False, 'at a high price'), + "Zora's Ledge": (0x180149, 0x186358, False, 'near Zora'), + 'Waterfall Fairy - Left': (0xe9b0, 0x186184, False, 'near a fairy'), + 'Waterfall Fairy - Right': (0xe9d1, 0x1861a5, False, 'near a fairy'), + "King's Tomb": (0xe97a, 0x18614e, False, 'alone in a cave'), + 'Floodgate Chest': (0xe98c, 0x186160, False, 'in the dam'), + "Link's House": (0xe9bc, 0x186190, False, 'in your home'), + 'Kakariko Tavern': (0xe9ce, 0x1861a2, False, 'in the bar'), + 'Chicken House': (0xe9e9, 0x1861bd, False, 'near poultry'), + "Aginah's Cave": (0xe9f2, 0x1861c6, False, 'with Aginah'), + "Sahasrahla's Hut - Left": (0xea82, 0x186256, False, 'near the elder'), + "Sahasrahla's Hut - Middle": (0xea85, 0x186259, False, 'near the elder'), + "Sahasrahla's Hut - Right": (0xea88, 0x18625c, False, 'near the elder'), + 'Sahasrahla': (0x2f1fc, 0x186365, False, 'with the elder'), + 'Kakariko Well - Top': (0xea8e, 0x186262, False, 'in a well'), + 'Kakariko Well - Left': (0xea91, 0x186265, False, 'in a well'), + 'Kakariko Well - Middle': (0xea94, 0x186268, False, 'in a well'), + 'Kakariko Well - Right': (0xea97, 0x18626b, False, 'in a well'), + 'Kakariko Well - Bottom': (0xea9a, 0x18626e, False, 'in a well'), + 'Blacksmith': (0x18002a, 0x186366, False, 'with the smith'), + 'Magic Bat': (0x180015, 0x18635e, False, 'with the bat'), + 'Sick Kid': (0x339cf, 0x186367, False, 'with the sick'), + 'Hobo': (0x33e7d, 0x186368, False, 'with the hobo'), + 'Lost Woods Hideout': (0x180000, 0x186348, False, 'near a thief'), + 'Lumberjack Tree': (0x180001, 0x186349, False, 'in a hole'), + 'Cave 45': (0x180003, 0x18634b, False, 'alone in a cave'), + 'Graveyard Cave': (0x180004, 0x18634c, False, 'alone in a cave'), + 'Checkerboard Cave': (0x180005, 0x18634d, False, 'alone in a cave'), + 'Mini Moldorm Cave - Far Left': (0xeb42, 0x186316, False, 'near Moldorms'), + 'Mini Moldorm Cave - Left': (0xeb45, 0x186319, False, 'near Moldorms'), + 'Mini Moldorm Cave - Right': (0xeb48, 0x18631c, False, 'near Moldorms'), + 'Mini Moldorm Cave - Far Right': (0xeb4b, 0x18631f, False, 'near Moldorms'), + 'Mini Moldorm Cave - Generous Guy': (0x180010, 0x18635a, False, 'near Moldorms'), + 'Ice Rod Cave': (0xeb4e, 0x186322, False, 'in a frozen cave'), + 'Bonk Rock Cave': (0xeb3f, 0x186313, False, 'alone in a cave'), + 'Library': (0x180012, 0x18635c, False, 'near books'), + 'Potion Shop': (0x180014, 0x18635d, False, 'near potions'), + 'Lake Hylia Island': (0x180144, 0x186353, False, 'on an island'), + 'Maze Race': (0x180142, 0x186351, False, 'at the race'), + 'Desert Ledge': (0x180143, 0x186352, False, 'in the desert'), + 'Desert Palace - Big Chest': (0xe98f, 0x186163, False, 'in Desert Palace'), + 'Desert Palace - Torch': (0x180160, 0x186362, False, 'in Desert Palace'), + 'Desert Palace - Map Chest': (0xe9b6, 0x18618a, False, 'in Desert Palace'), + 'Desert Palace - Compass Chest': (0xe9cb, 0x18619f, False, 'in Desert Palace'), + 'Desert Palace - Big Key Chest': (0xe9c2, 0x186196, False, 'in Desert Palace'), + 'Desert Palace - Boss': (0x180151, 0x18633f, False, 'with Lanmolas'), + 'Eastern Palace - Compass Chest': (0xe977, 0x18614b, False, 'in Eastern Palace'), + 'Eastern Palace - Big Chest': (0xe97d, 0x186151, False, 'in Eastern Palace'), + 'Eastern Palace - Cannonball Chest': (0xe9b3, 0x186187, False, 'in Eastern Palace'), + 'Eastern Palace - Big Key Chest': (0xe9b9, 0x18618d, False, 'in Eastern Palace'), + 'Eastern Palace - Map Chest': (0xe9f5, 0x1861c9, False, 'in Eastern Palace'), + 'Eastern Palace - Boss': (0x180150, 0x18633e, False, 'with the Armos'), + 'Master Sword Pedestal': (0x289b0, 0x186369, False, 'at the pedestal'), + 'Hyrule Castle - Boomerang Chest': (0xe974, 0x186148, False, 'in Hyrule Castle'), + 'Hyrule Castle - Map Chest': (0xeb0c, 0x1862e0, False, 'in Hyrule Castle'), + "Hyrule Castle - Zelda's Chest": (0xeb09, 0x1862dd, False, 'in Hyrule Castle'), + 'Sewers - Dark Cross': (0xe96e, 0x186142, False, 'in the sewers'), + 'Sewers - Secret Room - Left': (0xeb5d, 0x186331, False, 'in the sewers'), + 'Sewers - Secret Room - Middle': (0xeb60, 0x186334, False, 'in the sewers'), + 'Sewers - Secret Room - Right': (0xeb63, 0x186337, False, 'in the sewers'), + 'Sanctuary': (0xea79, 0x18624d, False, 'in Sanctuary'), + 'Castle Tower - Room 03': (0xeab5, 0x186289, False, 'in Castle Tower'), + 'Castle Tower - Dark Maze': (0xeab2, 0x186286, False, 'in Castle Tower'), + 'Old Man': (0xf69fa, 0x186364, False, 'with the old man'), + 'Spectacle Rock Cave': (0x180002, 0x18634a, False, 'alone in a cave'), + 'Paradox Cave Lower - Far Left': (0xeb2a, 0x1862fe, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Left': (0xeb2d, 0x186301, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Right': (0xeb30, 0x186304, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Far Right': (0xeb33, 0x186307, False, 'in a cave with seven chests'), + 'Paradox Cave Lower - Middle': (0xeb36, 0x18630a, False, 'in a cave with seven chests'), + 'Paradox Cave Upper - Left': (0xeb39, 0x18630d, False, 'in a cave with seven chests'), + 'Paradox Cave Upper - Right': (0xeb3c, 0x186310, False, 'in a cave with seven chests'), + 'Spiral Cave': (0xe9bf, 0x186193, False, 'in spiral cave'), + 'Ether Tablet': (0x180016, 0x18633b, False, 'at a monolith'), + 'Spectacle Rock': (0x180140, 0x18634f, False, 'atop a rock'), + 'Tower of Hera - Basement Cage': (0x180162, 0x18633a, False, 'in Tower of Hera'), + 'Tower of Hera - Map Chest': (0xe9ad, 0x186181, False, 'in Tower of Hera'), + 'Tower of Hera - Big Key Chest': (0xe9e6, 0x1861ba, False, 'in Tower of Hera'), + 'Tower of Hera - Compass Chest': (0xe9fb, 0x1861cf, False, 'in Tower of Hera'), + 'Tower of Hera - Big Chest': (0xe9f8, 0x1861cc, False, 'in Tower of Hera'), + 'Tower of Hera - Boss': (0x180152, 0x186340, False, 'with Moldorm'), + 'Pyramid': (0x180147, 0x186356, False, 'on the pyramid'), + 'Catfish': (0xee185, 0x186361, False, 'with a catfish'), + 'Stumpy': (0x330c7, 0x18636a, False, 'with tree boy'), + 'Digging Game': (0x180148, 0x186357, False, 'underground'), + 'Bombos Tablet': (0x180017, 0x18633c, False, 'at a monolith'), + 'Hype Cave - Top': (0xeb1e, 0x1862f2, False, 'near a bat-like man'), + 'Hype Cave - Middle Right': (0xeb21, 0x1862f5, False, 'near a bat-like man'), + 'Hype Cave - Middle Left': (0xeb24, 0x1862f8, False, 'near a bat-like man'), + 'Hype Cave - Bottom': (0xeb27, 0x1862fb, False, 'near a bat-like man'), + 'Hype Cave - Generous Guy': (0x180011, 0x18635b, False, 'with a bat-like man'), + 'Peg Cave': (0x180006, 0x18634e, False, 'alone in a cave'), + 'Pyramid Fairy - Left': (0xe980, 0x186154, False, 'near a fairy'), + 'Pyramid Fairy - Right': (0xe983, 0x186157, False, 'near a fairy'), + 'Brewery': (0xe9ec, 0x1861c0, False, 'alone in a home'), + 'C-Shaped House': (0xe9ef, 0x1861c3, False, 'alone in a home'), + 'Chest Game': (0xeda8, 0x18636b, False, 'as a prize'), + 'Bumper Cave Ledge': (0x180146, 0x186355, False, 'on a ledge'), + 'Mire Shed - Left': (0xea73, 0x186247, False, 'near sparks'), + 'Mire Shed - Right': (0xea76, 0x18624a, False, 'near sparks'), + 'Superbunny Cave - Top': (0xea7c, 0x186250, False, 'in a connection'), + 'Superbunny Cave - Bottom': (0xea7f, 0x186253, False, 'in a connection'), + 'Spike Cave': (0xea8b, 0x18625f, False, 'beyond spikes'), + 'Hookshot Cave - Top Right': (0xeb51, 0x186325, False, 'across pits'), + 'Hookshot Cave - Top Left': (0xeb54, 0x186328, False, 'across pits'), + 'Hookshot Cave - Bottom Right': (0xeb5a, 0x18632e, False, 'across pits'), + 'Hookshot Cave - Bottom Left': (0xeb57, 0x18632b, False, 'across pits'), + 'Floating Island': (0x180141, 0x186350, False, 'on an island'), + 'Mimic Cave': (0xe9c5, 0x186199, False, 'in a cave of mimicry'), + 'Swamp Palace - Entrance': (0xea9d, 0x186271, False, 'in Swamp Palace'), + 'Swamp Palace - Map Chest': (0xe986, 0x18615a, False, 'in Swamp Palace'), + 'Swamp Palace - Big Chest': (0xe989, 0x18615d, False, 'in Swamp Palace'), + 'Swamp Palace - Compass Chest': (0xeaa0, 0x186274, False, 'in Swamp Palace'), + 'Swamp Palace - Big Key Chest': (0xeaa6, 0x18627a, False, 'in Swamp Palace'), + 'Swamp Palace - West Chest': (0xeaa3, 0x186277, False, 'in Swamp Palace'), + 'Swamp Palace - Flooded Room - Left': (0xeaa9, 0x18627d, False, 'in Swamp Palace'), + 'Swamp Palace - Flooded Room - Right': (0xeaac, 0x186280, False, 'in Swamp Palace'), + 'Swamp Palace - Waterfall Room': (0xeaaf, 0x186283, False, 'in Swamp Palace'), + 'Swamp Palace - Boss': (0x180154, 0x186342, False, 'with Arrghus'), + "Thieves' Town - Big Key Chest": (0xea04, 0x1861d8, False, "in Thieves' Town"), + "Thieves' Town - Map Chest": (0xea01, 0x1861d5, False, "in Thieves' Town"), + "Thieves' Town - Compass Chest": (0xea07, 0x1861db, False, "in Thieves' Town"), + "Thieves' Town - Ambush Chest": (0xea0a, 0x1861de, False, "in Thieves' Town"), + "Thieves' Town - Attic": (0xea0d, 0x1861e1, False, "in Thieves' Town"), + "Thieves' Town - Big Chest": (0xea10, 0x1861e4, False, "in Thieves' Town"), + "Thieves' Town - Blind's Cell": (0xea13, 0x1861e7, False, "in Thieves' Town"), + "Thieves' Town - Boss": (0x180156, 0x186344, False, 'with Blind'), + 'Skull Woods - Compass Chest': (0xe992, 0x186166, False, 'in Skull Woods'), + 'Skull Woods - Map Chest': (0xe99b, 0x18616f, False, 'in Skull Woods'), + 'Skull Woods - Big Chest': (0xe998, 0x18616c, False, 'in Skull Woods'), + 'Skull Woods - Pot Prison': (0xe9a1, 0x186175, False, 'in Skull Woods'), + 'Skull Woods - Pinball Room': (0xe9c8, 0x18619c, False, 'in Skull Woods'), + 'Skull Woods - Big Key Chest': (0xe99e, 0x186172, False, 'in Skull Woods'), + 'Skull Woods - Bridge Room': (0xe9fe, 0x1861d2, False, 'near Mothula'), + 'Skull Woods - Boss': (0x180155, 0x186343, False, 'with Mothula'), + 'Ice Palace - Compass Chest': (0xe9d4, 0x1861a8, False, 'in Ice Palace'), + 'Ice Palace - Freezor Chest': (0xe995, 0x186169, False, 'in Ice Palace'), + 'Ice Palace - Big Chest': (0xe9aa, 0x18617e, False, 'in Ice Palace'), + 'Ice Palace - Iced T Room': (0xe9e3, 0x1861b7, False, 'in Ice Palace'), + 'Ice Palace - Spike Room': (0xe9e0, 0x1861b4, False, 'in Ice Palace'), + 'Ice Palace - Big Key Chest': (0xe9a4, 0x186178, False, 'in Ice Palace'), + 'Ice Palace - Map Chest': (0xe9dd, 0x1861b1, False, 'in Ice Palace'), + 'Ice Palace - Boss': (0x180157, 0x186345, False, 'with Kholdstare'), + 'Misery Mire - Big Chest': (0xea67, 0x18623b, False, 'in Misery Mire'), + 'Misery Mire - Map Chest': (0xea6a, 0x18623e, False, 'in Misery Mire'), + 'Misery Mire - Main Lobby': (0xea5e, 0x186232, False, 'in Misery Mire'), + 'Misery Mire - Bridge Chest': (0xea61, 0x186235, False, 'in Misery Mire'), + 'Misery Mire - Spike Chest': (0xe9da, 0x1861ae, False, 'in Misery Mire'), + 'Misery Mire - Compass Chest': (0xea64, 0x186238, False, 'in Misery Mire'), + 'Misery Mire - Big Key Chest': (0xea6d, 0x186241, False, 'in Misery Mire'), + 'Misery Mire - Boss': (0x180158, 0x186346, False, 'with Vitreous'), + 'Turtle Rock - Compass Chest': (0xea22, 0x1861f6, False, 'in Turtle Rock'), + 'Turtle Rock - Roller Room - Left': (0xea1c, 0x1861f0, False, 'in Turtle Rock'), + 'Turtle Rock - Roller Room - Right': (0xea1f, 0x1861f3, False, 'in Turtle Rock'), + 'Turtle Rock - Chain Chomps': (0xea16, 0x1861ea, False, 'in Turtle Rock'), + 'Turtle Rock - Big Key Chest': (0xea25, 0x1861f9, False, 'in Turtle Rock'), + 'Turtle Rock - Big Chest': (0xea19, 0x1861ed, False, 'in Turtle Rock'), + 'Turtle Rock - Crystaroller Room': (0xea34, 0x186208, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Bottom Left': (0xea31, 0x186205, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Bottom Right': (0xea2e, 0x186202, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Top Left': (0xea2b, 0x1861ff, False, 'in Turtle Rock'), + 'Turtle Rock - Eye Bridge - Top Right': (0xea28, 0x1861fc, False, 'in Turtle Rock'), + 'Turtle Rock - Boss': (0x180159, 0x186347, False, 'with Trinexx'), + 'Palace of Darkness - Shooter Room': (0xea5b, 0x18622f, False, 'in Palace of Darkness'), + 'Palace of Darkness - The Arena - Bridge': (0xea3d, 0x186211, False, 'in Palace of Darkness'), + 'Palace of Darkness - Stalfos Basement': (0xea49, 0x18621d, False, 'in Palace of Darkness'), + 'Palace of Darkness - Big Key Chest': (0xea37, 0x18620b, False, 'in Palace of Darkness'), + 'Palace of Darkness - The Arena - Ledge': (0xea3a, 0x18620e, False, 'in Palace of Darkness'), + 'Palace of Darkness - Map Chest': (0xea52, 0x186226, False, 'in Palace of Darkness'), + 'Palace of Darkness - Compass Chest': (0xea43, 0x186217, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Basement - Left': (0xea4c, 0x186220, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Basement - Right': (0xea4f, 0x186223, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Maze - Top': (0xea55, 0x186229, False, 'in Palace of Darkness'), + 'Palace of Darkness - Dark Maze - Bottom': (0xea58, 0x18622c, False, 'in Palace of Darkness'), + 'Palace of Darkness - Big Chest': (0xea40, 0x186214, False, 'in Palace of Darkness'), + 'Palace of Darkness - Harmless Hellway': (0xea46, 0x18621a, False, 'in Palace of Darkness'), + 'Palace of Darkness - Boss': (0x180153, 0x186341, False, 'with Helmasaur King'), + "Ganons Tower - Bob's Torch": (0x180161, 0x186363, False, "in Ganon's Tower"), + 'Ganons Tower - Hope Room - Left': (0xead9, 0x1862ad, False, "in Ganon's Tower"), + 'Ganons Tower - Hope Room - Right': (0xeadc, 0x1862b0, False, "in Ganon's Tower"), + 'Ganons Tower - Tile Room': (0xeae2, 0x1862b6, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Top Left': (0xeae5, 0x1862b9, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Top Right': (0xeae8, 0x1862bc, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Bottom Left': (0xeaeb, 0x1862bf, False, "in Ganon's Tower"), + 'Ganons Tower - Compass Room - Bottom Right': (0xeaee, 0x1862c2, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Top Left': (0xeab8, 0x18628c, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Top Right': (0xeabb, 0x18628f, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Bottom Left': (0xeabe, 0x186292, False, "in Ganon's Tower"), + 'Ganons Tower - DMs Room - Bottom Right': (0xeac1, 0x186295, False, "in Ganon's Tower"), + 'Ganons Tower - Map Chest': (0xead3, 0x1862a7, False, "in Ganon's Tower"), + 'Ganons Tower - Firesnake Room': (0xead0, 0x1862a4, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Top Left': (0xeac4, 0x186298, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Top Right': (0xeac7, 0x18629b, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Bottom Left': (0xeaca, 0x18629e, False, "in Ganon's Tower"), + 'Ganons Tower - Randomizer Room - Bottom Right': (0xeacd, 0x1862a1, False, "in Ganon's Tower"), + "Ganons Tower - Bob's Chest": (0xeadf, 0x1862b3, False, "in Ganon's Tower"), + 'Ganons Tower - Big Chest': (0xead6, 0x1862aa, False, "in Ganon's Tower"), + 'Ganons Tower - Big Key Room - Left': (0xeaf4, 0x1862c8, False, "in Ganon's Tower"), + 'Ganons Tower - Big Key Room - Right': (0xeaf7, 0x1862cb, False, "in Ganon's Tower"), + 'Ganons Tower - Big Key Chest': (0xeaf1, 0x1862c5, False, "in Ganon's Tower"), + 'Ganons Tower - Mini Helmasaur Room - Left': (0xeafd, 0x1862d1, False, "atop Ganon's Tower"), + 'Ganons Tower - Mini Helmasaur Room - Right': (0xeb00, 0x1862d4, False, "atop Ganon's Tower"), + 'Ganons Tower - Pre-Moldorm Chest': (0xeb03, 0x1862d7, False, "atop Ganon's Tower"), + 'Ganons Tower - Validation Chest': (0xeb06, 0x1862da, False, "atop Ganon's Tower"), + 'Ganon': (None, None, False, 'from me'), + 'Agahnim 1': (None, None, False, 'from Ganon\'s wizardry form'), + 'Agahnim 2': (None, None, False, 'from Ganon\'s wizardry form'), + 'Floodgate': (None, None, False, None), + 'Frog': (None, None, False, None), + 'Missing Smith': (None, None, False, None), + 'Dark Blacksmith Ruins': (None, None, False, None), + 'Eastern Palace - Prize': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], None, True, 'Eastern Palace'), + 'Desert Palace - Prize': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], None, True, 'Desert Palace'), + 'Tower of Hera - Prize': ( + [0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], None, True, 'Tower of Hera'), + 'Palace of Darkness - Prize': ( + [0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], None, True, 'Palace of Darkness'), + 'Swamp Palace - Prize': ( + [0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], None, True, 'Swamp Palace'), + 'Thieves\' Town - Prize': ( + [0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], None, True, 'Thieves\' Town'), + 'Skull Woods - Prize': ( + [0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], None, True, 'Skull Woods'), + 'Ice Palace - Prize': ( + [0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], None, True, 'Ice Palace'), + 'Misery Mire - Prize': ( + [0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], None, True, 'Misery Mire'), + 'Turtle Rock - Prize': ( + [0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], None, True, 'Turtle Rock')} + +lookup_id_to_name = {data[0]: name for name, data in location_table.items() if type(data[0]) == int} +lookup_id_to_name[-1] = "cheat console" diff --git a/Rom.py b/Rom.py index e41f0f4a..8d257ee2 100644 --- a/Rom.py +++ b/Rom.py @@ -1,3 +1,4 @@ +import bisect import io import json import hashlib @@ -5,45 +6,60 @@ import logging import os import random import struct +import sys import subprocess -from BaseClasses import ShopType, Region, Location, Item +from BaseClasses import CollectionState, ShopType, Region, Location from Dungeons import dungeon_music_addresses +from Regions import location_table from Text import MultiByteTextMapper, CompressedTextMapper, text_addresses, Credits, TextTable from Text import Uncle_texts, Ganon1_texts, TavernMan_texts, Sahasrahla2_texts, Triforce_texts, Blind_texts, BombShop2_texts, junk_texts from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths_texts, DeathMountain_texts, LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names from Utils import output_path, local_path, int16_as_bytes, int32_as_bytes, snes_to_pc -from Items import ItemFactory, item_table +from Items import ItemFactory from EntranceShuffle import door_addresses JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'ac23ab12e7c442515d51370642772c3b' +# RANDOMIZERBASEHASH = '1907d4caccffe60fc69940cfa11b2dab' class JsonRom(object): - def __init__(self): - self.name = None + def __init__(self, name=None, hash=None): + self.name = name + self.hash = hash + self.orig_buffer = None self.patches = {} + self.addresses = [] def write_byte(self, address, value): - self.patches[str(address)] = [value] + self.write_bytes(address, [value]) def write_bytes(self, startaddress, values): if not values: return - self.patches[str(startaddress)] = list(values) + values = list(values) - def write_int16(self, address, value): - self.write_bytes(address, int16_as_bytes(value)) + pos = bisect.bisect_right(self.addresses, startaddress) + intervalstart = self.addresses[pos-1] if pos else None + intervalpatch = self.patches[str(intervalstart)] if pos else None - def write_int16s(self, startaddress, values): - byte_list = [int16_as_bytes(value) for value in values] - self.patches[str(startaddress)] = [byte for bytes in byte_list for byte in bytes] - - def write_int32(self, address, value): - self.write_bytes(address, int32_as_bytes(value)) + if pos and startaddress <= intervalstart + len(intervalpatch): # merge with previous segment + offset = startaddress - intervalstart + intervalpatch[offset:offset+len(values)] = values + startaddress = intervalstart + values = intervalpatch + else: # new segment + self.addresses.insert(pos, startaddress) + self.patches[str(startaddress)] = values + pos = pos + 1 + + while pos < len(self.addresses) and self.addresses[pos] <= startaddress + len(values): # merge the next segment into this one + intervalstart = self.addresses[pos] + values.extend(self.patches[str(intervalstart)][startaddress+len(values)-intervalstart:]) + del self.patches[str(intervalstart)] + del self.addresses[pos] def write_to_file(self, file): with open(file, 'w') as stream: @@ -54,16 +70,18 @@ class JsonRom(object): h.update(json.dumps([self.patches]).encode('utf-8')) return h.hexdigest() - - class LocalRom(object): - def __init__(self, file, patch=True): - self.name = None + def __init__(self, file, extendedmsu=False, patch=True, name=None, hash=None): + self.name = name + self.hash = hash + self.orig_buffer = None + self.extendedmsu = extendedmsu with open(file, 'rb') as stream: self.buffer = read_rom(stream) if patch: - self.patch_base_rom() + self.patch_base_rom(extendedmsu) + self.orig_buffer = self.buffer.copy() def write_byte(self, address, value): self.buffer[address] = value @@ -72,25 +90,19 @@ class LocalRom(object): for i, value in enumerate(values): self.write_byte(startaddress + i, value) - def write_int16(self, address, value): - self.write_bytes(address, int16_as_bytes(value)) - - def write_int16s(self, startaddress, values): - for i, value in enumerate(values): - self.write_int16(startaddress + (i * 2), value) - - def write_int32(self, address, value): - self.write_bytes(address, int32_as_bytes(value)) - - def write_int32s(self, startaddress, values): - for i, value in enumerate(values): - self.write_int32(startaddress + (i * 2), value) - def write_to_file(self, file): with open(file, 'wb') as outfile: outfile.write(self.buffer) - def patch_base_rom(self): + @staticmethod + def fromJsonRom(rom, file, rom_size = 0x200000, extendedmsu=False): + ret = LocalRom(file, extendedmsu, True, rom.name, rom.hash) + ret.buffer.extend(bytearray([0x00]) * (rom_size - len(ret.buffer))) + for address, values in rom.patches.items(): + ret.write_bytes(int(address), values) + return ret + + def patch_base_rom(self, extendedmsu): # verify correct checksum of baserom basemd5 = hashlib.md5() basemd5.update(self.buffer) @@ -98,10 +110,10 @@ class LocalRom(object): logging.getLogger('').warning('Supplied Base Rom does not match known MD5 for JAP(1.0) release. Will try to patch anyway.') # extend to 2MB - self.buffer.extend(bytearray([0x00] * (0x200000 - len(self.buffer)))) + self.buffer.extend(bytearray([0x00]) * (0x200000 - len(self.buffer))) # load randomizer patches - with open(local_path('data/base2current.json'), 'r') as stream: + with open(local_path('data/base2current.json') if not extendedmsu else local_path('data/base2current_extendedmsu.json'), 'r') as stream: patches = json.load(stream) for patch in patches: if isinstance(patch, dict): @@ -109,28 +121,10 @@ class LocalRom(object): self.write_bytes(int(baseaddress), values) # verify md5 - patchedmd5 = hashlib.md5() - patchedmd5.update(self.buffer) - if RANDOMIZERBASEHASH != patchedmd5.hexdigest(): - raise RuntimeError('Provided Base Rom unsuitable for patching. Please provide a JAP(1.0) "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" rom to use as a base.') - - def patch_enemizer(self, rando_patch, base_enemizer_patch_path, enemizer_patch): - # extend to 4MB - self.buffer.extend(bytearray([0x00] * (0x400000 - len(self.buffer)))) - - # apply randomizer patches - for address, values in rando_patch.items(): - self.write_bytes(int(address), values) - - # load base enemizer patches - with open(base_enemizer_patch_path, 'r') as f: - base_enemizer_patch = json.load(f) - for patch in base_enemizer_patch: - self.write_bytes(patch["address"], patch["patchData"]) - - # apply enemizer patches - for patch in enemizer_patch: - self.write_bytes(patch["address"], patch["patchData"]) + # patchedmd5 = hashlib.md5() + # patchedmd5.update(self.buffer) + # if RANDOMIZERBASEHASH != patchedmd5.hexdigest(): + # raise RuntimeError('Provided Base Rom unsuitable for patching. Please provide a JAP(1.0) "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" rom to use as a base.') def write_crc(self): crc = (sum(self.buffer[:0x7FDC] + self.buffer[0x7FE0:]) + 0x01FE) & 0xFFFF @@ -142,6 +136,20 @@ class LocalRom(object): h.update(self.buffer) return h.hexdigest() +def write_int16(rom, address, value): + rom.write_bytes(address, int16_as_bytes(value)) + +def write_int32(rom, address, value): + rom.write_bytes(address, int32_as_bytes(value)) + +def write_int16s(rom, startaddress, values): + for i, value in enumerate(values): + write_int16(rom, startaddress + (i * 2), value) + +def write_int32s(rom, startaddress, values): + for i, value in enumerate(values): + write_int32(rom, startaddress + (i * 4), value) + def read_rom(stream): "Reads rom into bytearray and strips off any smc header" buffer = bytearray(stream.read()) @@ -149,25 +157,28 @@ def read_rom(stream): buffer = buffer[0x200:] return buffer -def get_enemizer_patch(world, player, rom, baserom_path, enemizercli, shuffleenemies, enemy_health, enemy_damage, shufflepalette, shufflepots): +def patch_enemizer(world, player, rom, baserom_path, enemizercli, shufflepots, random_sprite_on_hit, extendedmsu): baserom_path = os.path.abspath(baserom_path) - basepatch_path = os.path.abspath(local_path('data/base2current.json')) - randopatch_path = os.path.abspath(output_path('enemizer_randopatch.json')) - options_path = os.path.abspath(output_path('enemizer_options.json')) - enemizer_output_path = os.path.abspath(output_path('enemizer_output.json')) + basepatch_path = os.path.abspath( + local_path('data/base2current.json') if not extendedmsu else local_path('data/base2current_extendedmsu.json')) + enemizer_basepatch_path = os.path.join(os.path.dirname(enemizercli), "enemizerBasePatch.json") + randopatch_path = os.path.abspath(output_path(f'enemizer_randopatch_{player}.json')) + options_path = os.path.abspath(output_path(f'enemizer_options_{player}.json')) + enemizer_output_path = os.path.abspath(output_path(f'enemizer_output_{player}.json')) # write options file for enemizer options = { - 'RandomizeEnemies': shuffleenemies, + 'RandomizeEnemies': world.enemy_shuffle[player] != 'none', 'RandomizeEnemiesType': 3, - 'RandomizeBushEnemyChance': True, - 'RandomizeEnemyHealthRange': enemy_health != 'default', - 'RandomizeEnemyHealthType': {'default': 0, 'easy': 0, 'normal': 1, 'hard': 2, 'expert': 3}[enemy_health], + 'RandomizeBushEnemyChance': world.enemy_shuffle[player] == 'chaos', + 'RandomizeEnemyHealthRange': world.enemy_health[player] != 'default', + 'RandomizeEnemyHealthType': {'default': 0, 'easy': 0, 'normal': 1, 'hard': 2, 'expert': 3}[ + world.enemy_health[player]], 'OHKO': False, - 'RandomizeEnemyDamage': enemy_damage != 'default', + 'RandomizeEnemyDamage': world.enemy_damage[player] != 'default', 'AllowEnemyZeroDamage': True, - 'ShuffleEnemyDamageGroups': enemy_damage != 'default', - 'EnemyDamageChaosMode': enemy_damage == 'chaos', + 'ShuffleEnemyDamageGroups': world.enemy_damage[player] != 'default', + 'EnemyDamageChaosMode': world.enemy_damage[player] == 'chaos', 'EasyModeEscape': False, 'EnemiesAbsorbable': False, 'AbsorbableSpawnRate': 10, @@ -185,10 +196,10 @@ def get_enemizer_patch(world, player, rom, baserom_path, enemizercli, shuffleene 'RandomizeBossDamageMinAmount': 0, 'RandomizeBossDamageMaxAmount': 200, 'RandomizeBossBehavior': False, - 'RandomizeDungeonPalettes': shufflepalette, + 'RandomizeDungeonPalettes': False, 'SetBlackoutMode': False, - 'RandomizeOverworldPalettes': shufflepalette, - 'RandomizeSpritePalettes': shufflepalette, + 'RandomizeOverworldPalettes': False, + 'RandomizeSpritePalettes': False, 'SetAdvancedSpritePalettes': False, 'PukeMode': False, 'NegativeMode': False, @@ -206,10 +217,10 @@ def get_enemizer_patch(world, player, rom, baserom_path, enemizercli, shuffleene 'SwordGraphics': "sword_gfx/normal.gfx", 'BeeMizer': False, 'BeesLevel': 0, - 'RandomizeTileTrapPattern': True, + 'RandomizeTileTrapPattern': world.enemy_shuffle[player] == 'chaos', 'RandomizeTileTrapFloorTile': False, - 'AllowKillableThief': shuffleenemies, - 'RandomizeSpriteOnHit': False, + 'AllowKillableThief': bool(random.randint(0,1)) if world.enemy_shuffle[player] == 'chaos' else world.enemy_shuffle[player] != 'none', + 'RandomizeSpriteOnHit': random_sprite_on_hit, 'DebugMode': False, 'DebugForceEnemy': False, 'DebugForceEnemyId': 0, @@ -231,21 +242,14 @@ def get_enemizer_patch(world, player, rom, baserom_path, enemizercli, shuffleene 'IcePalace': world.get_dungeon("Ice Palace", player).boss.enemizer_name, 'MiseryMire': world.get_dungeon("Misery Mire", player).boss.enemizer_name, 'TurtleRock': world.get_dungeon("Turtle Rock", player).boss.enemizer_name, + 'GanonsTower1': world.get_dungeon('Ganons Tower' if world.mode[player] != 'inverted' else 'Inverted Ganons Tower', player).bosses['bottom'].enemizer_name, + 'GanonsTower2': world.get_dungeon('Ganons Tower' if world.mode[player] != 'inverted' else 'Inverted Ganons Tower', player).bosses['middle'].enemizer_name, + 'GanonsTower3': world.get_dungeon('Ganons Tower' if world.mode[player] != 'inverted' else 'Inverted Ganons Tower', player).bosses['top'].enemizer_name, 'GanonsTower4': 'Agahnim2', 'Ganon': 'Ganon', } } - if world.mode != 'inverted': - options['ManualBosses']['GanonsTower1'] = world.get_dungeon('Ganons Tower', player).bosses['bottom'].enemizer_name - options['ManualBosses']['GanonsTower2'] = world.get_dungeon('Ganons Tower', player).bosses['middle'].enemizer_name - options['ManualBosses']['GanonsTower3'] = world.get_dungeon('Ganons Tower', player).bosses['top'].enemizer_name - else: - options['ManualBosses']['GanonsTower1'] = world.get_dungeon('Inverted Ganons Tower', player).bosses['bottom'].enemizer_name - options['ManualBosses']['GanonsTower2'] = world.get_dungeon('Inverted Ganons Tower', player).bosses['middle'].enemizer_name - options['ManualBosses']['GanonsTower3'] = world.get_dungeon('Inverted Ganons Tower', player).bosses['top'].enemizer_name - - rom.write_to_file(randopatch_path) with open(options_path, 'w') as f: @@ -260,19 +264,53 @@ def get_enemizer_patch(world, player, rom, baserom_path, enemizercli, shuffleene '--output', enemizer_output_path], cwd=os.path.dirname(enemizercli), stdout=subprocess.DEVNULL) + with open(enemizer_basepatch_path, 'r') as f: + for patch in json.load(f): + rom.write_bytes(patch["address"], patch["patchData"]) + with open(enemizer_output_path, 'r') as f: - ret = json.load(f) + for patch in json.load(f): + rom.write_bytes(patch["address"], patch["patchData"]) - if os.path.exists(randopatch_path): - os.remove(randopatch_path) + if random_sprite_on_hit: + _populate_sprite_table() + sprites = list(_sprite_table.values()) + if sprites: + while len(sprites) < 32: + sprites.extend(sprites) + random.shuffle(sprites) - if os.path.exists(options_path): - os.remove(options_path) + for i, path in enumerate(sprites[:32]): + sprite = Sprite(path) + rom.write_bytes(0x300000 + (i * 0x8000), sprite.sprite) + rom.write_bytes(0x307000 + (i * 0x8000), sprite.palette) + rom.write_bytes(0x307078 + (i * 0x8000), sprite.glove_palette) - if os.path.exists(enemizer_output_path): - os.remove(enemizer_output_path) + for used in (randopatch_path, options_path, enemizer_output_path): + try: + os.remove(used) + except OSError: + pass - return ret + +_sprite_table = {} +def _populate_sprite_table(): + if not _sprite_table: + for dir in [local_path('data/sprites/official'), local_path('data/sprites/unofficial')]: + for file in os.listdir(dir): + filepath = os.path.join(dir, file) + if not os.path.isfile(filepath): + continue + sprite = Sprite(filepath) + if sprite.valid: + _sprite_table[sprite.name.lower()] = filepath + +def get_sprite_from_name(name): + _populate_sprite_table() + name = name.lower() + if name in ['random', 'randomonhit']: + return Sprite(random.choice(list(_sprite_table.values()))) + return Sprite(_sprite_table[name]) if name in _sprite_table else None class Sprite(object): default_palette = [255, 127, 126, 35, 183, 17, 158, 54, 165, 20, 255, 1, 120, 16, 157, @@ -432,7 +470,7 @@ class Sprite(object): # split into palettes of 15 colors return array_chunk(palette_as_colors, 15) -def patch_rom(world, player, rom): +def patch_rom(world, rom, player, team, enemized): random.seed(world.rom_seeds[player]) # progressive bow silver arrow hint hack @@ -453,14 +491,27 @@ def patch_rom(world, player, rom): continue if not location.crystal: - # Keys in their native dungeon should use the orignal item code for keys - if location.parent_region.dungeon: - dungeon = location.parent_region.dungeon - if location.item is not None and location.item.key and dungeon.is_dungeon_item(location.item): - if location.item.type == "BigKey": - itemid = 0x32 - if location.item.type == "SmallKey": - itemid = 0x24 + if location.item is not None: + # Keys in their native dungeon should use the orignal item code for keys + if location.parent_region.dungeon: + if location.parent_region.dungeon.is_dungeon_item(location.item): + if location.item.bigkey: + itemid = 0x32 + if location.item.smallkey: + itemid = 0x24 + if location.item.map: + itemid = 0x33 + if location.item.compass: + itemid = 0x25 + if world.remote_items[player]: + itemid = list(location_table.keys()).index(location.name) + 1 + assert itemid < 0x100 + rom.write_byte(location.player_address, 0xFF) + elif location.item.player != player: + if location.player_address is not None: + rom.write_byte(location.player_address, location.item.player) + else: + itemid = 0x5A rom.write_byte(location.address, itemid) else: # crystals @@ -469,15 +520,15 @@ def patch_rom(world, player, rom): # patch music music_addresses = dungeon_music_addresses[location.name] - if world.keysanity: + if world.mapshuffle[player]: music = random.choice([0x11, 0x16]) else: music = 0x11 if 'Pendant' in location.item.name else 0x16 for music_address in music_addresses: rom.write_byte(music_address, music) - if world.keysanity: - rom.write_byte(0x155C9, random.choice([0x11, 0x16])) # Randomize GT music too in keysanity mode + if world.mapshuffle[player]: + rom.write_byte(0x155C9, random.choice([0x11, 0x16])) # Randomize GT music too with map shuffle # patch entrance/exits/holes for region in world.regions: @@ -490,38 +541,38 @@ def patch_rom(world, player, rom): rom.write_byte(0x15B8C + offset, ow_area) - rom.write_int16(0x15BDB + 2 * offset, vram_loc) - rom.write_int16(0x15C79 + 2 * offset, scroll_y) - rom.write_int16(0x15D17 + 2 * offset, scroll_x) + write_int16(rom, 0x15BDB + 2 * offset, vram_loc) + write_int16(rom, 0x15C79 + 2 * offset, scroll_y) + write_int16(rom, 0x15D17 + 2 * offset, scroll_x) # for positioning fixups we abuse the roomid as a way of identifying which exit data we are appling # Thanks to Zarby89 for originally finding these values # todo fix screen scrolling - if world.shuffle not in ['insanity', 'insanity_legacy', 'madness_legacy'] and \ - exit.name in ['Eastern Palace Exit', 'Tower of Hera Exit', 'Thieves Town Exit', 'Skull Woods Final Section Exit', 'Ice Palace Exit', 'Misery Mire Exit', - 'Palace of Darkness Exit', 'Swamp Palace Exit', 'Ganons Tower Exit', 'Desert Palace Exit (North)', 'Agahnims Tower Exit', 'Spiral Cave Exit (Top)', - 'Superbunny Cave Exit (Bottom)', 'Turtle Rock Ledge Exit (East)']: + if world.shuffle[player] not in ['insanity', 'insanity_legacy', 'madness_legacy'] and \ + exit.name in ['Eastern Palace Exit', 'Tower of Hera Exit', 'Thieves Town Exit', 'Skull Woods Final Section Exit', 'Ice Palace Exit', 'Misery Mire Exit', + 'Palace of Darkness Exit', 'Swamp Palace Exit', 'Ganons Tower Exit', 'Desert Palace Exit (North)', 'Agahnims Tower Exit', 'Spiral Cave Exit (Top)', + 'Superbunny Cave Exit (Bottom)', 'Turtle Rock Ledge Exit (East)']: # For exits that connot be reached from another, no need to apply offset fixes. - rom.write_int16(0x15DB5 + 2 * offset, link_y) # same as final else - elif room_id == 0x0059 and world.fix_skullwoods_exit: - rom.write_int16(0x15DB5 + 2 * offset, 0x00F8) - elif room_id == 0x004a and world.fix_palaceofdarkness_exit: - rom.write_int16(0x15DB5 + 2 * offset, 0x0640) - elif room_id == 0x00d6 and world.fix_trock_exit: - rom.write_int16(0x15DB5 + 2 * offset, 0x0134) + write_int16(rom, 0x15DB5 + 2 * offset, link_y) # same as final else + elif room_id == 0x0059 and world.fix_skullwoods_exit[player]: + write_int16(rom, 0x15DB5 + 2 * offset, 0x00F8) + elif room_id == 0x004a and world.fix_palaceofdarkness_exit[player]: + write_int16(rom, 0x15DB5 + 2 * offset, 0x0640) + elif room_id == 0x00d6 and world.fix_trock_exit[player]: + write_int16(rom, 0x15DB5 + 2 * offset, 0x0134) elif room_id == 0x000c and world.fix_gtower_exit: # fix ganons tower exit point - rom.write_int16(0x15DB5 + 2 * offset, 0x00A4) + write_int16(rom, 0x15DB5 + 2 * offset, 0x00A4) else: - rom.write_int16(0x15DB5 + 2 * offset, link_y) + write_int16(rom, 0x15DB5 + 2 * offset, link_y) - rom.write_int16(0x15E53 + 2 * offset, link_x) - rom.write_int16(0x15EF1 + 2 * offset, camera_y) - rom.write_int16(0x15F8F + 2 * offset, camera_x) + write_int16(rom, 0x15E53 + 2 * offset, link_x) + write_int16(rom, 0x15EF1 + 2 * offset, camera_y) + write_int16(rom, 0x15F8F + 2 * offset, camera_x) rom.write_byte(0x1602D + offset, unknown_1) rom.write_byte(0x1607C + offset, unknown_2) - rom.write_int16(0x160CB + 2 * offset, door_1) - rom.write_int16(0x16169 + 2 * offset, door_2) + write_int16(rom, 0x160CB + 2 * offset, door_1) + write_int16(rom, 0x16169 + 2 * offset, door_2) elif isinstance(exit.addresses, list): # is hole for address in exit.addresses: @@ -529,7 +580,7 @@ def patch_rom(world, player, rom): else: # patch door table rom.write_byte(0xDBB73 + exit.addresses, exit.target) - if world.mode == 'inverted': + if world.mode[player] == 'inverted': patch_shuffled_dark_sanc(world, rom, player) write_custom_shops(rom, world, player) @@ -557,11 +608,11 @@ def patch_rom(world, player, rom): rom.write_byte(0x51DE, 0x00) # set open mode: - if world.mode in ['open', 'inverted']: + if world.mode[player] in ['open', 'inverted']: rom.write_byte(0x180032, 0x01) # open mode - if world.mode == 'inverted': - set_inverted_mode(world, rom) - elif world.mode == 'standard': + if world.mode[player] == 'inverted': + set_inverted_mode(world, player, rom) + elif world.mode[player] == 'standard': rom.write_byte(0x180032, 0x00) # standard mode uncle_location = world.get_location('Link\'s Uncle', player) @@ -579,7 +630,7 @@ def patch_rom(world, player, rom): rom.write_bytes(0x6D323, [0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E]) # set light cones - rom.write_byte(0x180038, 0x01 if world.sewer_light_cone else 0x00) + rom.write_byte(0x180038, 0x01 if world.sewer_light_cone[player] else 0x00) rom.write_byte(0x180039, 0x01 if world.light_world_light_cone else 0x00) rom.write_byte(0x18003A, 0x01 if world.dark_world_light_cone else 0x00) @@ -590,7 +641,9 @@ def patch_rom(world, player, rom): rom.write_byte(0x18004F, 0x01) # Byrna Invulnerability: on # handle difficulty_adjustments - if world.difficulty_adjustments == 'hard': + if world.difficulty_adjustments[player] == 'hard': + rom.write_byte(0x180181, 0x01) # Make silver arrows work only on ganon + rom.write_byte(0x180182, 0x00) # Don't auto equip silvers on pickup # Powdered Fairies Prize rom.write_byte(0x36DD0, 0xD8) # One Heart # potion heal amount @@ -605,10 +658,12 @@ def patch_rom(world, player, rom): rom.write_byte(0x34FD6, 0x80) overflow_replacement = GREEN_TWENTY_RUPEES # Rupoor negative value - rom.write_int16(0x180036, world.rupoor_cost) + write_int16(rom, 0x180036, world.rupoor_cost) # Set stun items rom.write_byte(0x180180, 0x02) # Hookshot only - elif world.difficulty_adjustments == 'expert': + elif world.difficulty_adjustments[player] == 'expert': + rom.write_byte(0x180181, 0x01) # Make silver arrows work only on ganon + rom.write_byte(0x180182, 0x00) # Don't auto equip silvers on pickup # Powdered Fairies Prize rom.write_byte(0x36DD0, 0xD8) # One Heart # potion heal amount @@ -623,10 +678,12 @@ def patch_rom(world, player, rom): rom.write_byte(0x34FD6, 0x80) overflow_replacement = GREEN_TWENTY_RUPEES # Rupoor negative value - rom.write_int16(0x180036, world.rupoor_cost) + write_int16(rom, 0x180036, world.rupoor_cost) # Set stun items rom.write_byte(0x180180, 0x00) # Nothing else: + rom.write_byte(0x180181, 0x00) # Make silver arrows freely usable + rom.write_byte(0x180182, 0x01) # auto equip silvers on pickup # Powdered Fairies Prize rom.write_byte(0x36DD0, 0xE3) # fairy # potion heal amount @@ -640,36 +697,34 @@ def patch_rom(world, player, rom): #Enable catching fairies rom.write_byte(0x34FD6, 0xF0) # Rupoor negative value - rom.write_int16(0x180036, world.rupoor_cost) + write_int16(rom, 0x180036, world.rupoor_cost) # Set stun items rom.write_byte(0x180180, 0x03) # All standard items #Set overflow items for progressive equipment - if world.timer in ['timed', 'timed-countdown', 'timed-ohko']: + if world.timer[player] in ['timed', 'timed-countdown', 'timed-ohko']: overflow_replacement = GREEN_CLOCK else: overflow_replacement = GREEN_TWENTY_RUPEES - rom.write_byte(0x180181, 0x00) # Make silver arrows freely usable - rom.write_byte(0x180182, 0x01) # auto equip silvers on pickup - #Byrna residual magic cost rom.write_bytes(0x45C42, [0x04, 0x02, 0x01]) - difficulty = world.difficulty_requirements + difficulty = world.difficulty_requirements[player] #Set overflow items for progressive equipment rom.write_bytes(0x180090, - [difficulty.progressive_sword_limit, overflow_replacement, + [difficulty.progressive_sword_limit if world.swords[player] != 'swordless' else 0, overflow_replacement, difficulty.progressive_shield_limit, overflow_replacement, difficulty.progressive_armor_limit, overflow_replacement, difficulty.progressive_bottle_limit, overflow_replacement]) - + #Work around for json patch ordering issues - write bow limit separately so that it is replaced in the patch rom.write_bytes(0x180098, [difficulty.progressive_bow_limit, overflow_replacement]) - - if difficulty.progressive_bow_limit < 2 and world.swords == 'swordless': + + if difficulty.progressive_bow_limit < 2 and world.swords[player] == 'swordless': rom.write_bytes(0x180098, [2, overflow_replacement]) rom.write_byte(0x180181, 0x01) # Make silver arrows work only on ganon + rom.write_byte(0x180182, 0x00) # Don't auto equip silvers on pickup # set up game internal RNG seed for i in range(1024): @@ -698,13 +753,13 @@ def patch_rom(world, player, rom): random.shuffle(packs) prizes[:56] = [drop for pack in packs for drop in pack] - if world.difficulty_adjustments in ['hard', 'expert']: + if world.difficulty_adjustments[player] in ['hard', 'expert']: prize_replacements = {0xE0: 0xDF, # Fairy -> heart 0xE3: 0xD8} # Big magic -> small magic prizes = [prize_replacements.get(prize, prize) for prize in prizes] dig_prizes = [prize_replacements.get(prize, prize) for prize in dig_prizes] - if world.retro: + if world.retro[player]: prize_replacements = {0xE1: 0xDA, #5 Arrows -> Blue Rupee 0xE2: 0xDB} #10 Arrows -> Red Rupee prizes = [prize_replacements.get(prize, prize) for prize in prizes] @@ -747,14 +802,14 @@ def patch_rom(world, player, rom): 0x12, 0x01, 0x35, 0xFF, # lamp -> 5 rupees 0x51, 0x06, 0x52, 0xFF, # 6 +5 bomb upgrades -> +10 bomb upgrade 0x53, 0x06, 0x54, 0xFF, # 6 +5 arrow upgrades -> +10 arrow upgrade - 0x58, 0x01, 0x36 if world.retro else 0x43, 0xFF, # silver arrows -> single arrow (red 20 in retro mode) + 0x58, 0x01, 0x36 if world.retro[player] else 0x43, 0xFF, # silver arrows -> single arrow (red 20 in retro mode) 0x3E, difficulty.boss_heart_container_limit, 0x47, 0xff, # boss heart -> green 20 0x17, difficulty.heart_piece_limit, 0x47, 0xff, # piece of heart -> green 20 0xFF, 0xFF, 0xFF, 0xFF, # end of table sentinel ]) # set Fountain bottle exchange items - if world.difficulty in ['hard', 'expert']: + if world.difficulty[player] in ['hard', 'expert']: rom.write_byte(0x348FF, [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x48][random.randint(0, 5)]) rom.write_byte(0x3493B, [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x48][random.randint(0, 5)]) else: @@ -787,69 +842,73 @@ def patch_rom(world, player, rom): rom.write_byte(0x180029, 0x01) # Smithy quick item give # set swordless mode settings - rom.write_byte(0x18003F, 0x01 if world.swords == 'swordless' else 0x00) # hammer can harm ganon - rom.write_byte(0x180040, 0x01 if world.swords == 'swordless' else 0x00) # open curtains - rom.write_byte(0x180041, 0x01 if world.swords == 'swordless' else 0x00) # swordless medallions - rom.write_byte(0x180043, 0xFF if world.swords == 'swordless' else 0x00) # starting sword for link - rom.write_byte(0x180044, 0x01 if world.swords == 'swordless' else 0x00) # hammer activates tablets + rom.write_byte(0x18003F, 0x01 if world.swords[player] == 'swordless' else 0x00) # hammer can harm ganon + rom.write_byte(0x180040, 0x01 if world.swords[player] == 'swordless' else 0x00) # open curtains + rom.write_byte(0x180041, 0x01 if world.swords[player] == 'swordless' else 0x00) # swordless medallions + rom.write_byte(0x180043, 0xFF if world.swords[player] == 'swordless' else 0x00) # starting sword for link + rom.write_byte(0x180044, 0x01 if world.swords[player] == 'swordless' else 0x00) # hammer activates tablets # set up clocks for timed modes - if world.shuffle == 'vanilla': + if world.shuffle[player] == 'vanilla': ERtimeincrease = 0 - elif world.shuffle in ['dungeonssimple', 'dungeonsfull']: + elif world.shuffle[player] in ['dungeonssimple', 'dungeonsfull']: ERtimeincrease = 10 else: ERtimeincrease = 20 - if world.keysanity: + if world.keyshuffle[player] or world.bigkeyshuffle[player] or world.mapshuffle[player]: ERtimeincrease = ERtimeincrease + 15 - if world.clock_mode == 'off': + if world.clock_mode[player] == False: rom.write_bytes(0x180190, [0x00, 0x00, 0x00]) # turn off clock mode - rom.write_int32(0x180200, 0) # red clock adjustment time (in frames, sint32) - rom.write_int32(0x180204, 0) # blue clock adjustment time (in frames, sint32) - rom.write_int32(0x180208, 0) # green clock adjustment time (in frames, sint32) - rom.write_int32(0x18020C, 0) # starting time (in frames, sint32) - elif world.clock_mode == 'ohko': + write_int32(rom, 0x180200, 0) # red clock adjustment time (in frames, sint32) + write_int32(rom, 0x180204, 0) # blue clock adjustment time (in frames, sint32) + write_int32(rom, 0x180208, 0) # green clock adjustment time (in frames, sint32) + write_int32(rom, 0x18020C, 0) # starting time (in frames, sint32) + elif world.clock_mode[player] == 'ohko': rom.write_bytes(0x180190, [0x01, 0x02, 0x01]) # ohko timer with resetable timer functionality - rom.write_int32(0x180200, 0) # red clock adjustment time (in frames, sint32) - rom.write_int32(0x180204, 0) # blue clock adjustment time (in frames, sint32) - rom.write_int32(0x180208, 0) # green clock adjustment time (in frames, sint32) - rom.write_int32(0x18020C, 0) # starting time (in frames, sint32) - elif world.clock_mode == 'countdown-ohko': + write_int32(rom, 0x180200, 0) # red clock adjustment time (in frames, sint32) + write_int32(rom, 0x180204, 0) # blue clock adjustment time (in frames, sint32) + write_int32(rom, 0x180208, 0) # green clock adjustment time (in frames, sint32) + write_int32(rom, 0x18020C, 0) # starting time (in frames, sint32) + elif world.clock_mode[player] == 'countdown-ohko': rom.write_bytes(0x180190, [0x01, 0x02, 0x01]) # ohko timer with resetable timer functionality - rom.write_int32(0x180200, -100 * 60 * 60 * 60) # red clock adjustment time (in frames, sint32) - rom.write_int32(0x180204, 2 * 60 * 60) # blue clock adjustment time (in frames, sint32) - rom.write_int32(0x180208, 4 * 60 * 60) # green clock adjustment time (in frames, sint32) - if world.difficulty_adjustments == 'normal': - rom.write_int32(0x18020C, (10 + ERtimeincrease) * 60 * 60) # starting time (in frames, sint32) + write_int32(rom, 0x180200, -100 * 60 * 60 * 60) # red clock adjustment time (in frames, sint32) + write_int32(rom, 0x180204, 2 * 60 * 60) # blue clock adjustment time (in frames, sint32) + write_int32(rom, 0x180208, 4 * 60 * 60) # green clock adjustment time (in frames, sint32) + if world.difficulty_adjustments[player] == 'normal': + write_int32(rom, 0x18020C, (10 + ERtimeincrease) * 60 * 60) # starting time (in frames, sint32) else: - rom.write_int32(0x18020C, int((5 + ERtimeincrease / 2) * 60 * 60)) # starting time (in frames, sint32) - if world.clock_mode == 'stopwatch': + write_int32(rom, 0x18020C, int((5 + ERtimeincrease / 2) * 60 * 60)) # starting time (in frames, sint32) + if world.clock_mode[player] == 'stopwatch': rom.write_bytes(0x180190, [0x02, 0x01, 0x00]) # set stopwatch mode - rom.write_int32(0x180200, -2 * 60 * 60) # red clock adjustment time (in frames, sint32) - rom.write_int32(0x180204, 2 * 60 * 60) # blue clock adjustment time (in frames, sint32) - rom.write_int32(0x180208, 4 * 60 * 60) # green clock adjustment time (in frames, sint32) - rom.write_int32(0x18020C, 0) # starting time (in frames, sint32) - if world.clock_mode == 'countdown': + write_int32(rom, 0x180200, -2 * 60 * 60) # red clock adjustment time (in frames, sint32) + write_int32(rom, 0x180204, 2 * 60 * 60) # blue clock adjustment time (in frames, sint32) + write_int32(rom, 0x180208, 4 * 60 * 60) # green clock adjustment time (in frames, sint32) + write_int32(rom, 0x18020C, 0) # starting time (in frames, sint32) + if world.clock_mode[player] == 'countdown': rom.write_bytes(0x180190, [0x01, 0x01, 0x00]) # set countdown, with no reset available - rom.write_int32(0x180200, -2 * 60 * 60) # red clock adjustment time (in frames, sint32) - rom.write_int32(0x180204, 2 * 60 * 60) # blue clock adjustment time (in frames, sint32) - rom.write_int32(0x180208, 4 * 60 * 60) # green clock adjustment time (in frames, sint32) - rom.write_int32(0x18020C, (40 + ERtimeincrease) * 60 * 60) # starting time (in frames, sint32) + write_int32(rom, 0x180200, -2 * 60 * 60) # red clock adjustment time (in frames, sint32) + write_int32(rom, 0x180204, 2 * 60 * 60) # blue clock adjustment time (in frames, sint32) + write_int32(rom, 0x180208, 4 * 60 * 60) # green clock adjustment time (in frames, sint32) + write_int32(rom, 0x18020C, (40 + ERtimeincrease) * 60 * 60) # starting time (in frames, sint32) # set up goals for treasure hunt - rom.write_bytes(0x180165, [0x0E, 0x28] if world.treasure_hunt_icon == 'Triforce Piece' else [0x0D, 0x28]) - rom.write_byte(0x180167, world.treasure_hunt_count % 256) + rom.write_bytes(0x180165, [0x0E, 0x28] if world.treasure_hunt_icon[player] == 'Triforce Piece' else [0x0D, 0x28]) + rom.write_byte(0x180167, world.treasure_hunt_count[player] % 256) rom.write_byte(0x180194, 1) # Must turn in triforced pieces (instant win not enabled) - # TODO: a proper race rom mode should be implemented, that changes the following flag, and rummages the table (or uses the future encryption feature, etc) rom.write_bytes(0x180213, [0x00, 0x01]) # Not a Tournament Seed - rom.write_byte(0x180211, 0x06) #Game type, we set the Entrance and item randomization flags + gametype = 0x04 # item + if world.shuffle[player] != 'vanilla': + gametype |= 0x02 # entrance + if enemized: + gametype |= 0x01 # enemizer + rom.write_byte(0x180211, gametype) # Game type # assorted fixes rom.write_byte(0x1800A2, 0x01) # remain in real dark world when dying in dark world dungeon before killing aga1 rom.write_byte(0x180169, 0x01 if world.lock_aga_door_in_escape else 0x00) # Lock or unlock aga tower door during escape sequence. - if world.mode == 'inverted': + if world.mode[player] == 'inverted': rom.write_byte(0x180169, 0x02) # lock aga/ganon tower door with crystals in inverted rom.write_byte(0x180171, 0x01 if world.ganon_at_pyramid[player] else 0x00) # Enable respawning on pyramid after ganon death rom.write_byte(0x180173, 0x01) # Bob is enabled @@ -859,57 +918,192 @@ def patch_rom(world, player, rom): rom.write_bytes(0x50563, [0x3F, 0x14]) # disable below ganon chest rom.write_byte(0x50599, 0x00) # disable below ganon chest rom.write_bytes(0xE9A5, [0x7E, 0x00, 0x24]) # disable below ganon chest - rom.write_byte(0x18008B, 0x00) # Pyramid Hole not pre-opened - rom.write_byte(0x18008C, 0x01 if world.crystals_needed_for_gt == 0 else 0x00) # Pyramid Hole pre-opened if crystal requirement is 0 + rom.write_byte(0x18008B, 0x01 if world.open_pyramid[player] else 0x00) # pre-open Pyramid Hole + rom.write_byte(0x18008C, 0x01 if world.crystals_needed_for_gt[player] == 0 else 0x00) # GT pre-opened if crystal requirement is 0 rom.write_byte(0xF5D73, 0xF0) # bees are catchable rom.write_byte(0xF5F10, 0xF0) # bees are catchable rom.write_byte(0x180086, 0x00 if world.aga_randomness else 0x01) # set blue ball and ganon warp randomness rom.write_byte(0x1800A0, 0x01) # return to light world on s+q without mirror rom.write_byte(0x1800A1, 0x01) # enable overworld screen transition draining for water level inside swamp - rom.write_byte(0x180174, 0x01 if world.fix_fake_world else 0x00) + rom.write_byte(0x180174, 0x01 if world.fix_fake_world[player] else 0x00) rom.write_byte(0x18017E, 0x01) # Fairy fountains only trade in bottles - rom.write_byte(0x180034, 0x0A) # starting max bombs - rom.write_byte(0x180035, 30) # starting max arrows - for x in range(0x183000, 0x18304F): - rom.write_byte(x, 0) # Zero the initial equipment array - rom.write_byte(0x18302C, 0x18) # starting max health - rom.write_byte(0x18302D, 0x18) # starting current health - rom.write_byte(0x183039, 0x68) # starting abilities, bit array - + + # Starting equipment + equip = [0] * (0x340 + 0x4F) + equip[0x36C] = 0x18 + equip[0x36D] = 0x18 + equip[0x379] = 0x68 + starting_max_bombs = 10 + starting_max_arrows = 30 + + startingstate = CollectionState(world) + + if startingstate.has('Bow', player): + equip[0x340] = 1 + equip[0x38E] |= 0x20 # progressive flag to get the correct hint in all cases + if not world.retro[player]: + equip[0x38E] |= 0x80 + if startingstate.has('Silver Arrows', player): + equip[0x38E] |= 0x40 + + if startingstate.has('Titans Mitts', player): + equip[0x354] = 2 + elif startingstate.has('Power Glove', player): + equip[0x354] = 1 + + if startingstate.has('Golden Sword', player): + equip[0x359] = 4 + elif startingstate.has('Tempered Sword', player): + equip[0x359] = 3 + elif startingstate.has('Master Sword', player): + equip[0x359] = 2 + elif startingstate.has('Fighter Sword', player): + equip[0x359] = 1 + + if startingstate.has('Mirror Shield', player): + equip[0x35A] = 3 + elif startingstate.has('Red Shield', player): + equip[0x35A] = 2 + elif startingstate.has('Blue Shield', player): + equip[0x35A] = 1 + + if startingstate.has('Red Mail', player): + equip[0x35B] = 2 + elif startingstate.has('Blue Mail', player): + equip[0x35B] = 1 + + if startingstate.has('Magic Upgrade (1/4)', player): + equip[0x37B] = 2 + equip[0x36E] = 0x80 + elif startingstate.has('Magic Upgrade (1/2)', player): + equip[0x37B] = 1 + equip[0x36E] = 0x80 + for item in world.precollected_items: if item.player != player: continue - if item.name == 'Fighter Sword': - rom.write_byte(0x183000+0x19, 0x01) - rom.write_byte(0x0271A6+0x19, 0x01) - rom.write_byte(0x180043, 0x01) # special starting sword byte - else: - raise RuntimeError("Unsupported pre-collected item: {}".format(item)) + if item.name in ['Bow', 'Silver Arrows', 'Progressive Bow', 'Progressive Bow (Alt)', + 'Titans Mitts', 'Power Glove', 'Progressive Glove', + 'Golden Sword', 'Tempered Sword', 'Master Sword', 'Fighter Sword', 'Progressive Sword', + 'Mirror Shield', 'Red Shield', 'Blue Shield', 'Progressive Shield', + 'Red Mail', 'Blue Mail', 'Progressive Armor', + 'Magic Upgrade (1/4)', 'Magic Upgrade (1/2)']: + continue - rom.write_byte(0x18004A, 0x00 if world.mode != 'inverted' else 0x01) # Inverted mode + set_table = {'Book of Mudora': (0x34E, 1), 'Hammer': (0x34B, 1), 'Bug Catching Net': (0x34D, 1), 'Hookshot': (0x342, 1), 'Magic Mirror': (0x353, 2), + 'Cape': (0x352, 1), 'Lamp': (0x34A, 1), 'Moon Pearl': (0x357, 1), 'Cane of Somaria': (0x350, 1), 'Cane of Byrna': (0x351, 1), + 'Fire Rod': (0x345, 1), 'Ice Rod': (0x346, 1), 'Bombos': (0x347, 1), 'Ether': (0x348, 1), 'Quake': (0x349, 1)} + or_table = {'Green Pendant': (0x374, 0x04), 'Red Pendant': (0x374, 0x01), 'Blue Pendant': (0x374, 0x02), + 'Crystal 1': (0x37A, 0x02), 'Crystal 2': (0x37A, 0x10), 'Crystal 3': (0x37A, 0x40), 'Crystal 4': (0x37A, 0x20), + 'Crystal 5': (0x37A, 0x04), 'Crystal 6': (0x37A, 0x01), 'Crystal 7': (0x37A, 0x08), + 'Big Key (Eastern Palace)': (0x367, 0x20), 'Compass (Eastern Palace)': (0x365, 0x20), 'Map (Eastern Palace)': (0x369, 0x20), + 'Big Key (Desert Palace)': (0x367, 0x10), 'Compass (Desert Palace)': (0x365, 0x10), 'Map (Desert Palace)': (0x369, 0x10), + 'Big Key (Tower of Hera)': (0x366, 0x20), 'Compass (Tower of Hera)': (0x364, 0x20), 'Map (Tower of Hera)': (0x368, 0x20), + 'Big Key (Escape)': (0x367, 0xC0), 'Compass (Escape)': (0x365, 0xC0), 'Map (Escape)': (0x369, 0xC0), + 'Big Key (Palace of Darkness)': (0x367, 0x02), 'Compass (Palace of Darkness)': (0x365, 0x02), 'Map (Palace of Darkness)': (0x369, 0x02), + 'Big Key (Thieves Town)': (0x366, 0x10), 'Compass (Thieves Town)': (0x364, 0x10), 'Map (Thieves Town)': (0x368, 0x10), + 'Big Key (Skull Woods)': (0x366, 0x80), 'Compass (Skull Woods)': (0x364, 0x80), 'Map (Skull Woods)': (0x368, 0x80), + 'Big Key (Swamp Palace)': (0x367, 0x04), 'Compass (Swamp Palace)': (0x365, 0x04), 'Map (Swamp Palace)': (0x369, 0x04), + 'Big Key (Ice Palace)': (0x366, 0x40), 'Compass (Ice Palace)': (0x364, 0x40), 'Map (Ice Palace)': (0x368, 0x40), + 'Big Key (Misery Mire)': (0x367, 0x01), 'Compass (Misery Mire)': (0x365, 0x01), 'Map (Misery Mire)': (0x369, 0x01), + 'Big Key (Turtle Rock)': (0x366, 0x08), 'Compass (Turtle Rock)': (0x364, 0x08), 'Map (Turtle Rock)': (0x368, 0x08), + 'Big Key (Ganons Tower)': (0x366, 0x04), 'Compass (Ganons Tower)': (0x364, 0x04), 'Map (Ganons Tower)': (0x368, 0x04)} + set_or_table = {'Flippers': (0x356, 1, 0x379, 0x02),'Pegasus Boots': (0x355, 1, 0x379, 0x04), + 'Shovel': (0x34C, 1, 0x38C, 0x04), 'Flute': (0x34C, 3, 0x38C, 0x01), + 'Mushroom': (0x344, 1, 0x38C, 0x20 | 0x08), 'Magic Powder': (0x344, 2, 0x38C, 0x10), + 'Blue Boomerang': (0x341, 1, 0x38C, 0x80), 'Red Boomerang': (0x341, 2, 0x38C, 0x40)} + keys = {'Small Key (Eastern Palace)': [0x37E], 'Small Key (Desert Palace)': [0x37F], + 'Small Key (Tower of Hera)': [0x386], + 'Small Key (Agahnims Tower)': [0x380], 'Small Key (Palace of Darkness)': [0x382], + 'Small Key (Thieves Town)': [0x387], + 'Small Key (Skull Woods)': [0x384], 'Small Key (Swamp Palace)': [0x381], + 'Small Key (Ice Palace)': [0x385], + 'Small Key (Misery Mire)': [0x383], 'Small Key (Turtle Rock)': [0x388], + 'Small Key (Ganons Tower)': [0x389], + 'Small Key (Universal)': [0x38B], 'Small Key (Escape)': [0x37C, 0x37D]} + bottles = {'Bottle': 2, 'Bottle (Red Potion)': 3, 'Bottle (Green Potion)': 4, 'Bottle (Blue Potion)': 5, + 'Bottle (Fairy)': 6, 'Bottle (Bee)': 7, 'Bottle (Good Bee)': 8} + rupees = {'Rupee (1)': 1, 'Rupees (5)': 5, 'Rupees (20)': 20, 'Rupees (50)': 50, 'Rupees (100)': 100, 'Rupees (300)': 300} + bomb_caps = {'Bomb Upgrade (+5)': 5, 'Bomb Upgrade (+10)': 10} + arrow_caps = {'Arrow Upgrade (+5)': 5, 'Arrow Upgrade (+10)': 10} + bombs = {'Single Bomb': 1, 'Bombs (3)': 3, 'Bombs (10)': 10} + arrows = {'Single Arrow': 1, 'Arrows (10)': 10} + + if item.name in set_table: + equip[set_table[item.name][0]] = set_table[item.name][1] + elif item.name in or_table: + equip[or_table[item.name][0]] |= or_table[item.name][1] + elif item.name in set_or_table: + equip[set_or_table[item.name][0]] = set_or_table[item.name][1] + equip[set_or_table[item.name][2]] |= set_or_table[item.name][3] + elif item.name in keys: + for address in keys[item.name]: + equip[address] = min(equip[address] + 1, 99) + elif item.name in bottles: + if equip[0x34F] < world.difficulty_requirements[player].progressive_bottle_limit: + equip[0x35C + equip[0x34F]] = bottles[item.name] + equip[0x34F] += 1 + elif item.name in rupees: + equip[0x360:0x362] = list(min(equip[0x360] + (equip[0x361] << 8) + rupees[item.name], 9999).to_bytes(2, byteorder='little', signed=False)) + equip[0x362:0x364] = list(min(equip[0x362] + (equip[0x363] << 8) + rupees[item.name], 9999).to_bytes(2, byteorder='little', signed=False)) + elif item.name in bomb_caps: + starting_max_bombs = min(starting_max_bombs + bomb_caps[item.name], 50) + elif item.name in arrow_caps: + starting_max_arrows = min(starting_max_arrows + arrow_caps[item.name], 70) + elif item.name in bombs: + equip[0x343] += bombs[item.name] + elif item.name in arrows: + if world.retro[player]: + equip[0x38E] |= 0x80 + equip[0x377] = 1 + else: + equip[0x377] += arrows[item.name] + elif item.name in ['Piece of Heart', 'Boss Heart Container', 'Sanctuary Heart Container']: + if item.name == 'Piece of Heart': + equip[0x36B] = (equip[0x36B] + 1) % 4 + if item.name != 'Piece of Heart' or equip[0x36B] == 0: + equip[0x36C] = min(equip[0x36C] + 0x08, 0xA0) + equip[0x36D] = min(equip[0x36D] + 0x08, 0xA0) + else: + raise RuntimeError(f'Unsupported item in starting equipment: {item.name}') + + equip[0x343] = min(equip[0x343], starting_max_bombs) + rom.write_byte(0x180034, starting_max_bombs) + equip[0x377] = min(equip[0x377], starting_max_arrows) + rom.write_byte(0x180035, starting_max_arrows) + rom.write_bytes(0x180046, equip[0x360:0x362]) + if equip[0x359]: + rom.write_byte(0x180043, equip[0x359]) + + assert equip[:0x340] == [0] * 0x340 + rom.write_bytes(0x183000, equip[0x340:]) + rom.write_bytes(0x271A6, equip[0x340:0x340+60]) + + rom.write_byte(0x18004A, 0x00 if world.mode[player] != 'inverted' else 0x01) # Inverted mode rom.write_byte(0x18005D, 0x00) # Hammer always breaks barrier - rom.write_byte(0x2AF79, 0xD0 if world.mode != 'inverted' else 0xF0) # vortexes: Normal (D0=light to dark, F0=dark to light, 42 = both) - rom.write_byte(0x3A943, 0xD0 if world.mode != 'inverted' else 0xF0) # Mirror: Normal (D0=Dark to Light, F0=light to dark, 42 = both) - rom.write_byte(0x3A96D, 0xF0 if world.mode != 'inverted' else 0xD0) # Residual Portal: Normal (F0= Light Side, D0=Dark Side, 42 = both (Darth Vader)) + rom.write_byte(0x2AF79, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # vortexes: Normal (D0=light to dark, F0=dark to light, 42 = both) + rom.write_byte(0x3A943, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # Mirror: Normal (D0=Dark to Light, F0=light to dark, 42 = both) + rom.write_byte(0x3A96D, 0xF0 if world.mode[player] != 'inverted' else 0xD0) # Residual Portal: Normal (F0= Light Side, D0=Dark Side, 42 = both (Darth Vader)) rom.write_byte(0x3A9A7, 0xD0) # Residual Portal: Normal (D0= Light Side, F0=Dark Side, 42 = both (Darth Vader)) rom.write_bytes(0x180080, [50, 50, 70, 70]) # values to fill for Capacity Upgrades (Bomb5, Bomb10, Arrow5, Arrow10) - rom.write_byte(0x18004D, 0x00) # Escape assist (off) + rom.write_byte(0x18004D, ((0x01 if 'arrows' in world.escape_assist[player] else 0x00) | + (0x02 if 'bombs' in world.escape_assist[player] else 0x00) | + (0x04 if 'magic' in world.escape_assist[player] else 0x00))) # Escape assist - if world.goal in ['pedestal', 'triforcehunt']: + if world.goal[player] in ['pedestal', 'triforcehunt']: rom.write_byte(0x18003E, 0x01) # make ganon invincible - elif world.goal in ['dungeons']: + elif world.goal[player] in ['dungeons']: rom.write_byte(0x18003E, 0x02) # make ganon invincible until all dungeons are beat - elif world.goal in ['crystals']: + elif world.goal[player] in ['crystals']: rom.write_byte(0x18003E, 0x04) # make ganon invincible until all crystals else: rom.write_byte(0x18003E, 0x03) # make ganon invincible until all crystals and aga 2 are collected - rom.write_byte(0x18005E, world.crystals_needed_for_gt) - rom.write_byte(0x18005F, world.crystals_needed_for_ganon) - rom.write_byte(0x18008A, 0x01 if world.mode == "standard" else 0x00) # block HC upstairs doors in rain state in standard mode + rom.write_byte(0x18005E, world.crystals_needed_for_gt[player]) + rom.write_byte(0x18005F, world.crystals_needed_for_ganon[player]) # Bitfield - enable text box to show with free roaming items # @@ -919,14 +1113,19 @@ def patch_rom(world, player, rom): # m - enabled for inside maps # c - enabled for inside compasses # s - enabled for inside small keys - rom.write_byte(0x18016A, 0xFF if world.keysanity else 0x00) - - rom.write_byte(0x18003B, 0x01 if world.keysanity else 0x00) # maps showing crystals on overworld + # block HC upstairs doors in rain state in standard mode + rom.write_byte(0x18008A, 0x01 if world.mode[player] == "standard" and world.shuffle[player] != 'vanilla' else 0x00) + + rom.write_byte(0x18016A, 0x10 | ((0x01 if world.keyshuffle[player] else 0x00) + | (0x02 if world.compassshuffle[player] else 0x00) + | (0x04 if world.mapshuffle[player] else 0x00) + | (0x08 if world.bigkeyshuffle[player] else 0x00))) # free roaming item text boxes + rom.write_byte(0x18003B, 0x01 if world.mapshuffle[player] else 0x00) # maps showing crystals on overworld # compasses showing dungeon count - if world.clock_mode != 'off': + if world.clock_mode[player]: rom.write_byte(0x18003C, 0x00) # Currently must be off if timer is on, because they use same HUD location - elif world.keysanity: + elif world.compassshuffle[player]: rom.write_byte(0x18003C, 0x01) # show on pickup else: rom.write_byte(0x18003C, 0x00) @@ -939,7 +1138,10 @@ def patch_rom(world, player, rom): # b - Big Key # a - Small Key # - rom.write_byte(0x180045, 0xFF if world.keysanity else 0x00) # free roaming items in menu + rom.write_byte(0x180045, ((0x01 if world.keyshuffle[player] else 0x00) + | (0x02 if world.bigkeyshuffle[player] else 0x00) + | (0x04 if world.compassshuffle[player] else 0x00) + | (0x08 if world.mapshuffle[player] else 0x00))) # free roaming items in menu # Map reveals reveal_bytes = { @@ -964,23 +1166,23 @@ def patch_rom(world, player, rom): return reveal_bytes.get(location.parent_region.dungeon.name, 0x0000) return 0x0000 - rom.write_int16(0x18017A, get_reveal_bytes('Green Pendant') if world.keysanity else 0x0000) # Sahasrahla reveal - rom.write_int16(0x18017C, get_reveal_bytes('Crystal 5')|get_reveal_bytes('Crystal 6') if world.keysanity else 0x0000) # Bomb Shop Reveal + write_int16(rom, 0x18017A, get_reveal_bytes('Green Pendant') if world.mapshuffle[player] else 0x0000) # Sahasrahla reveal + write_int16(rom, 0x18017C, get_reveal_bytes('Crystal 5')|get_reveal_bytes('Crystal 6') if world.mapshuffle[player] else 0x0000) # Bomb Shop Reveal - rom.write_byte(0x180172, 0x01 if world.retro else 0x00) # universal keys - rom.write_byte(0x180175, 0x01 if world.retro else 0x00) # rupee bow - rom.write_byte(0x180176, 0x0A if world.retro else 0x00) # wood arrow cost - rom.write_byte(0x180178, 0x32 if world.retro else 0x00) # silver arrow cost - rom.write_byte(0x301FC, 0xDA if world.retro else 0xE1) # rupees replace arrows under pots - rom.write_byte(0x30052, 0xDB if world.retro else 0xE2) # replace arrows in fish prize from bottle merchant - rom.write_bytes(0xECB4E, [0xA9, 0x00, 0xEA, 0xEA] if world.retro else [0xAF, 0x77, 0xF3, 0x7E]) # Thief steals rupees instead of arrows - rom.write_bytes(0xF0D96, [0xA9, 0x00, 0xEA, 0xEA] if world.retro else [0xAF, 0x77, 0xF3, 0x7E]) # Pikit steals rupees instead of arrows - rom.write_bytes(0xEDA5, [0x35, 0x41] if world.retro else [0x43, 0x44]) # Chest game gives rupees instead of arrows + rom.write_byte(0x180172, 0x01 if world.retro[player] else 0x00) # universal keys + rom.write_byte(0x180175, 0x01 if world.retro[player] else 0x00) # rupee bow + rom.write_byte(0x180176, 0x0A if world.retro[player] else 0x00) # wood arrow cost + rom.write_byte(0x180178, 0x32 if world.retro[player] else 0x00) # silver arrow cost + rom.write_byte(0x301FC, 0xDA if world.retro[player] else 0xE1) # rupees replace arrows under pots + rom.write_byte(0x30052, 0xDB if world.retro[player] else 0xE2) # replace arrows in fish prize from bottle merchant + rom.write_bytes(0xECB4E, [0xA9, 0x00, 0xEA, 0xEA] if world.retro[player] else [0xAF, 0x77, 0xF3, 0x7E]) # Thief steals rupees instead of arrows + rom.write_bytes(0xF0D96, [0xA9, 0x00, 0xEA, 0xEA] if world.retro[player] else [0xAF, 0x77, 0xF3, 0x7E]) # Pikit steals rupees instead of arrows + rom.write_bytes(0xEDA5, [0x35, 0x41] if world.retro[player] else [0x43, 0x44]) # Chest game gives rupees instead of arrows digging_game_rng = random.randint(1, 30) # set rng for digging game rom.write_byte(0x180020, digging_game_rng) rom.write_byte(0xEFD95, digging_game_rng) rom.write_byte(0x1800A3, 0x01) # enable correct world setting behaviour after agahnim kills - rom.write_byte(0x1800A4, 0x01 if world.logic != 'nologic' else 0x00) # enable POD EG fix + rom.write_byte(0x1800A4, 0x01 if world.logic[player] != 'nologic' else 0x00) # enable POD EG fix rom.write_byte(0x180042, 0x01 if world.save_and_quit_from_boss else 0x00) # Allow Save and Quit after boss kill # remove shield from uncle @@ -993,17 +1195,22 @@ def patch_rom(world, player, rom): rom.write_bytes(0x6D313, [0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E]) rom.write_byte(0x18004E, 0) # Escape Fill (nothing) - rom.write_int16(0x180183, 300) # Escape fill rupee bow + write_int16(rom, 0x180183, 300) # Escape fill rupee bow rom.write_bytes(0x180185, [0,0,0]) # Uncle respawn refills (magic, bombs, arrows) rom.write_bytes(0x180188, [0,0,0]) # Zelda respawn refills (magic, bombs, arrows) rom.write_bytes(0x18018B, [0,0,0]) # Mantle respawn refills (magic, bombs, arrows) - if world.mode == 'standard': + if world.mode[player] == 'standard': if uncle_location.item is not None and uncle_location.item.name in ['Bow', 'Progressive Bow']: rom.write_byte(0x18004E, 1) # Escape Fill (arrows) - rom.write_int16(0x180183, 300) # Escape fill rupee bow + write_int16(rom, 0x180183, 300) # Escape fill rupee bow rom.write_bytes(0x180185, [0,0,70]) # Uncle respawn refills (magic, bombs, arrows) rom.write_bytes(0x180188, [0,0,10]) # Zelda respawn refills (magic, bombs, arrows) rom.write_bytes(0x18018B, [0,0,10]) # Mantle respawn refills (magic, bombs, arrows) + elif uncle_location.item is not None and uncle_location.item.name in ['Bombs (10)']: + rom.write_byte(0x18004E, 2) # Escape Fill (bombs) + rom.write_bytes(0x180185, [0,50,0]) # Uncle respawn refills (magic, bombs, arrows) + rom.write_bytes(0x180188, [0,3,0]) # Zelda respawn refills (magic, bombs, arrows) + rom.write_bytes(0x18018B, [0,3,0]) # Mantle respawn refills (magic, bombs, arrows) elif uncle_location.item is not None and uncle_location.item.name in ['Cane of Somaria', 'Cane of Byrna', 'Fire Rod']: rom.write_byte(0x18004E, 4) # Escape Fill (magic) rom.write_bytes(0x180185, [0x80,0,0]) # Uncle respawn refills (magic, bombs, arrows) @@ -1018,7 +1225,7 @@ def patch_rom(world, player, rom): rom.write_bytes(0x02F539, [0xEA, 0xEA, 0xEA, 0xEA, 0xEA] if world.powder_patch_required[player] else [0xAD, 0xBF, 0x0A, 0xF0, 0x4F]) # allow smith into multi-entrance caves in appropriate shuffles - if world.shuffle in ['restricted', 'full', 'crossed', 'insanity']: + if world.shuffle[player] in ['restricted', 'full', 'crossed', 'insanity']: rom.write_byte(0x18004C, 0x01) # set correct flag for hera basement item @@ -1029,7 +1236,7 @@ def patch_rom(world, player, rom): rom.write_byte(0x4E3BB, 0xEB) # fix trock doors for reverse entrances - if world.fix_trock_doors: + if world.fix_trock_doors[player]: rom.write_byte(0xFED31, 0x0E) # preopen bombable exit rom.write_byte(0xFEE41, 0x0E) # preopen bombable exit # included unconditionally in base2current @@ -1038,15 +1245,21 @@ def patch_rom(world, player, rom): rom.write_byte(0xFED31, 0x2A) # preopen bombable exit rom.write_byte(0xFEE41, 0x2A) # preopen bombable exit - write_strings(rom, world, player) + write_strings(rom, world, player, team) + + rom.write_byte(0x18636C, 1 if world.remote_items[player] else 0) # set rom name # 21 bytes from Main import __version__ - rom.name = bytearray('ER_{0}_{1:09}\0'.format(__version__[0:7],world.seed), 'utf8') - assert len(rom.name) <= 21 + rom.name = bytearray(f'ER{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{world.seed:09}\0', 'utf8')[:21] + rom.name.extend([0] * (21 - len(rom.name))) rom.write_bytes(0x7FC0, rom.name) + # set player names + for p in range(1, min(world.players, 64) + 1): + rom.write_bytes(0x186380 + ((p - 1) * 32), hud_format_text(world.player_names[p][team])) + # Write title screen Code hashint = int(rom.get_hash(), 16) code = [ @@ -1057,11 +1270,23 @@ def patch_rom(world, player, rom): hashint & 0x1F, ] rom.write_bytes(0x180215, code) + rom.hash = code return rom +try: + import RaceRom +except ImportError: + RaceRom = None + +def patch_race_rom(rom): + rom.write_bytes(0x180213, [0x01, 0x00]) # Tournament Seed + + if 'RaceRom' in sys.modules: + RaceRom.encrypt(rom) + def write_custom_shops(rom, world, player): - shops = [shop for shop in world.shops if shop.replaceable and shop.active and shop.region.player == player] + shops = [shop for shop in world.shops if shop.custom and shop.region.player == player] shop_data = bytearray() items_data = bytearray() @@ -1091,8 +1316,27 @@ def write_custom_shops(rom, world, player): rom.write_bytes(0x184900, items_data) +def hud_format_text(text): + output = bytes() + for char in text.lower(): + if 'a' <= char <= 'z': + output += bytes([0x5d + ord(char) - ord('a'), 0x29]) + elif '0' <= char <= '8': + output += bytes([0x77 + ord(char) - ord('0'), 0x29]) + elif char == '9': + output += b'\x4b\x29' + elif char == ' ': + output += b'\x7f\x00' + else: + output += b'\x2a\x29' + while len(output) < 32: + output += b'\x7f\x00' + return output[:32] -def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, sprite): + +def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, sprite, ow_palettes, uw_palettes): + if sprite and not isinstance(sprite, Sprite): + sprite = Sprite(sprite) if os.path.isfile(sprite) else get_sprite_from_name(sprite) # enable instant item menu if fastmenu == 'instant': @@ -1118,16 +1362,12 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr rom.write_byte(0x18004B, 0x01 if quickswap else 0x00) - rom.write_byte(0x18021A, 1 if disable_music else 0x00) + rom.write_byte(0x0CFE18, 0x00 if disable_music else rom.orig_buffer[0x0CFE18] if rom.orig_buffer else 0x70) + rom.write_byte(0x0CFEC1, 0x00 if disable_music else rom.orig_buffer[0x0CFEC1] if rom.orig_buffer else 0xC0) + rom.write_bytes(0x0D0000, [0x00, 0x00] if disable_music else rom.orig_buffer[0x0D0000:0x0D0002] if rom.orig_buffer else [0xDA, 0x58]) + rom.write_bytes(0x0D00E7, [0xC4, 0x58] if disable_music else rom.orig_buffer[0x0D00E7:0x0D00E9] if rom.orig_buffer else [0xDA, 0x58]) - # restore Mirror sound effect volumes (for existing seeds that lack it) - rom.write_byte(0xD3E04, 0xC8) - rom.write_byte(0xD3DC6, 0xC8) - rom.write_byte(0xD3D6E, 0xC8) - rom.write_byte(0xD3D34, 0xC8) - rom.write_byte(0xD3D55, 0xC8) - rom.write_byte(0xD3E38, 0xC8) - rom.write_byte(0xD3DAA, 0xFA) + rom.write_byte(0x18021A, 1 if disable_music else 0x00) # set heart beep rate rom.write_byte(0x180033, {'off': 0x00, 'half': 0x40, 'quarter': 0x80, 'normal': 0x20, 'double': 0x10}[beep]) @@ -1151,6 +1391,18 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr if sprite is not None: write_sprite(rom, sprite) + default_ow_palettes(rom) + if ow_palettes == 'random': + randomize_ow_palettes(rom) + elif ow_palettes == 'blackout': + blackout_ow_palettes(rom) + + default_uw_palettes(rom) + if uw_palettes == 'random': + randomize_uw_palettes(rom) + elif uw_palettes == 'blackout': + blackout_uw_palettes(rom) + if isinstance(rom, LocalRom): rom.write_crc() @@ -1162,44 +1414,195 @@ def write_sprite(rom, sprite): rom.write_bytes(0xDD308, sprite.palette) rom.write_bytes(0xDEDF5, sprite.glove_palette) +def set_color(rom, address, color, shade): + r = round(min(color[0], 0xFF) * pow(0.8, shade) * 0x1F / 0xFF) + g = round(min(color[1], 0xFF) * pow(0.8, shade) * 0x1F / 0xFF) + b = round(min(color[2], 0xFF) * pow(0.8, shade) * 0x1F / 0xFF) + + rom.write_bytes(address, ((b << 10) | (g << 5) | (r << 0)).to_bytes(2, byteorder='little', signed=False)) + +def default_ow_palettes(rom): + if not rom.orig_buffer: + return + rom.write_bytes(0xDE604, rom.orig_buffer[0xDE604:0xDEBB4]) + + for address in [0x067FB4, 0x067F94, 0x067FC6, 0x067FE6, 0x067FE1, 0x05FEA9, 0x05FEB3]: + rom.write_bytes(address, rom.orig_buffer[address:address+2]) + +def randomize_ow_palettes(rom): + grass, grass2, grass3, dirt, dirt2, water, clouds, dwdirt,\ + dwgrass, dwwater, dwdmdirt, dwdmgrass, dwdmclouds1, dwdmclouds2 = [[random.randint(60, 215) for _ in range(3)] for _ in range(14)] + dwtree = [c + random.randint(-20, 10) for c in dwgrass] + treeleaf = [c + random.randint(-20, 10) for c in grass] + + patches = {0x067FB4: (grass, 0), 0x067F94: (grass, 0), 0x067FC6: (grass, 0), 0x067FE6: (grass, 0), 0x067FE1: (grass, 3), 0x05FEA9: (grass, 0), 0x05FEB3: (dwgrass, 1), + 0x0DD4AC: (grass, 2), 0x0DE6DE: (grass2, 2), 0x0DE6E0: (grass2, 1), 0x0DD4AE: (grass2, 1), 0x0DE9FA: (grass2, 1), 0x0DEA0E: (grass2, 1), 0x0DE9FE: (grass2, 0), + 0x0DD3D2: (grass2, 2), 0x0DE88C: (grass2, 2), 0x0DE8A8: (grass2, 2), 0x0DE9F8: (grass2, 2), 0x0DEA4E: (grass2, 2), 0x0DEAF6: (grass2, 2), 0x0DEB2E: (grass2, 2), 0x0DEB4A: (grass2, 2), + 0x0DE892: (grass, 1), 0x0DE886: (grass, 0), 0x0DE6D2: (grass, 0), 0x0DE6FA: (grass, 3), 0x0DE6FC: (grass, 0), 0x0DE6FE: (grass, 0), 0x0DE70A: (grass, 0), 0x0DE708: (grass, 2), 0x0DE70C: (grass, 1), + 0x0DE6D4: (dirt, 2), 0x0DE6CA: (dirt, 5), 0x0DE6CC: (dirt, 4), 0x0DE6CE: (dirt, 3), 0x0DE6E2: (dirt, 2), 0x0DE6D8: (dirt, 5), 0x0DE6DA: (dirt, 4), 0x0DE6DC: (dirt, 2), + 0x0DE6F0: (dirt, 2), 0x0DE6E6: (dirt, 5), 0x0DE6E8: (dirt, 4), 0x0DE6EA: (dirt, 2), 0x0DE6EC: (dirt, 4), 0x0DE6EE: (dirt, 2), + 0x0DE91E: (grass, 0), + 0x0DE920: (dirt, 2), 0x0DE916: (dirt, 3), 0x0DE934: (dirt, 3), + 0x0DE92C: (grass, 0), 0x0DE93A: (grass, 0), 0x0DE91C: (grass, 1), 0x0DE92A: (grass, 1), 0x0DEA1C: (grass, 0), 0x0DEA2A: (grass, 0), 0x0DEA30: (grass, 0), + 0x0DEA2E: (dirt, 5), + 0x0DE884: (grass, 3), 0x0DE8AE: (grass, 3), 0x0DE8BE: (grass, 3), 0x0DE8E4: (grass, 3), 0x0DE938: (grass, 3), 0x0DE9C4: (grass, 3), 0x0DE6D0: (grass, 4), + 0x0DE890: (treeleaf, 1), 0x0DE894: (treeleaf, 0), + 0x0DE924: (water, 3), 0x0DE668: (water, 3), 0x0DE66A: (water, 2), 0x0DE670: (water, 1), 0x0DE918: (water, 1), 0x0DE66C: (water, 0), 0x0DE91A: (water, 0), 0x0DE92E: (water, 1), 0x0DEA1A: (water, 1), 0x0DEA16: (water, 3), 0x0DEA10: (water, 4), + 0x0DE66E: (dirt, 3), 0x0DE672: (dirt, 2), 0x0DE932: (dirt, 4), 0x0DE936: (dirt, 2), 0x0DE93C: (dirt, 1), + 0x0DE756: (dirt2, 4), 0x0DE764: (dirt2, 4), 0x0DE772: (dirt2, 4), 0x0DE994: (dirt2, 4), 0x0DE9A2: (dirt2, 4), 0x0DE758: (dirt2, 3), 0x0DE766: (dirt2, 3), 0x0DE774: (dirt2, 3), + 0x0DE996: (dirt2, 3), 0x0DE9A4: (dirt2, 3), 0x0DE75A: (dirt2, 2), 0x0DE768: (dirt2, 2), 0x0DE776: (dirt2, 2), 0x0DE778: (dirt2, 2), 0x0DE998: (dirt2, 2), 0x0DE9A6: (dirt2, 2), + 0x0DE9AC: (dirt2, 1), 0x0DE99E: (dirt2, 1), 0x0DE760: (dirt2, 1), 0x0DE77A: (dirt2, 1), 0x0DE77C: (dirt2, 1), 0x0DE798: (dirt2, 1), 0x0DE980: (dirt2, 1), + 0x0DE75C: (grass3, 2), 0x0DE786: (grass3, 2), 0x0DE794: (grass3, 2), 0x0DE99A: (grass3, 2), 0x0DE75E: (grass3, 1), 0x0DE788: (grass3, 1), 0x0DE796: (grass3, 1), 0x0DE99C: (grass3, 1), + 0x0DE76A: (clouds, 2), 0x0DE9A8: (clouds, 2), 0x0DE76E: (clouds, 0), 0x0DE9AA: (clouds, 0), 0x0DE8DA: (clouds, 0), 0x0DE8D8: (clouds, 0), 0x0DE8D0: (clouds, 0), 0x0DE98C: (clouds, 2), 0x0DE990: (clouds, 0), + 0x0DEB34: (dwtree, 4), 0x0DEB30: (dwtree, 3), 0x0DEB32: (dwtree, 1), + 0x0DE710: (dwdirt, 5), 0x0DE71E: (dwdirt, 5), 0x0DE72C: (dwdirt, 5), 0x0DEAD6: (dwdirt, 5), 0x0DE712: (dwdirt, 4), 0x0DE720: (dwdirt, 4), 0x0DE72E: (dwdirt, 4), 0x0DE660: (dwdirt, 4), + 0x0DEAD8: (dwdirt, 4), 0x0DEADA: (dwdirt, 3), 0x0DE714: (dwdirt, 3), 0x0DE722: (dwdirt, 3), 0x0DE730: (dwdirt, 3), 0x0DE732: (dwdirt, 3), 0x0DE734: (dwdirt, 2), 0x0DE736: (dwdirt, 2), + 0x0DE728: (dwdirt, 2), 0x0DE71A: (dwdirt, 2), 0x0DE664: (dwdirt, 2), 0x0DEAE0: (dwdirt, 2), + 0x0DE716: (dwgrass, 3), 0x0DE740: (dwgrass, 3), 0x0DE74E: (dwgrass, 3), 0x0DEAC0: (dwgrass, 3), 0x0DEACE: (dwgrass, 3), 0x0DEADC: (dwgrass, 3), 0x0DEB24: (dwgrass, 3), 0x0DE752: (dwgrass, 2), + 0x0DE718: (dwgrass, 1), 0x0DE742: (dwgrass, 1), 0x0DE750: (dwgrass, 1), 0x0DEB26: (dwgrass, 1), 0x0DEAC2: (dwgrass, 1), 0x0DEAD0: (dwgrass, 1), 0x0DEADE: (dwgrass, 1), + 0x0DE65A: (dwwater, 5), 0x0DE65C: (dwwater, 3), 0x0DEAC8: (dwwater, 3), 0x0DEAD2: (dwwater, 2), 0x0DEABC: (dwwater, 2), 0x0DE662: (dwwater, 2), 0x0DE65E: (dwwater, 1), 0x0DEABE: (dwwater, 1), 0x0DEA98: (dwwater, 2), + 0x0DE79A: (dwdmdirt, 6), 0x0DE7A8: (dwdmdirt, 6), 0x0DE7B6: (dwdmdirt, 6), 0x0DEB60: (dwdmdirt, 6), 0x0DEB6E: (dwdmdirt, 6), 0x0DE93E: (dwdmdirt, 6), 0x0DE94C: (dwdmdirt, 6), 0x0DEBA6: (dwdmdirt, 6), + 0x0DE79C: (dwdmdirt, 4), 0x0DE7AA: (dwdmdirt, 4), 0x0DE7B8: (dwdmdirt, 4), 0x0DEB70: (dwdmdirt, 4), 0x0DEBA8: (dwdmdirt, 4), 0x0DEB72: (dwdmdirt, 3), 0x0DEB74: (dwdmdirt, 3), 0x0DE79E: (dwdmdirt, 3), 0x0DE7AC: (dwdmdirt, 3), 0x0DEBAA: (dwdmdirt, 3), 0x0DE7A0: (dwdmdirt, 3), + 0x0DE7BC: (dwdmgrass, 3), + 0x0DEBAC: (dwdmdirt, 2), 0x0DE7AE: (dwdmdirt, 2), 0x0DE7C2: (dwdmdirt, 2), 0x0DE7A6: (dwdmdirt, 2), 0x0DEB7A: (dwdmdirt, 2), 0x0DEB6C: (dwdmdirt, 2), 0x0DE7C0: (dwdmdirt, 2), + 0x0DE7A2: (dwdmgrass, 3), 0x0DE7BE: (dwdmgrass, 3), 0x0DE7CC: (dwdmgrass, 3), 0x0DE7DA: (dwdmgrass, 3), 0x0DEB6A: (dwdmgrass, 3), 0x0DE948: (dwdmgrass, 3), 0x0DE956: (dwdmgrass, 3), 0x0DE964: (dwdmgrass, 3), 0x0DE7CE: (dwdmgrass, 1), 0x0DE7A4: (dwdmgrass, 1), 0x0DEBA2: (dwdmgrass, 1), 0x0DEBB0: (dwdmgrass, 1), + 0x0DE644: (dwdmclouds1, 2), 0x0DEB84: (dwdmclouds1, 2), 0x0DE648: (dwdmclouds1, 1), 0x0DEB88: (dwdmclouds1, 1), + 0x0DEBAE: (dwdmclouds2, 2), 0x0DE7B0: (dwdmclouds2, 2), 0x0DE7B4: (dwdmclouds2, 0), 0x0DEB78: (dwdmclouds2, 0), 0x0DEBB2: (dwdmclouds2, 0) + } + for address, (color, shade) in patches.items(): + set_color(rom, address, color, shade) + +def blackout_ow_palettes(rom): + rom.write_bytes(0xDE604, [0] * 0xC4) + for i in range(0xDE6C8, 0xDE86C, 70): + rom.write_bytes(i, [0] * 64) + rom.write_bytes(i+66, [0] * 4) + rom.write_bytes(0xDE86C, [0] * 0x348) + + for address in [0x067FB4, 0x067F94, 0x067FC6, 0x067FE6, 0x067FE1, 0x05FEA9, 0x05FEB3]: + rom.write_bytes(address, [0,0]) + +def default_uw_palettes(rom): + if not rom.orig_buffer: + return + rom.write_bytes(0xDD734, rom.orig_buffer[0xDD734:0xDE544]) + +def randomize_uw_palettes(rom): + for dungeon in range(20): + wall, pot, chest, floor1, floor2, floor3 = [[random.randint(60, 240) for _ in range(3)] for _ in range(6)] + + for i in range(5): + shade = 10 - (i * 2) + set_color(rom, 0x0DD734 + (0xB4 * dungeon) + (i * 2), wall, shade) + set_color(rom, 0x0DD770 + (0xB4 * dungeon) + (i * 2), wall, shade) + set_color(rom, 0x0DD744 + (0xB4 * dungeon) + (i * 2), wall, shade) + if dungeon == 0: + set_color(rom, 0x0DD7CA + (0xB4 * dungeon) + (i * 2), wall, shade) + + if dungeon == 2: + set_color(rom, 0x0DD74E + (0xB4 * dungeon), wall, 3) + set_color(rom, 0x0DD750 + (0xB4 * dungeon), wall, 5) + set_color(rom, 0x0DD73E + (0xB4 * dungeon), wall, 3) + set_color(rom, 0x0DD740 + (0xB4 * dungeon), wall, 5) + + set_color(rom, 0x0DD7E4 + (0xB4 * dungeon), wall, 4) + set_color(rom, 0x0DD7E6 + (0xB4 * dungeon), wall, 2) + + set_color(rom, 0xDD7DA + (0xB4 * dungeon), wall, 10) + set_color(rom, 0xDD7DC + (0xB4 * dungeon), wall, 8) + + set_color(rom, 0x0DD75A + (0xB4 * dungeon), pot, 7) + set_color(rom, 0x0DD75C + (0xB4 * dungeon), pot, 1) + set_color(rom, 0x0DD75E + (0xB4 * dungeon), pot, 3) + + set_color(rom, 0x0DD76A + (0xB4 * dungeon), wall, 7) + set_color(rom, 0x0DD76C + (0xB4 * dungeon), wall, 2) + set_color(rom, 0x0DD76E + (0xB4 * dungeon), wall, 4) + + set_color(rom, 0x0DD7AE + (0xB4 * dungeon), chest, 2) + set_color(rom, 0x0DD7B0 + (0xB4 * dungeon), chest, 0) + + for i in range(3): + shade = 6 - (i * 2) + set_color(rom, 0x0DD764 + (0xB4 * dungeon) + (i * 2), floor1, shade) + set_color(rom, 0x0DD782 + (0xB4 * dungeon) + (i * 2), floor1, shade + 3) + + set_color(rom, 0x0DD7A0 + (0xB4 * dungeon) + (i * 2), floor2, shade) + set_color(rom, 0x0DD7BE + (0xB4 * dungeon) + (i * 2), floor2, shade + 3) + + set_color(rom, 0x0DD7E2 + (0xB4 * dungeon), floor3, 3) + set_color(rom, 0x0DD796 + (0xB4 * dungeon), floor3, 4) + +def blackout_uw_palettes(rom): + for i in range(0xDD734, 0xDE544, 180): + rom.write_bytes(i, [0] * 38) + rom.write_bytes(i+44, [0] * 76) + rom.write_bytes(i+136, [0] * 44) + +def get_hash_string(hash): + return ", ".join([hash_alphabet[code & 0x1F] for code in hash]) def write_string_to_rom(rom, target, string): address, maxbytes = text_addresses[target] rom.write_bytes(address, MultiByteTextMapper.convert(string, maxbytes)) -def write_strings(rom, world, player): +def write_strings(rom, world, player, team): tt = TextTable() tt.removeUnwantedText() # Let's keep this guy's text accurate to the shuffle setting. - if world.shuffle in ['vanilla', 'dungeonsfull', 'dungeonssimple']: + if world.shuffle[player] in ['vanilla', 'dungeonsfull', 'dungeonssimple']: tt['kakariko_flophouse_man_no_flippers'] = 'I really hate mowing my yard.\n{PAGEBREAK}\nI should move.' tt['kakariko_flophouse_man'] = 'I really hate mowing my yard.\n{PAGEBREAK}\nI should move.' def hint_text(dest, ped_hint=False): - hint = dest.hint_text if not ped_hint else dest.pedestal_hint_text + if not dest: + return "nothing" + if ped_hint: + hint = dest.pedestal_hint_text if dest.pedestal_hint_text else "unknown item" + else: + hint = dest.hint_text if dest.hint_text else "something" if dest.player != player: if ped_hint: - hint += " for p%d!" % dest.player + hint += f" for {world.player_names[dest.player][team]}!" elif type(dest) in [Region, Location]: - hint += " in p%d's world" % dest.player - elif type(dest) is Item: - hint += " for p%d" % dest.player + hint += f" in {world.player_names[dest.player][team]}'s world" + else: + hint += f" for {world.player_names[dest.player][team]}" return hint # For hints, first we write hints about entrances, some from the inconvenient list others from all reasonable entrances. - if world.hints: + if world.hints[player]: tt['sign_north_of_links_house'] = '> Randomizer The telepathic tiles can have hints!' - entrances_to_hint = {} - entrances_to_hint.update(InconvenientEntrances) - if world.shuffle_ganon: - entrances_to_hint.update({'Ganons Tower': 'Ganon\'s Tower'}) hint_locations = HintLocations.copy() random.shuffle(hint_locations) all_entrances = [entrance for entrance in world.get_entrances() if entrance.player == player] random.shuffle(all_entrances) - hint_count = 4 if world.shuffle != 'vanilla' else 0 + + #First we take care of the one inconvenient dungeon in the appropriately simple shuffles. + entrances_to_hint = {} + entrances_to_hint.update(InconvenientDungeonEntrances) + if world.shuffle_ganon: + if world.mode[player] == 'inverted': + entrances_to_hint.update({'Inverted Ganons Tower': 'The sealed castle door'}) + else: + entrances_to_hint.update({'Ganons Tower': 'Ganon\'s Tower'}) + if world.shuffle[player] in ['simple', 'restricted', 'restricted_legacy']: + for entrance in all_entrances: + if entrance.name in entrances_to_hint: + this_hint = entrances_to_hint[entrance.name] + ' leads to ' + hint_text(entrance.connected_region) + '.' + tt[hint_locations.pop(0)] = this_hint + entrances_to_hint = {} + break + #Now we write inconvenient locations for most shuffles and finish taking care of the less chaotic ones. + entrances_to_hint.update(InconvenientOtherEntrances) + if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + hint_count = 0 + elif world.shuffle[player] in ['simple', 'restricted', 'restricted_legacy']: + hint_count = 2 + else: + hint_count = 4 for entrance in all_entrances: if entrance.name in entrances_to_hint: if hint_count > 0: @@ -1210,12 +1613,32 @@ def write_strings(rom, world, player): else: break + #Next we handle hints for randomly selected other entrances, curating the selection intelligently based on shuffle. + if world.shuffle[player] not in ['simple', 'restricted', 'restricted_legacy']: + entrances_to_hint.update(ConnectorEntrances) + entrances_to_hint.update(DungeonEntrances) + if world.mode[player] == 'inverted': + entrances_to_hint.update({'Inverted Agahnims Tower': 'The dark mountain tower'}) + else: + entrances_to_hint.update({'Agahnims Tower': 'The sealed castle door'}) + elif world.shuffle[player] == 'restricted': + entrances_to_hint.update(ConnectorEntrances) entrances_to_hint.update(OtherEntrances) - if world.shuffle in ['insanity', 'madness_legacy', 'insanity_legacy']: + if world.mode[player] == 'inverted': + entrances_to_hint.update({'Inverted Dark Sanctuary': 'The dark sanctuary cave'}) + entrances_to_hint.update({'Inverted Big Bomb Shop': 'The old hero\'s dark home'}) + entrances_to_hint.update({'Inverted Links House': 'The old hero\'s light home'}) + else: + entrances_to_hint.update({'Dark Sanctuary Hint': 'The dark sanctuary cave'}) + entrances_to_hint.update({'Big Bomb Shop': 'The old bomb shop'}) + if world.shuffle[player] in ['insanity', 'madness_legacy', 'insanity_legacy']: entrances_to_hint.update(InsanityEntrances) if world.shuffle_ganon: - entrances_to_hint.update({'Pyramid Ledge': 'The pyramid ledge'}) - hint_count = 4 if world.shuffle != 'vanilla' else 0 + if world.mode[player] == 'inverted': + entrances_to_hint.update({'Inverted Pyramid Entrance': 'The extra castle passage'}) + else: + entrances_to_hint.update({'Pyramid Ledge': 'The pyramid ledge'}) + hint_count = 4 if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull'] else 0 for entrance in all_entrances: if entrance.name in entrances_to_hint: if hint_count > 0: @@ -1228,8 +1651,10 @@ def write_strings(rom, world, player): # Next we write a few hints for specific inconvenient locations. We don't make many because in entrance this is highly unpredictable. locations_to_hint = InconvenientLocations.copy() + if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + locations_to_hint.extend(InconvenientVanillaLocations) random.shuffle(locations_to_hint) - hint_count = 3 if world.shuffle != 'vanilla' else 4 + hint_count = 3 if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull'] else 5 del locations_to_hint[hint_count:] for location in locations_to_hint: if location == 'Swamp Left': @@ -1265,20 +1690,32 @@ def write_strings(rom, world, player): elif location == 'Eastern Palace - Big Key Chest': this_hint = 'The antifairy guarded chest in Eastern Palace contains ' + hint_text(world.get_location(location, player).item) + '.' tt[hint_locations.pop(0)] = this_hint + elif location == 'Sahasrahla': + this_hint = 'Sahasrahla seeks a green pendant for ' + hint_text(world.get_location(location, player).item) + '.' + tt[hint_locations.pop(0)] = this_hint + elif location == 'Graveyard Cave': + this_hint = 'The cave north of the graveyard contains ' + hint_text(world.get_location(location, player).item) + '.' + tt[hint_locations.pop(0)] = this_hint else: - this_hint = location + ' leads to ' + hint_text(world.get_location(location, player).item) + '.' + this_hint = location + ' contains ' + hint_text(world.get_location(location, player).item) + '.' tt[hint_locations.pop(0)] = this_hint # Lastly we write hints to show where certain interesting items are. It is done the way it is to re-use the silver code and also to give one hint per each type of item regardless of how many exist. This supports many settings well. items_to_hint = RelevantItems.copy() - if world.keysanity: - items_to_hint.extend(KeysanityItems) + if world.keyshuffle[player]: + items_to_hint.extend(SmallKeys) + if world.bigkeyshuffle[player]: + items_to_hint.extend(BigKeys) random.shuffle(items_to_hint) - hint_count = 5 if world.shuffle != 'vanilla' else 7 + hint_count = 5 if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull'] else 8 while hint_count > 0: this_item = items_to_hint.pop(0) this_location = world.find_items(this_item, player) random.shuffle(this_location) + #This looks dumb but prevents hints for Skull Woods Pinball Room's key safely with any item pool. + if this_location: + if this_location[0].name == 'Skull Woods - Pinball Room': + this_location.pop(0) if this_location: this_hint = this_location[0].item.hint_text + ' can be found ' + hint_text(this_location[0]) + '.' tt[hint_locations.pop(0)] = this_hint @@ -1309,8 +1746,13 @@ def write_strings(rom, world, player): if any(prog_bow_locs): silverarrow_hint = (' %s?' % hint_text(random.choice(prog_bow_locs)).replace('Ganon\'s', 'my')) if progressive_silvers else '?\nI think not!' + tt['ganon_phase_3_no_silvers'] = 'Did you find the silver arrows%s' % silverarrow_hint + + if any(prog_bow_locs): + silverarrow_hint = (' %s?' % hint_text(random.choice(prog_bow_locs)).replace('Ganon\'s', 'my')) tt['ganon_phase_3_no_silvers_alt'] = 'Did you find the silver arrows%s' % silverarrow_hint + crystal5 = world.find_items('Crystal 5', player)[0] crystal6 = world.find_items('Crystal 6', player)[0] tt['bomb_shop'] = 'Big Bomb?\nMy supply is blocked until you clear %s and %s.' % (crystal5.hint_text, crystal6.hint_text) @@ -1318,10 +1760,10 @@ def write_strings(rom, world, player): greenpendant = world.find_items('Green Pendant', player)[0] tt['sahasrahla_bring_courage'] = 'I lost my family heirloom in %s' % greenpendant.hint_text - tt['sign_ganons_tower'] = ('You need %d crystal to enter.' if world.crystals_needed_for_gt == 1 else 'You need %d crystals to enter.') % world.crystals_needed_for_gt - tt['sign_ganon'] = ('You need %d crystal to beat Ganon.' if world.crystals_needed_for_ganon == 1 else 'You need %d crystals to beat Ganon.') % world.crystals_needed_for_ganon + tt['sign_ganons_tower'] = ('You need %d crystal to enter.' if world.crystals_needed_for_gt[player] == 1 else 'You need %d crystals to enter.') % world.crystals_needed_for_gt[player] + tt['sign_ganon'] = ('You need %d crystal to beat Ganon.' if world.crystals_needed_for_ganon[player] == 1 else 'You need %d crystals to beat Ganon.') % world.crystals_needed_for_ganon[player] - if world.goal in ['dungeons']: + if world.goal[player] in ['dungeons']: tt['sign_ganon'] = 'You need to complete all the dungeons.' tt['uncle_leaving_text'] = Uncle_texts[random.randint(0, len(Uncle_texts) - 1)] @@ -1332,12 +1774,12 @@ def write_strings(rom, world, player): tt['sahasrahla_quest_have_master_sword'] = Sahasrahla2_texts[random.randint(0, len(Sahasrahla2_texts) - 1)] tt['blind_by_the_light'] = Blind_texts[random.randint(0, len(Blind_texts) - 1)] - if world.goal in ['triforcehunt']: + if world.goal[player] in ['triforcehunt']: tt['ganon_fall_in_alt'] = 'Why are you even here?\n You can\'t even hurt me! Get the Triforce Pieces.' tt['ganon_phase_3_alt'] = 'Seriously? Go Away, I will not Die.' tt['sign_ganon'] = 'Go find the Triforce pieces... Ganon is invincible!' - tt['murahdahla'] = "Hello @. I\nam Murahdahla, brother of\nSahasrahla and Aginah. Behold the power of\ninvisibility.\n\n\n\n… … …\n\nWait! you can see me? I knew I should have\nhidden in a hollow tree. If you bring\n%d triforce pieces, I can reassemble it." % world.treasure_hunt_count - elif world.goal in ['pedestal']: + tt['murahdahla'] = "Hello @. I\nam Murahdahla, brother of\nSahasrahla and Aginah. Behold the power of\ninvisibility.\n\n\n\n… … …\n\nWait! you can see me? I knew I should have\nhidden in a hollow tree. If you bring\n%d triforce pieces, I can reassemble it." % world.treasure_hunt_count[player] + elif world.goal[player] in ['pedestal']: tt['ganon_fall_in_alt'] = 'Why are you even here?\n You can\'t even hurt me! Your goal is at the pedestal.' tt['ganon_phase_3_alt'] = 'Seriously? Go Away, I will not Die.' tt['sign_ganon'] = 'You need to get to the pedestal... Ganon is invincible!' @@ -1361,7 +1803,7 @@ def write_strings(rom, world, player): tt['tablet_bombos_book'] = bombos_text # inverted spawn menu changes - if world.mode == 'inverted': + if world.mode[player] == 'inverted': tt['menu_start_2'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n{CHOICE3}" tt['menu_start_3'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n Mountain Cave\n{CHOICE2}" tt['intro_main'] = CompressedTextMapper.convert( @@ -1410,124 +1852,124 @@ def write_strings(rom, world, player): rom.write_bytes(0x181500, data) rom.write_bytes(0x76CC0, [byte for p in pointers for byte in [p & 0xFF, p >> 8 & 0xFF]]) -def set_inverted_mode(world, rom): +def set_inverted_mode(world, player, rom): rom.write_byte(snes_to_pc(0x0283E0), 0xF0) # residual portals rom.write_byte(snes_to_pc(0x02B34D), 0xF0) rom.write_byte(snes_to_pc(0x06DB78), 0x8B) rom.write_byte(snes_to_pc(0x05AF79), 0xF0) rom.write_byte(snes_to_pc(0x0DB3C5), 0xC6) rom.write_byte(snes_to_pc(0x07A3F4), 0xF0) # duck - rom.write_int16s(snes_to_pc(0x02E849), [0x0043, 0x0056, 0x0058, 0x006C, 0x006F, 0x0070, 0x007B, 0x007F, 0x001B]) # dw flute - rom.write_int16(snes_to_pc(0x02E8D5), 0x07C8) - rom.write_int16(snes_to_pc(0x02E8F7), 0x01F8) + write_int16s(rom, snes_to_pc(0x02E849), [0x0043, 0x0056, 0x0058, 0x006C, 0x006F, 0x0070, 0x007B, 0x007F, 0x001B]) # dw flute + write_int16(rom, snes_to_pc(0x02E8D5), 0x07C8) + write_int16(rom, snes_to_pc(0x02E8F7), 0x01F8) rom.write_byte(snes_to_pc(0x08D40C), 0xD0) # morph proof # the following bytes should only be written in vanilla # or they'll overwrite the randomizer's shuffles - if world.shuffle == 'vanilla': + if world.shuffle[player] == 'vanilla': rom.write_byte(0xDBB73 + 0x23, 0x37) # switch AT and GT rom.write_byte(0xDBB73 + 0x36, 0x24) - rom.write_int16(0x15AEE + 2*0x38, 0x00E0) - rom.write_int16(0x15AEE + 2*0x25, 0x000C) - if world.shuffle in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + write_int16(rom, 0x15AEE + 2*0x38, 0x00E0) + write_int16(rom, 0x15AEE + 2*0x25, 0x000C) + if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: rom.write_byte(0x15B8C, 0x6C) rom.write_byte(0xDBB73 + 0x00, 0x53) # switch bomb shop and links house rom.write_byte(0xDBB73 + 0x52, 0x01) rom.write_byte(0xDBB73 + 0x15, 0x06) # bumper and old man cave - rom.write_int16(0x15AEE + 2*0x17, 0x00F0) + write_int16(rom, 0x15AEE + 2*0x17, 0x00F0) rom.write_byte(0xDBB73 + 0x05, 0x16) - rom.write_int16(0x15AEE + 2*0x07, 0x00FB) + write_int16(rom, 0x15AEE + 2*0x07, 0x00FB) rom.write_byte(0xDBB73 + 0x2D, 0x17) - rom.write_int16(0x15AEE + 2*0x2F, 0x00EB) + write_int16(rom, 0x15AEE + 2*0x2F, 0x00EB) rom.write_byte(0xDBB73 + 0x06, 0x2E) - rom.write_int16(0x15AEE + 2*0x08, 0x00E6) + write_int16(rom, 0x15AEE + 2*0x08, 0x00E6) rom.write_byte(0xDBB73 + 0x16, 0x5E) rom.write_byte(0xDBB73 + 0x6F, 0x07) # DDM fairy to old man cave - rom.write_int16(0x15AEE + 2*0x18, 0x00F1) + write_int16(rom, 0x15AEE + 2*0x18, 0x00F1) rom.write_byte(0x15B8C + 0x18, 0x43) - rom.write_int16(0x15BDB + 2 * 0x18, 0x1400) - rom.write_int16(0x15C79 + 2 * 0x18, 0x0294) - rom.write_int16(0x15D17 + 2 * 0x18, 0x0600) - rom.write_int16(0x15DB5 + 2 * 0x18, 0x02E8) - rom.write_int16(0x15E53 + 2 * 0x18, 0x0678) - rom.write_int16(0x15EF1 + 2 * 0x18, 0x0303) - rom.write_int16(0x15F8F + 2 * 0x18, 0x0685) + write_int16(rom, 0x15BDB + 2 * 0x18, 0x1400) + write_int16(rom, 0x15C79 + 2 * 0x18, 0x0294) + write_int16(rom, 0x15D17 + 2 * 0x18, 0x0600) + write_int16(rom, 0x15DB5 + 2 * 0x18, 0x02E8) + write_int16(rom, 0x15E53 + 2 * 0x18, 0x0678) + write_int16(rom, 0x15EF1 + 2 * 0x18, 0x0303) + write_int16(rom, 0x15F8F + 2 * 0x18, 0x0685) rom.write_byte(0x1602D + 0x18, 0x0A) rom.write_byte(0x1607C + 0x18, 0xF6) - rom.write_int16(0x160CB + 2 * 0x18, 0x0000) - rom.write_int16(0x16169 + 2 * 0x18, 0x0000) - rom.write_int16(0x15AEE + 2 * 0x3D, 0x0003) # pyramid exit and houlihan + write_int16(rom, 0x160CB + 2 * 0x18, 0x0000) + write_int16(rom, 0x16169 + 2 * 0x18, 0x0000) + write_int16(rom, 0x15AEE + 2 * 0x3D, 0x0003) # pyramid exit and houlihan rom.write_byte(0x15B8C + 0x3D, 0x5B) - rom.write_int16(0x15BDB + 2 * 0x3D, 0x0B0E) - rom.write_int16(0x15C79 + 2 * 0x3D, 0x075A) - rom.write_int16(0x15D17 + 2 * 0x3D, 0x0674) - rom.write_int16(0x15DB5 + 2 * 0x3D, 0x07A8) - rom.write_int16(0x15E53 + 2 * 0x3D, 0x06E8) - rom.write_int16(0x15EF1 + 2 * 0x3D, 0x07C7) - rom.write_int16(0x15F8F + 2 * 0x3D, 0x06F3) + write_int16(rom, 0x15BDB + 2 * 0x3D, 0x0B0E) + write_int16(rom, 0x15C79 + 2 * 0x3D, 0x075A) + write_int16(rom, 0x15D17 + 2 * 0x3D, 0x0674) + write_int16(rom, 0x15DB5 + 2 * 0x3D, 0x07A8) + write_int16(rom, 0x15E53 + 2 * 0x3D, 0x06E8) + write_int16(rom, 0x15EF1 + 2 * 0x3D, 0x07C7) + write_int16(rom, 0x15F8F + 2 * 0x3D, 0x06F3) rom.write_byte(0x1602D + 0x3D, 0x06) rom.write_byte(0x1607C + 0x3D, 0xFA) - rom.write_int16(0x160CB + 2 * 0x3D, 0x0000) - rom.write_int16(0x16169 + 2 * 0x3D, 0x0000) - rom.write_int16(snes_to_pc(0x02D8D4), 0x112) # change sactuary spawn point to dark sanc + write_int16(rom, 0x160CB + 2 * 0x3D, 0x0000) + write_int16(rom, 0x16169 + 2 * 0x3D, 0x0000) + write_int16(rom, snes_to_pc(0x02D8D4), 0x112) # change sactuary spawn point to dark sanc rom.write_bytes(snes_to_pc(0x02D8E8), [0x22, 0x22, 0x22, 0x23, 0x04, 0x04, 0x04, 0x05]) - rom.write_int16(snes_to_pc(0x02D91A), 0x0400) - rom.write_int16(snes_to_pc(0x02D928), 0x222E) - rom.write_int16(snes_to_pc(0x02D936), 0x229A) - rom.write_int16(snes_to_pc(0x02D944), 0x0480) - rom.write_int16(snes_to_pc(0x02D952), 0x00A5) - rom.write_int16(snes_to_pc(0x02D960), 0x007F) + write_int16(rom, snes_to_pc(0x02D91A), 0x0400) + write_int16(rom, snes_to_pc(0x02D928), 0x222E) + write_int16(rom, snes_to_pc(0x02D936), 0x229A) + write_int16(rom, snes_to_pc(0x02D944), 0x0480) + write_int16(rom, snes_to_pc(0x02D952), 0x00A5) + write_int16(rom, snes_to_pc(0x02D960), 0x007F) rom.write_byte(snes_to_pc(0x02D96D), 0x14) rom.write_byte(snes_to_pc(0x02D974), 0x00) rom.write_byte(snes_to_pc(0x02D97B), 0xFF) rom.write_byte(snes_to_pc(0x02D982), 0x00) rom.write_byte(snes_to_pc(0x02D989), 0x02) rom.write_byte(snes_to_pc(0x02D990), 0x00) - rom.write_int16(snes_to_pc(0x02D998), 0x0000) - rom.write_int16(snes_to_pc(0x02D9A6), 0x005A) + write_int16(rom, snes_to_pc(0x02D998), 0x0000) + write_int16(rom, snes_to_pc(0x02D9A6), 0x005A) rom.write_byte(snes_to_pc(0x02D9B3), 0x12) # keep the old man spawn point at old man house unless shuffle is vanilla - if world.shuffle in ['vanilla', 'dungeonsfull', 'dungeonssimple']: + if world.shuffle[player] in ['vanilla', 'dungeonsfull', 'dungeonssimple']: rom.write_bytes(snes_to_pc(0x308350), [0x00, 0x00, 0x01]) - rom.write_int16(snes_to_pc(0x02D8DE), 0x00F1) + write_int16(rom, snes_to_pc(0x02D8DE), 0x00F1) rom.write_bytes(snes_to_pc(0x02D910), [0x1F, 0x1E, 0x1F, 0x1F, 0x03, 0x02, 0x03, 0x03]) - rom.write_int16(snes_to_pc(0x02D924), 0x0300) - rom.write_int16(snes_to_pc(0x02D932), 0x1F10) - rom.write_int16(snes_to_pc(0x02D940), 0x1FC0) - rom.write_int16(snes_to_pc(0x02D94E), 0x0378) - rom.write_int16(snes_to_pc(0x02D95C), 0x0187) - rom.write_int16(snes_to_pc(0x02D96A), 0x017F) + write_int16(rom, snes_to_pc(0x02D924), 0x0300) + write_int16(rom, snes_to_pc(0x02D932), 0x1F10) + write_int16(rom, snes_to_pc(0x02D940), 0x1FC0) + write_int16(rom, snes_to_pc(0x02D94E), 0x0378) + write_int16(rom, snes_to_pc(0x02D95C), 0x0187) + write_int16(rom, snes_to_pc(0x02D96A), 0x017F) rom.write_byte(snes_to_pc(0x02D972), 0x06) rom.write_byte(snes_to_pc(0x02D979), 0x00) rom.write_byte(snes_to_pc(0x02D980), 0xFF) rom.write_byte(snes_to_pc(0x02D987), 0x00) rom.write_byte(snes_to_pc(0x02D98E), 0x22) rom.write_byte(snes_to_pc(0x02D995), 0x12) - rom.write_int16(snes_to_pc(0x02D9A2), 0x0000) - rom.write_int16(snes_to_pc(0x02D9B0), 0x0007) + write_int16(rom, snes_to_pc(0x02D9A2), 0x0000) + write_int16(rom, snes_to_pc(0x02D9B0), 0x0007) rom.write_byte(snes_to_pc(0x02D9B8), 0x12) rom.write_bytes(0x180247, [0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00]) - rom.write_int16(0x15AEE + 2 * 0x06, 0x0020) # post aga hyrule castle spawn + write_int16(rom, 0x15AEE + 2 * 0x06, 0x0020) # post aga hyrule castle spawn rom.write_byte(0x15B8C + 0x06, 0x1B) - rom.write_int16(0x15BDB + 2 * 0x06, 0x00AE) - rom.write_int16(0x15C79 + 2 * 0x06, 0x0610) - rom.write_int16(0x15D17 + 2 * 0x06, 0x077E) - rom.write_int16(0x15DB5 + 2 * 0x06, 0x0672) - rom.write_int16(0x15E53 + 2 * 0x06, 0x07F8) - rom.write_int16(0x15EF1 + 2 * 0x06, 0x067D) - rom.write_int16(0x15F8F + 2 * 0x06, 0x0803) + write_int16(rom, 0x15BDB + 2 * 0x06, 0x00AE) + write_int16(rom, 0x15C79 + 2 * 0x06, 0x0610) + write_int16(rom, 0x15D17 + 2 * 0x06, 0x077E) + write_int16(rom, 0x15DB5 + 2 * 0x06, 0x0672) + write_int16(rom, 0x15E53 + 2 * 0x06, 0x07F8) + write_int16(rom, 0x15EF1 + 2 * 0x06, 0x067D) + write_int16(rom, 0x15F8F + 2 * 0x06, 0x0803) rom.write_byte(0x1602D + 0x06, 0x00) rom.write_byte(0x1607C + 0x06, 0xF2) - rom.write_int16(0x160CB + 2 * 0x06, 0x0000) - rom.write_int16(0x16169 + 2 * 0x06, 0x0000) - rom.write_int16(snes_to_pc(0x02E87B), 0x00AE) # move flute splot 9 - rom.write_int16(snes_to_pc(0x02E89D), 0x0610) - rom.write_int16(snes_to_pc(0x02E8BF), 0x077E) - rom.write_int16(snes_to_pc(0x02E8E1), 0x0672) - rom.write_int16(snes_to_pc(0x02E903), 0x07F8) - rom.write_int16(snes_to_pc(0x02E925), 0x067D) - rom.write_int16(snes_to_pc(0x02E947), 0x0803) - rom.write_int16(snes_to_pc(0x02E969), 0x0000) - rom.write_int16(snes_to_pc(0x02E98B), 0xFFF2) + write_int16(rom, 0x160CB + 2 * 0x06, 0x0000) + write_int16(rom, 0x16169 + 2 * 0x06, 0x0000) + write_int16(rom, snes_to_pc(0x02E87B), 0x00AE) # move flute splot 9 + write_int16(rom, snes_to_pc(0x02E89D), 0x0610) + write_int16(rom, snes_to_pc(0x02E8BF), 0x077E) + write_int16(rom, snes_to_pc(0x02E8E1), 0x0672) + write_int16(rom, snes_to_pc(0x02E903), 0x07F8) + write_int16(rom, snes_to_pc(0x02E925), 0x067D) + write_int16(rom, snes_to_pc(0x02E947), 0x0803) + write_int16(rom, snes_to_pc(0x02E969), 0x0000) + write_int16(rom, snes_to_pc(0x02E98B), 0xFFF2) rom.write_byte(snes_to_pc(0x1AF696), 0xF0) # bat sprite retreat rom.write_byte(snes_to_pc(0x1AF6B2), 0x33) rom.write_bytes(snes_to_pc(0x1AF730), [0x6A, 0x9E, 0x0C, 0x00, 0x7A, 0x9E, 0x0C, @@ -1535,7 +1977,7 @@ def set_inverted_mode(world, rom): 0x0C, 0x00, 0x7A, 0xAE, 0x0C, 0x00, 0x8A, 0xAE, 0x0C, 0x00, 0x67, 0x97, 0x0C, 0x00, 0x8D, 0x97, 0x0C, 0x00]) - rom.write_int16s(snes_to_pc(0x0FF1C8), [0x190F, 0x190F, 0x190F, 0x194C, 0x190F, + write_int16s(rom, snes_to_pc(0x0FF1C8), [0x190F, 0x190F, 0x190F, 0x194C, 0x190F, 0x194B, 0x190F, 0x195C, 0x594B, 0x194C, 0x19EE, 0x19EE, 0x194B, 0x19EE, 0x19EE, 0x19EE, 0x594B, 0x190F, 0x595C, 0x190F, @@ -1543,38 +1985,38 @@ def set_inverted_mode(world, rom): 0x19EE, 0x195C, 0x19EE, 0x19EE, 0x19EE, 0x19EE, 0x595C, 0x595B, 0x190F, 0x190F, 0x190F]) - rom.write_int16s(snes_to_pc(0x0FA480), [0x190F, 0x196B, 0x9D04, 0x9D04, 0x196B, + write_int16s(rom, snes_to_pc(0x0FA480), [0x190F, 0x196B, 0x9D04, 0x9D04, 0x196B, 0x190F, 0x9D04, 0x9D04]) - rom.write_int16s(snes_to_pc(0x1bb810), [0x00BE, 0x00C0, 0x013E]) - rom.write_int16s(snes_to_pc(0x1bb836), [0x001B, 0x001B, 0x001B]) - rom.write_int16(snes_to_pc(0x308300), 0x0140) # new pyramid hole entrance - rom.write_int16(snes_to_pc(0x308320), 0x001B) - if world.shuffle in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + write_int16s(rom, snes_to_pc(0x1bb810), [0x00BE, 0x00C0, 0x013E]) + write_int16s(rom, snes_to_pc(0x1bb836), [0x001B, 0x001B, 0x001B]) + write_int16(rom, snes_to_pc(0x308300), 0x0140) # new pyramid hole entrance + write_int16(rom, snes_to_pc(0x308320), 0x001B) + if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: rom.write_byte(snes_to_pc(0x308340), 0x7B) - rom.write_int16(snes_to_pc(0x1af504), 0x148B) - rom.write_int16(snes_to_pc(0x1af50c), 0x149B) - rom.write_int16(snes_to_pc(0x1af514), 0x14A4) - rom.write_int16(snes_to_pc(0x1af51c), 0x1489) - rom.write_int16(snes_to_pc(0x1af524), 0x14AC) - rom.write_int16(snes_to_pc(0x1af52c), 0x54AC) - rom.write_int16(snes_to_pc(0x1af534), 0x148C) - rom.write_int16(snes_to_pc(0x1af53c), 0x548C) - rom.write_int16(snes_to_pc(0x1af544), 0x1484) - rom.write_int16(snes_to_pc(0x1af54c), 0x5484) - rom.write_int16(snes_to_pc(0x1af554), 0x14A2) - rom.write_int16(snes_to_pc(0x1af55c), 0x54A2) - rom.write_int16(snes_to_pc(0x1af564), 0x14A0) - rom.write_int16(snes_to_pc(0x1af56c), 0x54A0) - rom.write_int16(snes_to_pc(0x1af574), 0x148E) - rom.write_int16(snes_to_pc(0x1af57c), 0x548E) - rom.write_int16(snes_to_pc(0x1af584), 0x14AE) - rom.write_int16(snes_to_pc(0x1af58c), 0x54AE) + write_int16(rom, snes_to_pc(0x1af504), 0x148B) + write_int16(rom, snes_to_pc(0x1af50c), 0x149B) + write_int16(rom, snes_to_pc(0x1af514), 0x14A4) + write_int16(rom, snes_to_pc(0x1af51c), 0x1489) + write_int16(rom, snes_to_pc(0x1af524), 0x14AC) + write_int16(rom, snes_to_pc(0x1af52c), 0x54AC) + write_int16(rom, snes_to_pc(0x1af534), 0x148C) + write_int16(rom, snes_to_pc(0x1af53c), 0x548C) + write_int16(rom, snes_to_pc(0x1af544), 0x1484) + write_int16(rom, snes_to_pc(0x1af54c), 0x5484) + write_int16(rom, snes_to_pc(0x1af554), 0x14A2) + write_int16(rom, snes_to_pc(0x1af55c), 0x54A2) + write_int16(rom, snes_to_pc(0x1af564), 0x14A0) + write_int16(rom, snes_to_pc(0x1af56c), 0x54A0) + write_int16(rom, snes_to_pc(0x1af574), 0x148E) + write_int16(rom, snes_to_pc(0x1af57c), 0x548E) + write_int16(rom, snes_to_pc(0x1af584), 0x14AE) + write_int16(rom, snes_to_pc(0x1af58c), 0x54AE) rom.write_byte(snes_to_pc(0x00DB9D), 0x1A) # castle hole graphics rom.write_byte(snes_to_pc(0x00DC09), 0x1A) rom.write_byte(snes_to_pc(0x00D009), 0x31) rom.write_byte(snes_to_pc(0x00D0e8), 0xE0) rom.write_byte(snes_to_pc(0x00D1c7), 0x00) - rom.write_int16(snes_to_pc(0x1BE8DA), 0x39AD) + write_int16(rom, snes_to_pc(0x1BE8DA), 0x39AD) rom.write_byte(0xF6E58, 0x80) # no whirlpool under castle gate rom.write_bytes(0x0086E, [0x5C, 0x00, 0xA0, 0xA1]) # TR tail rom.write_bytes(snes_to_pc(0x1BC67A), [0x2E, 0x0B, 0x82]) # add warps under rocks @@ -1584,25 +2026,25 @@ def set_inverted_mode(world, rom): rom.write_bytes(snes_to_pc(0x1BC3DF), [0xD8, 0xD1]) rom.write_bytes(snes_to_pc(0x1BD1D8), [0xA8, 0x02, 0x82, 0xFF, 0xFF]) rom.write_bytes(snes_to_pc(0x1BC85A), [0x50, 0x0F, 0x82]) - rom.write_int16(0xDB96F + 2 * 0x35, 0x001B) # move pyramid exit door - rom.write_int16(0xDBA71 + 2 * 0x35, 0x06A4) - if world.shuffle in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + write_int16(rom, 0xDB96F + 2 * 0x35, 0x001B) # move pyramid exit door + write_int16(rom, 0xDBA71 + 2 * 0x35, 0x06A4) + if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: rom.write_byte(0xDBB73 + 0x35, 0x36) rom.write_byte(snes_to_pc(0x09D436), 0xF3) # remove castle gate warp - if world.shuffle in ['vanilla', 'dungeonssimple', 'dungeonsfull']: - rom.write_int16(0x15AEE + 2 * 0x37, 0x0010) # pyramid exit to new hc area + if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + write_int16(rom, 0x15AEE + 2 * 0x37, 0x0010) # pyramid exit to new hc area rom.write_byte(0x15B8C + 0x37, 0x1B) - rom.write_int16(0x15BDB + 2 * 0x37, 0x0418) - rom.write_int16(0x15C79 + 2 * 0x37, 0x0679) - rom.write_int16(0x15D17 + 2 * 0x37, 0x06B4) - rom.write_int16(0x15DB5 + 2 * 0x37, 0x06C6) - rom.write_int16(0x15E53 + 2 * 0x37, 0x0738) - rom.write_int16(0x15EF1 + 2 * 0x37, 0x06E6) - rom.write_int16(0x15F8F + 2 * 0x37, 0x0733) + write_int16(rom, 0x15BDB + 2 * 0x37, 0x0418) + write_int16(rom, 0x15C79 + 2 * 0x37, 0x0679) + write_int16(rom, 0x15D17 + 2 * 0x37, 0x06B4) + write_int16(rom, 0x15DB5 + 2 * 0x37, 0x06C6) + write_int16(rom, 0x15E53 + 2 * 0x37, 0x0738) + write_int16(rom, 0x15EF1 + 2 * 0x37, 0x06E6) + write_int16(rom, 0x15F8F + 2 * 0x37, 0x0733) rom.write_byte(0x1602D + 0x37, 0x07) rom.write_byte(0x1607C + 0x37, 0xF9) - rom.write_int16(0x160CB + 2 * 0x37, 0x0000) - rom.write_int16(0x16169 + 2 * 0x37, 0x0000) + write_int16(rom, 0x160CB + 2 * 0x37, 0x0000) + write_int16(rom, 0x16169 + 2 * 0x37, 0x0000) rom.write_bytes(snes_to_pc(0x1BC387), [0xDD, 0xD1]) rom.write_bytes(snes_to_pc(0x1BD1DD), [0xA4, 0x06, 0x82, 0x9E, 0x06, 0x82, 0xFF, 0xFF]) rom.write_byte(0x180089, 0x01) # open TR after exit @@ -1617,59 +2059,64 @@ def patch_shuffled_dark_sanc(world, rom, player): rom.write_byte(0x180241, 0x01) rom.write_byte(0x180248, door_index + 1) - rom.write_int16(0x180250, room_id) + write_int16(rom, 0x180250, room_id) rom.write_byte(0x180252, ow_area) - rom.write_int16s(0x180253, [vram_loc, scroll_y, scroll_x, link_y, link_x, camera_y, camera_x]) + write_int16s(rom, 0x180253, [vram_loc, scroll_y, scroll_x, link_y, link_x, camera_y, camera_x]) rom.write_bytes(0x180262, [unknown_1, unknown_2, 0x00]) -InconvenientEntrances = {'Turtle Rock': 'Turtle Rock Main', - 'Misery Mire': 'Misery Mire', - 'Ice Palace': 'Ice Palace', - 'Skull Woods Final Section': 'The back of Skull Woods', - 'Death Mountain Return Cave (West)': 'The SW DM foothills cave', - 'Mimic Cave': 'Mimic Ledge', - 'Dark World Hammer Peg Cave': 'The rows of pegs', - 'Pyramid Fairy': 'The crack on the pyramid' - } +InconvenientDungeonEntrances = {'Turtle Rock': 'Turtle Rock Main', + 'Misery Mire': 'Misery Mire', + 'Ice Palace': 'Ice Palace', + 'Skull Woods Final Section': 'The back of Skull Woods', + } -OtherEntrances = {'Eastern Palace': 'Eastern Palace', - 'Elder House (East)': 'Elder House', - 'Elder House (West)': 'Elder House', - 'Two Brothers House (East)': 'Eastern Quarreling Brothers\' house', - 'Old Man Cave (West)': 'The lower DM entrance', - 'Hyrule Castle Entrance (South)': 'The ground level castle door', - 'Thieves Town': 'Thieves\' Town', - 'Bumper Cave (Bottom)': 'The lower Bumper Cave', - 'Swamp Palace': 'Swamp Palace', - 'Dark Death Mountain Ledge (West)': 'The East dark DM connector ledge', - 'Dark Death Mountain Ledge (East)': 'The East dark DM connector ledge', - 'Superbunny Cave (Top)': 'The summit of dark DM cave', - 'Superbunny Cave (Bottom)': 'The base of east dark DM', - 'Hookshot Cave': 'The rock on dark DM', - 'Desert Palace Entrance (South)': 'The book sealed passage', - 'Tower of Hera': 'The Tower of Hera', - 'Two Brothers House (West)': 'The door near the race game', - 'Old Man Cave (East)': 'The SW-most cave on west DM', - 'Old Man House (Bottom)': 'A cave with a door on west DM', - 'Old Man House (Top)': 'The eastmost cave on west DM', - 'Death Mountain Return Cave (East)': 'The westmost cave on west DM', - 'Spectacle Rock Cave Peak': 'The highest cave on west DM', - 'Spectacle Rock Cave': 'The right ledge on west DM', - 'Spectacle Rock Cave (Bottom)': 'The left ledge on west DM', - 'Paradox Cave (Bottom)': 'The southmost cave on east DM', - 'Paradox Cave (Middle)': 'The right paired cave on east DM', - 'Paradox Cave (Top)': 'The east DM summit cave', - 'Fairy Ascension Cave (Bottom)': 'The east DM cave behind rocks', - 'Fairy Ascension Cave (Top)': 'The central ledge on east DM', - 'Spiral Cave': 'The left ledge on east DM', - 'Spiral Cave (Bottom)': 'The SWmost cave on east DM', - 'Palace of Darkness': 'Palace of Darkness', - 'Hyrule Castle Entrance (West)': 'The left castle door', - 'Hyrule Castle Entrance (East)': 'The right castle door', - 'Agahnims Tower': 'The sealed castle door', - 'Desert Palace Entrance (West)': 'The westmost building in the desert', - 'Desert Palace Entrance (North)': 'The northmost cave in the desert', - 'Blinds Hideout': 'Blind\'s old house', +InconvenientOtherEntrances = {'Death Mountain Return Cave (West)': 'The SW DM foothills cave', + 'Mimic Cave': 'Mimic Ledge', + 'Dark World Hammer Peg Cave': 'The rows of pegs', + 'Pyramid Fairy': 'The crack on the pyramid' + } + +ConnectorEntrances = {'Elder House (East)': 'Elder House', + 'Elder House (West)': 'Elder House', + 'Two Brothers House (East)': 'Eastern Quarreling Brothers\' house', + 'Old Man Cave (West)': 'The lower DM entrance', + 'Bumper Cave (Bottom)': 'The lower Bumper Cave', + 'Superbunny Cave (Top)': 'The summit of dark DM cave', + 'Superbunny Cave (Bottom)': 'The base of east dark DM', + 'Hookshot Cave': 'The rock on dark DM', + 'Two Brothers House (West)': 'The door near the race game', + 'Old Man Cave (East)': 'The SW-most cave on west DM', + 'Old Man House (Bottom)': 'A cave with a door on west DM', + 'Old Man House (Top)': 'The eastmost cave on west DM', + 'Death Mountain Return Cave (East)': 'The westmost cave on west DM', + 'Spectacle Rock Cave Peak': 'The highest cave on west DM', + 'Spectacle Rock Cave': 'The right ledge on west DM', + 'Spectacle Rock Cave (Bottom)': 'The left ledge on west DM', + 'Paradox Cave (Bottom)': 'The right paired cave on east DM', + 'Paradox Cave (Middle)': 'The southmost cave on east DM', + 'Paradox Cave (Top)': 'The east DM summit cave', + 'Fairy Ascension Cave (Bottom)': 'The east DM cave behind rocks', + 'Fairy Ascension Cave (Top)': 'The central ledge on east DM', + 'Spiral Cave': 'The left ledge on east DM', + 'Spiral Cave (Bottom)': 'The SWmost cave on east DM' + } + +DungeonEntrances = {'Eastern Palace': 'Eastern Palace', + 'Hyrule Castle Entrance (South)': 'The ground level castle door', + 'Thieves Town': 'Thieves\' Town', + 'Swamp Palace': 'Swamp Palace', + 'Dark Death Mountain Ledge (West)': 'The East dark DM connector ledge', + 'Dark Death Mountain Ledge (East)': 'The East dark DM connector ledge', + 'Desert Palace Entrance (South)': 'The book sealed passage', + 'Tower of Hera': 'The Tower of Hera', + 'Palace of Darkness': 'Palace of Darkness', + 'Hyrule Castle Entrance (West)': 'The left castle door', + 'Hyrule Castle Entrance (East)': 'The right castle door', + 'Desert Palace Entrance (West)': 'The westmost building in the desert', + 'Desert Palace Entrance (North)': 'The northmost cave in the desert' + } + +OtherEntrances = {'Blinds Hideout': 'Blind\'s old house', 'Lake Hylia Fairy': 'A cave NE of Lake Hylia', 'Light Hype Fairy': 'The cave south of your house', 'Desert Fairy': 'The cave near the desert', @@ -1709,10 +2156,8 @@ OtherEntrances = {'Eastern Palace': 'Eastern Palace', 'Bonk Fairy (Light)': 'The rock pile near your home', 'Hookshot Fairy': 'The left paired cave on east DM', 'Bonk Fairy (Dark)': 'The rock pile near the old bomb shop', - 'Dark Sanctuary Hint': 'The dark sanctuary cave', 'Dark Lake Hylia Fairy': 'The cave NE dark Lake Hylia', 'C-Shaped House': 'The NE house in Village of Outcasts', - 'Big Bomb Shop': 'The old bomb shop', 'Dark Death Mountain Fairy': 'The SW cave on dark DM', 'Dark Lake Hylia Shop': 'The building NW dark Lake Hylia', 'Dark World Shop': 'The hammer sealed building', @@ -1784,12 +2229,17 @@ InconvenientLocations = ['Spike Cave', 'Ice Palace - Big Chest', 'Ganons Tower - Big Chest', 'Magic Bat'] + +InconvenientVanillaLocations = ['Graveyard Cave', + 'Mimic Cave'] + RelevantItems = ['Bow', + 'Progressive Bow', 'Book of Mudora', 'Hammer', 'Hookshot', 'Magic Mirror', - 'Ocarina', + 'Flute', 'Pegasus Boots', 'Power Glove', 'Cape', @@ -1838,28 +2288,36 @@ RelevantItems = ['Bow', 'Magic Upgrade (1/4)' ] -KeysanityItems = ['Small Key (Eastern Palace)', - 'Big Key (Eastern Palace)', - 'Small Key (Escape)', - 'Small Key (Desert Palace)', - 'Big Key (Desert Palace)', - 'Small Key (Tower of Hera)', - 'Big Key (Tower of Hera)', - 'Small Key (Agahnims Tower)', - 'Small Key (Palace of Darkness)', - 'Big Key (Palace of Darkness)', - 'Small Key (Thieves Town)', - 'Big Key (Thieves Town)', - 'Small Key (Swamp Palace)', - 'Big Key (Swamp Palace)', - 'Small Key (Skull Woods)', - 'Big Key (Skull Woods)', - 'Small Key (Ice Palace)', - 'Big Key (Ice Palace)', - 'Small Key (Misery Mire)', - 'Big Key (Misery Mire)', - 'Small Key (Turtle Rock)', - 'Big Key (Turtle Rock)', - 'Small Key (Ganons Tower)', - 'Big Key (Ganons Tower)' - ] +SmallKeys = ['Small Key (Eastern Palace)', + 'Small Key (Escape)', + 'Small Key (Desert Palace)', + 'Small Key (Tower of Hera)', + 'Small Key (Agahnims Tower)', + 'Small Key (Palace of Darkness)', + 'Small Key (Thieves Town)', + 'Small Key (Swamp Palace)', + 'Small Key (Skull Woods)', + 'Small Key (Ice Palace)', + 'Small Key (Misery Mire)', + 'Small Key (Turtle Rock)', + 'Small Key (Ganons Tower)', + ] + +BigKeys = ['Big Key (Eastern Palace)', + 'Big Key (Desert Palace)', + 'Big Key (Tower of Hera)', + 'Big Key (Palace of Darkness)', + 'Big Key (Thieves Town)', + 'Big Key (Swamp Palace)', + 'Big Key (Skull Woods)', + 'Big Key (Ice Palace)', + 'Big Key (Misery Mire)', + 'Big Key (Turtle Rock)', + 'Big Key (Ganons Tower)' + ] + +hash_alphabet = [ + "Bow", "Boomerang", "Hookshot", "Bomb", "Mushroom", "Powder", "Rod", "Pendant", "Bombos", "Ether", "Quake", + "Lamp", "Hammer", "Shovel", "Flute", "Bug Net", "Book", "Bottle", "Potion", "Cane", "Cape", "Mirror", "Boots", + "Gloves", "Flippers", "Pearl", "Shield", "Tunic", "Heart", "Map", "Compass", "Key" +] diff --git a/Rules.py b/Rules.py index 0ae6ff61..fde3311e 100644 --- a/Rules.py +++ b/Rules.py @@ -5,9 +5,9 @@ from BaseClasses import CollectionState def set_rules(world, player): - if world.logic == 'nologic': + if world.logic[player] == 'nologic': logging.getLogger('').info('WARNING! Seeds generated under this logic often require major glitches and may be impossible!') - if world.mode != 'inverted': + if world.mode[player] != 'inverted': world.get_region('Links House', player).can_reach_private = lambda state: True world.get_region('Sanctuary', player).can_reach_private = lambda state: True old_rule = world.get_region('Old Man House', player).can_reach @@ -16,38 +16,41 @@ def set_rules(world, player): else: world.get_region('Inverted Links House', player).can_reach_private = lambda state: True world.get_region('Inverted Dark Sanctuary', player).entrances[0].parent_region.can_reach_private = lambda state: True - if world.shuffle != 'vanilla': + if world.shuffle[player] != 'vanilla': old_rule = world.get_region('Old Man House', player).can_reach world.get_region('Old Man House', player).can_reach_private = lambda state: state.can_reach('Old Man', 'Location', player) or old_rule(state) + world.get_region('Hyrule Castle Ledge', player).can_reach_private = lambda state: True return - if world.mode != 'inverted': - global_rules(world, player) - if world.mode == 'open': + global_rules(world, player) + if world.mode[player] != 'inverted': + default_rules(world, player) + + if world.mode[player] == 'open': open_rules(world, player) - elif world.mode == 'standard': + elif world.mode[player] == 'standard': standard_rules(world, player) - elif world.mode == 'inverted': + elif world.mode[player] == 'inverted': open_rules(world, player) inverted_rules(world, player) else: raise NotImplementedError('Not implemented yet') - if world.logic == 'noglitches': + if world.logic[player] == 'noglitches': no_glitches_rules(world, player) - elif world.logic == 'minorglitches': + elif world.logic[player] == 'minorglitches': logging.getLogger('').info('Minor Glitches may be buggy still. No guarantee for proper logic checks.') else: raise NotImplementedError('Not implemented yet') - if world.goal == 'dungeons': + if world.goal[player] == 'dungeons': # require all dungeons to beat ganon add_rule(world.get_location('Ganon', player), lambda state: state.can_reach('Master Sword Pedestal', 'Location', player) and state.has('Beat Agahnim 1', player) and state.has('Beat Agahnim 2', player) and state.has_crystals(7, player)) - elif world.goal == 'ganon': + elif world.goal[player] == 'ganon': # require aga2 to beat ganon add_rule(world.get_location('Ganon', player), lambda state: state.has('Beat Agahnim 2', player)) - if world.mode != 'inverted': + if world.mode[player] != 'inverted': set_big_bomb_rules(world, player) else: set_inverted_big_bomb_rules(world, player) @@ -56,7 +59,7 @@ def set_rules(world, player): if not world.swamp_patch_required[player]: add_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has_Mirror(player)) - if world.mode != 'inverted': + if world.mode[player] != 'inverted': set_bunny_rules(world, player) else: set_inverted_bunny_rules(world, player) @@ -103,17 +106,241 @@ def item_name(state, location, player): return None return (location.item.name, location.item.player) - def global_rules(world, player): - if world.goal == 'triforcehunt': - for location in world.get_locations(): - if location.player != player: - forbid_item(location, 'Triforce Piece', player) - # ganon can only carry triforce add_item_rule(world.get_location('Ganon', player), lambda item: item.name == 'Triforce' and item.player == player) - if world.mode == 'standard': + # we can s&q to the old man house after we rescue him. This may be somewhere completely different if caves are shuffled! + old_rule = world.get_region('Old Man House', player).can_reach_private + world.get_region('Old Man House', player).can_reach_private = lambda state: state.can_reach('Old Man', 'Location', player) or old_rule(state) + + set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player)) + set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player)) + set_rule(world.get_location('Purple Chest', player), lambda state: state.has('Pick Up Purple Chest', player)) # Can S&Q with chest + set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player)) + set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player)) + + set_rule(world.get_location('Missing Smith', player), lambda state: state.has('Get Frog', player) and state.can_reach('Blacksmiths Hut', 'Region', player)) # Can't S&Q with smith + set_rule(world.get_location('Blacksmith', player), lambda state: state.has('Return Smith', player)) + set_rule(world.get_location('Magic Bat', player), lambda state: state.has('Magic Powder', player)) + set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player)) + set_rule(world.get_location('Library', player), lambda state: state.has_Boots(player)) + set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player)) + set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player)) + + + set_rule(world.get_location('Spike Cave', player), lambda state: + state.has('Hammer', player) and state.can_lift_rocks(player) and + ((state.has('Cape', player) and state.can_extend_magic(player, 16, True)) or + (state.has('Cane of Byrna', player) and + (state.can_extend_magic(player, 12, True) or + (state.world.can_take_damage[player] and (state.has_Boots(player) or state.has_hearts(player, 4)))))) + ) + + set_rule(world.get_location('Hookshot Cave - Top Right', player), lambda state: state.has('Hookshot', player)) + set_rule(world.get_location('Hookshot Cave - Top Left', player), lambda state: state.has('Hookshot', player)) + set_rule(world.get_location('Hookshot Cave - Bottom Right', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player)) + set_rule(world.get_location('Hookshot Cave - Bottom Left', player), lambda state: state.has('Hookshot', player)) + + set_rule(world.get_entrance('Sewers Door', player), lambda state: state.has_key('Small Key (Escape)', player) or (world.retro[player] and world.mode[player] == 'standard')) # standard retro cannot access the shop + set_rule(world.get_entrance('Sewers Back Door', player), lambda state: state.has_key('Small Key (Escape)', player)) + set_rule(world.get_entrance('Agahnim 1', player), lambda state: state.has_sword(player) and state.has_key('Small Key (Agahnims Tower)', player, 2)) + set_defeat_dungeon_boss_rule(world.get_location('Agahnim 1', player)) + set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.has_key('Small Key (Agahnims Tower)', player)) + + set_rule(world.get_location('Eastern Palace - Big Chest', player), lambda state: state.has('Big Key (Eastern Palace)', player)) + set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) + set_rule(world.get_location('Eastern Palace - Prize', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state)) + for location in ['Eastern Palace - Boss', 'Eastern Palace - Big Chest']: + forbid_item(world.get_location(location, player), 'Big Key (Eastern Palace)', player) + + set_rule(world.get_location('Desert Palace - Big Chest', player), lambda state: state.has('Big Key (Desert Palace)', player)) + set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player)) + set_rule(world.get_entrance('Desert Palace East Wing', player), lambda state: state.has_key('Small Key (Desert Palace)', player)) + set_rule(world.get_location('Desert Palace - Prize', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state)) + set_rule(world.get_location('Desert Palace - Boss', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) + for location in ['Desert Palace - Boss', 'Desert Palace - Big Chest']: + forbid_item(world.get_location(location, player), 'Big Key (Desert Palace)', player) + + for location in ['Desert Palace - Boss', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']: + forbid_item(world.get_location(location, player), 'Small Key (Desert Palace)', player) + + set_rule(world.get_entrance('Tower of Hera Small Key Door', player), lambda state: state.has_key('Small Key (Tower of Hera)', player) or item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player)) + set_rule(world.get_entrance('Tower of Hera Big Key Door', player), lambda state: state.has('Big Key (Tower of Hera)', player)) + set_rule(world.get_location('Tower of Hera - Big Chest', player), lambda state: state.has('Big Key (Tower of Hera)', player)) + set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player)) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Tower of Hera - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Tower of Hera)' and item.player == player) + set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player)) + for location in ['Tower of Hera - Boss', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']: + forbid_item(world.get_location(location, player), 'Big Key (Tower of Hera)', player) +# for location in ['Tower of Hera - Big Key Chest']: +# forbid_item(world.get_location(location, player), 'Small Key (Tower of Hera)', player) + + set_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player)) + set_rule(world.get_entrance('Swamp Palace Small Key Door', player), lambda state: state.has_key('Small Key (Swamp Palace)', player)) + set_rule(world.get_entrance('Swamp Palace (Center)', player), lambda state: state.has('Hammer', player)) + set_rule(world.get_location('Swamp Palace - Big Chest', player), lambda state: state.has('Big Key (Swamp Palace)', player) or item_name(state, 'Swamp Palace - Big Chest', player) == ('Big Key (Swamp Palace)', player)) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Swamp Palace - Big Chest', player), lambda state, item: item.name == 'Big Key (Swamp Palace)' and item.player == player) + set_rule(world.get_entrance('Swamp Palace (North)', player), lambda state: state.has('Hookshot', player)) + set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize', player)) + for location in ['Swamp Palace - Entrance']: + forbid_item(world.get_location(location, player), 'Big Key (Swamp Palace)', player) + + set_rule(world.get_entrance('Thieves Town Big Key Door', player), lambda state: state.has('Big Key (Thieves Town)', player)) + set_rule(world.get_entrance('Blind Fight', player), lambda state: state.has_key('Small Key (Thieves Town)', player)) + set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Prize', player)) + set_rule(world.get_location('Thieves\' Town - Big Chest', player), lambda state: (state.has_key('Small Key (Thieves Town)', player) or item_name(state, 'Thieves\' Town - Big Chest', player) == ('Small Key (Thieves Town)', player)) and state.has('Hammer', player)) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Thieves\' Town - Big Chest', player), lambda state, item: item.name == 'Small Key (Thieves Town)' and item.player == player and state.has('Hammer', player)) + set_rule(world.get_location('Thieves\' Town - Attic', player), lambda state: state.has_key('Small Key (Thieves Town)', player)) + for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']: + forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player) + for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Boss']: + forbid_item(world.get_location(location, player), 'Small Key (Thieves Town)', player) + + set_rule(world.get_entrance('Skull Woods First Section South Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player)) + set_rule(world.get_entrance('Skull Woods First Section (Right) North Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player)) + set_rule(world.get_entrance('Skull Woods First Section West Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) # ideally would only be one key, but we may have spent thst key already on escaping the right section + set_rule(world.get_entrance('Skull Woods First Section (Left) Door to Exit', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) + set_rule(world.get_location('Skull Woods - Big Chest', player), lambda state: state.has('Big Key (Skull Woods)', player) or item_name(state, 'Skull Woods - Big Chest', player) == ('Big Key (Skull Woods)', player)) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Skull Woods - Big Chest', player), lambda state, item: item.name == 'Big Key (Skull Woods)' and item.player == player) + set_rule(world.get_entrance('Skull Woods Torch Room', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 3) and state.has('Fire Rod', player) and state.has_sword(player)) # sword required for curtain + set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player)) + for location in ['Skull Woods - Boss']: + forbid_item(world.get_location(location, player), 'Small Key (Skull Woods)', player) + + set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.can_melt_things(player)) + set_rule(world.get_location('Ice Palace - Big Chest', player), lambda state: state.has('Big Key (Ice Palace)', player)) + set_rule(world.get_entrance('Ice Palace (Kholdstare)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player) and state.has('Big Key (Ice Palace)', player) and (state.has_key('Small Key (Ice Palace)', player, 2) or (state.has('Cane of Somaria', player) and state.has_key('Small Key (Ice Palace)', player, 1)))) + # TODO: investigate change from VT. Changed to hookshot or 2 keys (no checking for big key in specific chests) + set_rule(world.get_entrance('Ice Palace (East)', player), lambda state: (state.has('Hookshot', player) or (item_in_locations(state, 'Big Key (Ice Palace)', player, [('Ice Palace - Spike Room', player), ('Ice Palace - Big Key Chest', player), ('Ice Palace - Map Chest', player)]) and state.has_key('Small Key (Ice Palace)', player))) and (state.world.can_take_damage[player] or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))) + set_rule(world.get_entrance('Ice Palace (East Top)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player)) + set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize', player)) + for location in ['Ice Palace - Big Chest', 'Ice Palace - Boss']: + forbid_item(world.get_location(location, player), 'Big Key (Ice Palace)', player) + + set_rule(world.get_entrance('Misery Mire Entrance Gap', player), lambda state: (state.has_Boots(player) or state.has('Hookshot', player)) and (state.has_sword(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player))) # need to defeat wizzrobes, bombs don't work ... + set_rule(world.get_location('Misery Mire - Big Chest', player), lambda state: state.has('Big Key (Misery Mire)', player)) + set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage[player] and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) + set_rule(world.get_entrance('Misery Mire Big Key Door', player), lambda state: state.has('Big Key (Misery Mire)', player)) + # you can squander the free small key from the pot by opening the south door to the north west switch room, locking you out of accessing a color switch ... + # big key gives backdoor access to that from the teleporter in the north west + set_rule(world.get_location('Misery Mire - Map Chest', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 1) or state.has('Big Key (Misery Mire)', player)) + set_rule(world.get_location('Misery Mire - Main Lobby', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 1) or state.has_key('Big Key (Misery Mire)', player)) + # we can place a small key in the West wing iff it also contains/blocks the Big Key, as we cannot reach and softlock with the basement key door yet + set_rule(world.get_entrance('Misery Mire (West)', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 2) if ((item_name(state, 'Misery Mire - Compass Chest', player) in [('Big Key (Misery Mire)', player)]) or + (item_name(state, 'Misery Mire - Big Key Chest', player) in [('Big Key (Misery Mire)', player)])) else state.has_key('Small Key (Misery Mire)', player, 3)) + set_rule(world.get_location('Misery Mire - Compass Chest', player), lambda state: state.has_fire_source(player)) + set_rule(world.get_location('Misery Mire - Big Key Chest', player), lambda state: state.has_fire_source(player)) + set_rule(world.get_entrance('Misery Mire (Vitreous)', player), lambda state: state.has('Cane of Somaria', player)) + set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize', player)) + for location in ['Misery Mire - Big Chest', 'Misery Mire - Boss']: + forbid_item(world.get_location(location, player), 'Big Key (Misery Mire)', player) + + set_rule(world.get_entrance('Turtle Rock Entrance Gap', player), lambda state: state.has('Cane of Somaria', player)) + set_rule(world.get_entrance('Turtle Rock Entrance Gap Reverse', player), lambda state: state.has('Cane of Somaria', player)) + set_rule(world.get_location('Turtle Rock - Compass Chest', player), lambda state: state.has('Cane of Somaria', player)) # We could get here from the middle section without Cane as we don't cross the entrance gap! + set_rule(world.get_location('Turtle Rock - Roller Room - Left', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player)) + set_rule(world.get_location('Turtle Rock - Roller Room - Right', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player)) + set_rule(world.get_location('Turtle Rock - Big Chest', player), lambda state: state.has('Big Key (Turtle Rock)', player) and (state.has('Cane of Somaria', player) or state.has('Hookshot', player))) + set_rule(world.get_entrance('Turtle Rock (Big Chest) (North)', player), lambda state: state.has('Cane of Somaria', player) or state.has('Hookshot', player)) + set_rule(world.get_entrance('Turtle Rock Big Key Door', player), lambda state: state.has('Big Key (Turtle Rock)', player)) + set_rule(world.get_entrance('Turtle Rock (Dark Room) (North)', player), lambda state: state.has('Cane of Somaria', player)) + set_rule(world.get_entrance('Turtle Rock (Dark Room) (South)', player), lambda state: state.has('Cane of Somaria', player)) + set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) + set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) + set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) + set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) + set_rule(world.get_entrance('Turtle Rock (Trinexx)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 4) and state.has('Big Key (Turtle Rock)', player) and state.has('Cane of Somaria', player)) + set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize', player)) + + set_rule(world.get_entrance('Palace of Darkness Bonk Wall', player), lambda state: state.can_shoot_arrows(player)) + set_rule(world.get_entrance('Palace of Darkness Hammer Peg Drop', player), lambda state: state.has('Hammer', player)) + set_rule(world.get_entrance('Palace of Darkness Bridge Room', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 1)) # If we can reach any other small key door, we already have back door access to this area + set_rule(world.get_entrance('Palace of Darkness Big Key Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) and state.has('Big Key (Palace of Darkness)', player) and state.can_shoot_arrows(player) and state.has('Hammer', player)) + set_rule(world.get_entrance('Palace of Darkness (North)', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 4)) + set_rule(world.get_location('Palace of Darkness - Big Chest', player), lambda state: state.has('Big Key (Palace of Darkness)', player)) + + set_rule(world.get_entrance('Palace of Darkness Big Key Chest Staircase', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Big Key Chest', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 3))) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Palace of Darkness - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5)) + else: + forbid_item(world.get_location('Palace of Darkness - Big Key Chest', player), 'Small Key (Palace of Darkness)', player) + + set_rule(world.get_entrance('Palace of Darkness Spike Statue Room Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Harmless Hellway', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 4))) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Palace of Darkness - Harmless Hellway', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5)) + else: + forbid_item(world.get_location('Palace of Darkness - Harmless Hellway', player), 'Small Key (Palace of Darkness)', player) + + set_rule(world.get_entrance('Palace of Darkness Maze Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6)) + set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player)) + + # these key rules are conservative, you might be able to get away with more lenient rules + randomizer_room_chests = ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'] + compass_room_chests = ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'] + + set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player)) + set_rule(world.get_entrance('Ganons Tower (Tile Room)', player), lambda state: state.has('Cane of Somaria', player)) + set_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hammer', player)) + + set_rule(world.get_entrance('Ganons Tower (Map Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_name(state, 'Ganons Tower - Map Chest', player) in [('Big Key (Ganons Tower)', player), ('Small Key (Ganons Tower)', player)] and state.has_key('Small Key (Ganons Tower)', player, 3))) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Ganons Tower - Map Chest', player), lambda state, item: item.name == 'Small Key (Ganons Tower)' and item.player == player and state.has_key('Small Key (Ganons Tower)', player, 3)) + else: + forbid_item(world.get_location('Ganons Tower - Map Chest', player), 'Small Key (Ganons Tower)', player) + + # It is possible to need more than 2 keys to get through this entrance if you spend keys elsewhere. We reflect this in the chest requirements. + # However we need to leave these at the lower values to derive that with 3 keys it is always possible to reach Bob and Ice Armos. + set_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 2)) + # It is possible to need more than 3 keys .... + set_rule(world.get_entrance('Ganons Tower (Firesnake Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3)) + + #The actual requirements for these rooms to avoid key-lock + set_rule(world.get_location('Ganons Tower - Firesnake Room', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) or ((item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) or item_in_locations(state, 'Small Key (Ganons Tower)', player, [('Ganons Tower - Firesnake Room', player)])) and state.has_key('Small Key (Ganons Tower)', player, 2))) + for location in randomizer_room_chests: + set_rule(world.get_location(location, player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3))) + + # Once again it is possible to need more than 3 keys... + set_rule(world.get_entrance('Ganons Tower (Tile Room) Key Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) and state.has('Fire Rod', player)) + # Actual requirements + for location in compass_room_chests: + set_rule(world.get_location(location, player), lambda state: state.has('Fire Rod', player) and (state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(compass_room_chests, [player] * len(compass_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3)))) + + set_rule(world.get_location('Ganons Tower - Big Chest', player), lambda state: state.has('Big Key (Ganons Tower)', player)) + + set_rule(world.get_location('Ganons Tower - Big Key Room - Left', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Left', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) + set_rule(world.get_location('Ganons Tower - Big Key Chest', player), lambda state: world.get_location('Ganons Tower - Big Key Chest', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) + set_rule(world.get_location('Ganons Tower - Big Key Room - Right', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Right', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) + + set_rule(world.get_entrance('Ganons Tower Big Key Door', player), lambda state: state.has('Big Key (Ganons Tower)', player) and state.can_shoot_arrows(player)) + set_rule(world.get_entrance('Ganons Tower Torch Rooms', player), lambda state: state.has_fire_source(player) and world.get_entrance('Ganons Tower Torch Rooms', player).parent_region.dungeon.bosses['middle'].can_defeat(state)) + set_rule(world.get_location('Ganons Tower - Pre-Moldorm Chest', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3)) + set_rule(world.get_entrance('Ganons Tower Moldorm Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4)) + set_rule(world.get_entrance('Ganons Tower Moldorm Gap', player), lambda state: state.has('Hookshot', player) and world.get_entrance('Ganons Tower Moldorm Gap', player).parent_region.dungeon.bosses['top'].can_defeat(state)) + set_defeat_dungeon_boss_rule(world.get_location('Agahnim 2', player)) + for location in ['Ganons Tower - Big Chest', 'Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right', + 'Ganons Tower - Pre-Moldorm Chest', 'Ganons Tower - Validation Chest']: + forbid_item(world.get_location(location, player), 'Big Key (Ganons Tower)', player) + + set_rule(world.get_location('Ganon', player), lambda state: state.has_beam_sword(player) and state.has_fire_source(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player) + and (state.has('Tempered Sword', player) or state.has('Golden Sword', player) or (state.has('Silver Arrows', player) and state.can_shoot_arrows(player)) or state.has('Lamp', player) or state.can_extend_magic(player, 12))) # need to light torch a sufficient amount of times + set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has_beam_sword(player)) # need to damage ganon to get tiles to drop + + +def default_rules(world, player): + if world.mode[player] == 'standard': world.get_region('Hyrule Castle Secret Entrance', player).can_reach_private = lambda state: True old_rule = world.get_region('Links House', player).can_reach_private world.get_region('Links House', player).can_reach_private = lambda state: state.can_reach('Sanctuary', 'Region', player) or old_rule(state) @@ -122,10 +349,6 @@ def global_rules(world, player): world.get_region('Links House', player).can_reach_private = lambda state: True world.get_region('Sanctuary', player).can_reach_private = lambda state: True - # we can s&q to the old man house after we rescue him. This may be somewhere completely different if caves are shuffled! - old_rule = world.get_region('Old Man House', player).can_reach_private - world.get_region('Old Man House', player).can_reach_private = lambda state: state.can_reach('Old Man', 'Location', player) or old_rule(state) - # overworld requirements set_rule(world.get_entrance('Kings Grave', player), lambda state: state.has_Boots(player)) set_rule(world.get_entrance('Kings Grave Outer Rocks', player), lambda state: state.can_lift_heavy_rocks(player)) @@ -133,7 +356,6 @@ def global_rules(world, player): set_rule(world.get_entrance('Kings Grave Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player)) # Caution: If king's grave is releaxed at all to account for reaching it via a two way cave's exit in insanity mode, then the bomb shop logic will need to be updated (that would involve create a small ledge-like Region for it) set_rule(world.get_entrance('Bonk Fairy (Light)', player), lambda state: state.has_Boots(player)) - set_rule(world.get_location('Sunken Treasure', player), lambda state: state.can_reach('Dam', 'Region', player)) set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has('Beat Agahnim 1', player)) set_rule(world.get_entrance('Bonk Rock Cave', player), lambda state: state.has_Boots(player)) @@ -143,35 +365,22 @@ def global_rules(world, player): set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Death Mountain Entrance Rock', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Bumper Cave Entrance Mirror Spot', player), lambda state: state.has_Mirror(player)) - set_rule(world.get_entrance('Flute Spot 1', player), lambda state: state.has('Ocarina', player)) + set_rule(world.get_entrance('Flute Spot 1', player), lambda state: state.has('Flute', player)) set_rule(world.get_entrance('Lake Hylia Central Island Teleporter', player), lambda state: state.can_lift_heavy_rocks(player)) - set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.has('Ocarina', player) and state.can_lift_heavy_rocks(player)) + set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.has('Flute', player) and state.can_lift_heavy_rocks(player)) set_rule(world.get_entrance('East Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer set_rule(world.get_entrance('South Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer set_rule(world.get_entrance('Kakariko Teleporter', player), lambda state: ((state.has('Hammer', player) and state.can_lift_rocks(player)) or state.can_lift_heavy_rocks(player)) and state.has_Pearl(player)) # bunny cannot lift bushes set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player)) - set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player)) - set_rule(world.get_location('Purple Chest', player), lambda state: state.has('Pick Up Purple Chest', player)) # Can S&Q with chest set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Waterfall of Wishing', player), lambda state: state.has('Flippers', player)) # can be fake flippered into, but is in weird state inside that might prevent you from doing things. Can be improved in future Todo set_rule(world.get_location('Frog', player), lambda state: state.can_lift_heavy_rocks(player)) # will get automatic moon pearl requirement - set_rule(world.get_location('Missing Smith', player), lambda state: state.has('Get Frog', player)) # Can S&Q with smith - set_rule(world.get_location('Blacksmith', player), lambda state: state.has('Return Smith', player)) - set_rule(world.get_location('Magic Bat', player), lambda state: state.has('Magic Powder', player)) - set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player)) - set_rule(world.get_location('Library', player), lambda state: state.has_Boots(player)) set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player)) set_rule(world.get_entrance('Desert Palace Entrance (North) Rocks', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Desert Ledge Return Rocks', player), lambda state: state.can_lift_rocks(player)) # should we decide to place something that is not a dungeon end up there at some point set_rule(world.get_entrance('Checkerboard Cave', player), lambda state: state.can_lift_rocks(player)) - set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player)) - set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player)) set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has_beam_sword(player) or state.has('Beat Agahnim 1', player)) # barrier gets removed after killing agahnim, relevant for entrance shuffle - set_rule(world.get_entrance('Agahnim 1', player), lambda state: state.has_sword(player) and state.has_key('Small Key (Agahnims Tower)', player, 2)) - set_defeat_dungeon_boss_rule(world.get_location('Agahnim 1', player)) - set_rule(world.get_location('Castle Tower - Room 03', player), lambda state: state.can_kill_most_things(player, 8)) - set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.can_kill_most_things(player, 8) and state.has_key('Small Key (Agahnims Tower)', player)) set_rule(world.get_entrance('Top of Pyramid', player), lambda state: state.has('Beat Agahnim 1', player)) set_rule(world.get_entrance('Old Man Cave Exit (West)', player), lambda state: False) # drop cannot be climbed up set_rule(world.get_entrance('Broken Bridge (West)', player), lambda state: state.has('Hookshot', player)) @@ -181,7 +390,6 @@ def global_rules(world, player): set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: state.has('Mirror', player)) # can erase block set_rule(world.get_entrance('Death Mountain (Top)', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) - set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player)) set_rule(world.get_entrance('East Death Mountain (Top)', player), lambda state: state.has('Hammer', player)) set_rule(world.get_location('Catfish', player), lambda state: state.can_lift_rocks(player)) @@ -239,236 +447,20 @@ def global_rules(world, player): set_rule(world.get_entrance('Fairy Ascension Mirror Spot', player), lambda state: state.has_Mirror(player) and state.has_Pearl(player)) # need to lift flowers set_rule(world.get_entrance('Isolated Ledge Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Superbunny Cave Exit (Bottom)', player), lambda state: False) # Cannot get to bottom exit from top. Just exists for shuffling - - set_rule(world.get_location('Spike Cave', player), lambda state: - state.has('Hammer', player) and state.can_lift_rocks(player) and - ((state.has('Cape', player) and state.can_extend_magic(player, 16, True)) or - (state.has('Cane of Byrna', player) and - (state.can_extend_magic(player, 12, True) or - (state.world.can_take_damage and (state.has_Boots(player) or state.has_hearts(player, 4)))))) - ) - - set_rule(world.get_location('Hookshot Cave - Top Right', player), lambda state: state.has('Hookshot', player)) - set_rule(world.get_location('Hookshot Cave - Top Left', player), lambda state: state.has('Hookshot', player)) - set_rule(world.get_location('Hookshot Cave - Bottom Right', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player)) - set_rule(world.get_location('Hookshot Cave - Bottom Left', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('Floating Island Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_Pearl(player) and state.has_sword(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword required to cast magic (!) - set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player)) - - set_rule(world.get_entrance('Sewers Door', player), lambda state: state.has_key('Small Key (Escape)', player)) - set_rule(world.get_entrance('Sewers Back Door', player), lambda state: state.has_key('Small Key (Escape)', player)) - - set_rule(world.get_location('Eastern Palace - Big Chest', player), lambda state: state.has('Big Key (Eastern Palace)', player)) - set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) - set_rule(world.get_location('Eastern Palace - Prize', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state)) - for location in ['Eastern Palace - Boss', 'Eastern Palace - Big Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Eastern Palace)', player) - - set_rule(world.get_location('Desert Palace - Big Chest', player), lambda state: state.has('Big Key (Desert Palace)', player)) - set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player)) - set_rule(world.get_entrance('Desert Palace East Wing', player), lambda state: state.has_key('Small Key (Desert Palace)', player)) - set_rule(world.get_location('Desert Palace - Prize', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state)) - set_rule(world.get_location('Desert Palace - Boss', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) - for location in ['Desert Palace - Boss', 'Desert Palace - Big Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Desert Palace)', player) - - for location in ['Desert Palace - Boss', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']: - forbid_item(world.get_location(location, player), 'Small Key (Desert Palace)', player) - - set_rule(world.get_entrance('Tower of Hera Small Key Door', player), lambda state: state.has_key('Small Key (Tower of Hera)', player) or item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player)) - set_rule(world.get_entrance('Tower of Hera Big Key Door', player), lambda state: state.has('Big Key (Tower of Hera)', player)) - set_rule(world.get_location('Tower of Hera - Big Chest', player), lambda state: state.has('Big Key (Tower of Hera)', player)) - set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Tower of Hera - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Tower of Hera)' and item.player == player) - set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player)) - for location in ['Tower of Hera - Boss', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Tower of Hera)', player) -# for location in ['Tower of Hera - Big Key Chest']: -# forbid_item(world.get_location(location, player), 'Small Key (Tower of Hera)', player) - - set_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player)) - add_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player)) - - set_rule(world.get_entrance('Swamp Palace Small Key Door', player), lambda state: state.has_key('Small Key (Swamp Palace)', player)) - set_rule(world.get_entrance('Swamp Palace (Center)', player), lambda state: state.has('Hammer', player)) - set_rule(world.get_location('Swamp Palace - Big Chest', player), lambda state: state.has('Big Key (Swamp Palace)', player) or item_name(state, 'Swamp Palace - Big Chest', player) == ('Big Key (Swamp Palace)', player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Swamp Palace - Big Chest', player), lambda state, item: item.name == 'Big Key (Swamp Palace)' and item.player == player) - set_rule(world.get_entrance('Swamp Palace (North)', player), lambda state: state.has('Hookshot', player)) - set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize', player)) - for location in ['Swamp Palace - Entrance']: - forbid_item(world.get_location(location, player), 'Big Key (Swamp Palace)', player) - - set_rule(world.get_entrance('Thieves Town Big Key Door', player), lambda state: state.has('Big Key (Thieves Town)', player)) - set_rule(world.get_entrance('Blind Fight', player), lambda state: state.has_key('Small Key (Thieves Town)', player)) - set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Prize', player)) - set_rule(world.get_location('Thieves\' Town - Big Chest', player), lambda state: (state.has_key('Small Key (Thieves Town)', player) or item_name(state, 'Thieves\' Town - Big Chest', player) == ('Small Key (Thieves Town)', player)) and state.has('Hammer', player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Thieves\' Town - Big Chest', player), lambda state, item: item.name == 'Small Key (Thieves Town)' and item.player == player and state.has('Hammer', player)) - set_rule(world.get_location('Thieves\' Town - Attic', player), lambda state: state.has_key('Small Key (Thieves Town)', player)) - for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']: - forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player) - for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Boss']: - forbid_item(world.get_location(location, player), 'Small Key (Thieves Town)', player) - - set_rule(world.get_entrance('Skull Woods First Section South Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player)) - set_rule(world.get_entrance('Skull Woods First Section (Right) North Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player)) - set_rule(world.get_entrance('Skull Woods First Section West Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) # ideally would only be one key, but we may have spent thst key already on escaping the right section - set_rule(world.get_entrance('Skull Woods First Section (Left) Door to Exit', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) - set_rule(world.get_location('Skull Woods - Big Chest', player), lambda state: state.has('Big Key (Skull Woods)', player) or item_name(state, 'Skull Woods - Big Chest', player) == ('Big Key (Skull Woods)', player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Skull Woods - Big Chest', player), lambda state, item: item.name == 'Big Key (Skull Woods)' and item.player == player) - set_rule(world.get_entrance('Skull Woods Torch Room', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 3) and state.has('Fire Rod', player) and state.has_sword(player)) # sword required for curtain - set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player)) - for location in ['Skull Woods - Boss']: - forbid_item(world.get_location(location, player), 'Small Key (Skull Woods)', player) - - set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.can_melt_things(player)) - set_rule(world.get_location('Ice Palace - Big Chest', player), lambda state: state.has('Big Key (Ice Palace)', player)) - set_rule(world.get_entrance('Ice Palace (Kholdstare)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player) and state.has('Big Key (Ice Palace)', player) and (state.has_key('Small Key (Ice Palace)', player, 2) or (state.has('Cane of Somaria', player) and state.has_key('Small Key (Ice Palace)', player, 1)))) - # TODO: investigate change from VT. Changed to hookshot or 2 keys (no checking for big key in specific chests) - set_rule(world.get_entrance('Ice Palace (East)', player), lambda state: (state.has('Hookshot', player) or (item_in_locations(state, 'Big Key (Ice Palace)', player, [('Ice Palace - Spike Room', player), ('Ice Palace - Big Key Chest', player), ('Ice Palace - Map Chest', player)]) and state.has_key('Small Key (Ice Palace)', player))) and (state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))) - set_rule(world.get_entrance('Ice Palace (East Top)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player)) - set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize', player)) - for location in ['Ice Palace - Big Chest', 'Ice Palace - Boss']: - forbid_item(world.get_location(location, player), 'Big Key (Ice Palace)', player) - - set_rule(world.get_entrance('Misery Mire Entrance Gap', player), lambda state: (state.has_Boots(player) or state.has('Hookshot', player)) and (state.has_sword(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player))) # need to defeat wizzrobes, bombs don't work ... - set_rule(world.get_location('Misery Mire - Big Chest', player), lambda state: state.has('Big Key (Misery Mire)', player)) - set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) - set_rule(world.get_entrance('Misery Mire Big Key Door', player), lambda state: state.has('Big Key (Misery Mire)', player)) - # you can squander the free small key from the pot by opening the south door to the north west switch room, locking you out of accessing a color switch ... - # big key gives backdoor access to that from the teleporter in the north west - set_rule(world.get_location('Misery Mire - Map Chest', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 1) or state.has('Big Key (Misery Mire)', player)) - set_rule(world.get_location('Misery Mire - Main Lobby', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 1) or state.has_key('Big Key (Misery Mire)', player)) - # we can place a small key in the West wing iff it also contains/blocks the Big Key, as we cannot reach and softlock with the basement key door yet - set_rule(world.get_entrance('Misery Mire (West)', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 2) if ((item_name(state, 'Misery Mire - Compass Chest', player) in [('Big Key (Misery Mire)', player)]) or - (item_name(state, 'Misery Mire - Big Key Chest', player) in [('Big Key (Misery Mire)', player)])) else state.has_key('Small Key (Misery Mire)', player, 3)) - set_rule(world.get_location('Misery Mire - Compass Chest', player), lambda state: state.has_fire_source(player)) - set_rule(world.get_location('Misery Mire - Big Key Chest', player), lambda state: state.has_fire_source(player)) - set_rule(world.get_entrance('Misery Mire (Vitreous)', player), lambda state: state.has('Cane of Somaria', player)) - set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize', player)) - for location in ['Misery Mire - Big Chest', 'Misery Mire - Boss']: - forbid_item(world.get_location(location, player), 'Big Key (Misery Mire)', player) - - set_rule(world.get_entrance('Turtle Rock Entrance Gap', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('Turtle Rock Entrance Gap Reverse', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_location('Turtle Rock - Compass Chest', player), lambda state: state.has('Cane of Somaria', player)) # We could get here from the middle section without Cane as we don't cross the entrance gap! - set_rule(world.get_location('Turtle Rock - Roller Room - Left', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player)) - set_rule(world.get_location('Turtle Rock - Roller Room - Right', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player)) - set_rule(world.get_location('Turtle Rock - Big Chest', player), lambda state: state.has('Big Key (Turtle Rock)', player) and (state.has('Cane of Somaria', player) or state.has('Hookshot', player))) - set_rule(world.get_entrance('Turtle Rock (Big Chest) (North)', player), lambda state: state.has('Cane of Somaria', player) or state.has('Hookshot', player)) - set_rule(world.get_entrance('Turtle Rock Big Key Door', player), lambda state: state.has('Big Key (Turtle Rock)', player)) - set_rule(world.get_entrance('Turtle Rock (Dark Room) (North)', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('Turtle Rock (Dark Room) (South)', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_entrance('Turtle Rock (Trinexx)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 4) and state.has('Big Key (Turtle Rock)', player) and state.has('Cane of Somaria', player)) - set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize', player)) - - set_rule(world.get_entrance('Palace of Darkness Bonk Wall', player), lambda state: state.can_shoot_arrows(player)) - set_rule(world.get_entrance('Palace of Darkness Hammer Peg Drop', player), lambda state: state.has('Hammer', player)) - set_rule(world.get_entrance('Palace of Darkness Bridge Room', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 1)) # If we can reach any other small key door, we already have back door access to this area - set_rule(world.get_entrance('Palace of Darkness Big Key Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) and state.has('Big Key (Palace of Darkness)', player) and state.can_shoot_arrows(player) and state.has('Hammer', player)) - set_rule(world.get_entrance('Palace of Darkness (North)', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 4)) - set_rule(world.get_location('Palace of Darkness - Big Chest', player), lambda state: state.has('Big Key (Palace of Darkness)', player)) - - set_rule(world.get_entrance('Palace of Darkness Big Key Chest Staircase', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Big Key Chest', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 3))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Palace of Darkness - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5)) - else: - forbid_item(world.get_location('Palace of Darkness - Big Key Chest', player), 'Small Key (Palace of Darkness)', player) - - set_rule(world.get_entrance('Palace of Darkness Spike Statue Room Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Harmless Hellway', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 4))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Palace of Darkness - Harmless Hellway', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5)) - else: - forbid_item(world.get_location('Palace of Darkness - Harmless Hellway', player), 'Small Key (Palace of Darkness)', player) - - set_rule(world.get_entrance('Palace of Darkness Maze Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6)) - set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player)) - - # these key rules are conservative, you might be able to get away with more lenient rules - randomizer_room_chests = ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'] - compass_room_chests = ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'] - - set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player)) - set_rule(world.get_entrance('Ganons Tower (Tile Room)', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hammer', player)) - - set_rule(world.get_entrance('Ganons Tower (Map Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_name(state, 'Ganons Tower - Map Chest', player) in [('Big Key (Ganons Tower)', player), ('Small Key (Ganons Tower)', player)] and state.has_key('Small Key (Ganons Tower)', player, 3))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Ganons Tower - Map Chest', player), lambda state, item: item.name == 'Small Key (Ganons Tower)' and item.player == player and state.has_key('Small Key (Ganons Tower)', player, 3)) - else: - forbid_item(world.get_location('Ganons Tower - Map Chest', player), 'Small Key (Ganons Tower)', player) - - # It is possible to need more than 2 keys to get through this entrance if you spend keys elsewhere. We reflect this in the chest requirements. - # However we need to leave these at the lower values to derive that with 3 keys it is always possible to reach Bob and Ice Armos. - set_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 2)) - # It is possible to need more than 3 keys .... - set_rule(world.get_entrance('Ganons Tower (Firesnake Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3)) - - #The actual requirements for these rooms to avoid key-lock - set_rule(world.get_location('Ganons Tower - Firesnake Room', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) or ((item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) or item_in_locations(state, 'Small Key (Ganons Tower)', player, [('Ganons Tower - Firesnake Room', player)])) and state.has_key('Small Key (Ganons Tower)', player, 2))) - for location in randomizer_room_chests: - set_rule(world.get_location(location, player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3))) - - # Once again it is possible to need more than 3 keys... - set_rule(world.get_entrance('Ganons Tower (Tile Room) Key Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) and state.has('Fire Rod', player)) - # Actual requirements - for location in compass_room_chests: - set_rule(world.get_location(location, player), lambda state: state.has('Fire Rod', player) and (state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(compass_room_chests, [player] * len(compass_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3)))) - - set_rule(world.get_location('Ganons Tower - Big Chest', player), lambda state: state.has('Big Key (Ganons Tower)', player)) - - set_rule(world.get_location('Ganons Tower - Big Key Room - Left', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Left', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) - set_rule(world.get_location('Ganons Tower - Big Key Chest', player), lambda state: world.get_location('Ganons Tower - Big Key Chest', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) - set_rule(world.get_location('Ganons Tower - Big Key Room - Right', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Right', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) - - set_rule(world.get_entrance('Ganons Tower Big Key Door', player), lambda state: state.has('Big Key (Ganons Tower)', player) and state.can_shoot_arrows(player)) - set_rule(world.get_entrance('Ganons Tower Torch Rooms', player), lambda state: state.has_fire_source(player) and world.get_entrance('Ganons Tower Torch Rooms', player).parent_region.dungeon.bosses['middle'].can_defeat(state)) - set_rule(world.get_location('Ganons Tower - Pre-Moldorm Chest', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3)) - set_rule(world.get_entrance('Ganons Tower Moldorm Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4)) - set_rule(world.get_entrance('Ganons Tower Moldorm Gap', player), lambda state: state.has('Hookshot', player) and world.get_entrance('Ganons Tower Moldorm Gap', player).parent_region.dungeon.bosses['top'].can_defeat(state)) - set_defeat_dungeon_boss_rule(world.get_location('Agahnim 2', player)) - set_rule(world.get_entrance('Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player)) - for location in ['Ganons Tower - Big Chest', 'Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right', - 'Ganons Tower - Pre-Moldorm Chest', 'Ganons Tower - Validation Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Ganons Tower)', player) - - set_rule(world.get_location('Ganon', player), lambda state: state.has_beam_sword(player) and state.has_fire_source(player) and state.has_crystals(world.crystals_needed_for_ganon, player) - and (state.has('Tempered Sword', player) or state.has('Golden Sword', player) or (state.has('Silver Arrows', player) and state.can_shoot_arrows(player)) or state.has('Lamp', player) or state.can_extend_magic(player, 12))) # need to light torch a sufficient amount of times - set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has_beam_sword(player)) # need to damage ganon to get tiles to drop + set_rule(world.get_entrance('Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player]) set_rule(world.get_entrance('Ganons Tower', player), lambda state: False) # This is a safety for the TR function below to not require GT entrance in its key logic. - if world.swords == 'swordless': + if world.swords[player] == 'swordless': swordless_rules(world, player) set_trock_key_rules(world, player) - set_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt, player)) + set_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player)) def inverted_rules(world, player): - if world.goal == 'triforcehunt': - for location in world.get_locations(): - if location.player != player: - forbid_item(location, 'Triforce Piece', player) - - add_item_rule(world.get_location('Ganon', player), lambda item: item.name == 'Triforce' and item.player == player) - # s&q regions. link's house entrance is set to true so the filler knows the chest inside can always be reached world.get_region('Inverted Links House', player).can_reach_private = lambda state: True world.get_region('Inverted Links House', player).entrances[0].can_reach = lambda state: True @@ -499,7 +491,6 @@ def inverted_rules(world, player): set_rule(world.get_entrance('Secret Passage Outer Bushes', player), lambda state: state.has_Pearl(player)) # Caution: If king's grave is releaxed at all to account for reaching it via a two way cave's exit in insanity mode, then the bomb shop logic will need to be updated (that would involve create a small ledge-like Region for it) set_rule(world.get_entrance('Bonk Fairy (Light)', player), lambda state: state.has_Boots(player) and state.has_Pearl(player)) - add_rule(world.get_location('Sunken Treasure', player), lambda state: state.can_reach('Light World', 'Region', player) and state.has('Open Floodgate', player)) set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has_Pearl(player) and state.has('Beat Agahnim 1', player)) set_rule(world.get_entrance('Bonk Rock Cave', player), lambda state: state.has_Boots(player) and state.has_Pearl(player)) @@ -516,16 +507,10 @@ def inverted_rules(world, player): set_rule(world.get_entrance('South Dark World Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer set_rule(world.get_entrance('West Dark World Teleporter', player), lambda state: ((state.has('Hammer', player) and state.can_lift_rocks(player)) or state.can_lift_heavy_rocks(player)) and state.has_Pearl(player)) set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player) and state.has_Pearl(player)) - set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player)) - set_rule(world.get_location('Purple Chest', player), lambda state: state.has('Pick Up Purple Chest', player)) # Can S&Q with chest set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player)) set_rule(world.get_entrance('Waterfall of Wishing', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player)) # can be fake flippered into, but is in weird state inside that might prevent you from doing things. Can be improved in future Todo set_rule(world.get_location('Frog', player), lambda state: state.can_lift_heavy_rocks(player) or (state.can_reach('Light World', 'Region', player) and state.has_Mirror(player))) - set_rule(world.get_location('Missing Smith', player), lambda state: state.has('Get Frog', player) and state.can_reach('Blacksmiths Hut', 'Region', player)) # Can't S&Q with smith - set_rule(world.get_location('Blacksmith', player), lambda state: state.has('Return Smith', player)) - set_rule(world.get_location('Magic Bat', player), lambda state: state.has('Magic Powder', player) and state.has_Pearl(player)) - set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player)) set_rule(world.get_location('Mushroom', player), lambda state: state.has_Pearl(player)) # need pearl to pick up bushes set_rule(world.get_entrance('Bush Covered Lawn Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Bush Covered Lawn Inner Bushes', player), lambda state: state.has_Pearl(player)) @@ -534,16 +519,10 @@ def inverted_rules(world, player): set_rule(world.get_entrance('Bomb Hut Outer Bushes', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('North Fairy Cave Drop', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Lost Woods Hideout Drop', player), lambda state: state.has_Pearl(player)) - set_rule(world.get_location('Library', player), lambda state: state.has_Boots(player)) set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player) and (state.can_reach('Potion Shop Area', 'Region', player))) # new inverted region, need pearl for bushes or access to potion shop door/waterfall fairy set_rule(world.get_entrance('Desert Palace Entrance (North) Rocks', player), lambda state: state.can_lift_rocks(player) and state.has_Pearl(player)) set_rule(world.get_entrance('Desert Ledge Return Rocks', player), lambda state: state.can_lift_rocks(player) and state.has_Pearl(player)) # should we decide to place something that is not a dungeon end up there at some point set_rule(world.get_entrance('Checkerboard Cave', player), lambda state: state.can_lift_rocks(player) and state.has_Pearl(player)) - set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player)) - set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player)) - set_rule(world.get_entrance('Agahnim 1', player), lambda state: state.has_sword(player) and state.has_key('Small Key (Agahnims Tower)', player, 2)) - set_defeat_dungeon_boss_rule(world.get_location('Agahnim 1', player)) - set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.has_key('Small Key (Agahnims Tower)', player)) set_rule(world.get_entrance('Hyrule Castle Secret Entrance Drop', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Old Man Cave Exit (West)', player), lambda state: False) # drop cannot be climbed up set_rule(world.get_entrance('Broken Bridge (West)', player), lambda state: state.has('Hookshot', player) and state.has_Pearl(player)) @@ -553,7 +532,6 @@ def inverted_rules(world, player): set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: state.has('Mirror', player)) # can erase block set_rule(world.get_entrance('Death Mountain (Top)', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) set_rule(world.get_entrance('Dark Death Mountain Teleporter (East)', player), lambda state: state.can_lift_heavy_rocks(player) and state.has('Hammer', player) and state.has_Pearl(player)) # bunny cannot use hammer - set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player)) set_rule(world.get_entrance('East Death Mountain (Top)', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) # bunny can not use hammer set_rule(world.get_location('Catfish', player), lambda state: state.can_lift_rocks(player) or (state.has('Flippers', player) and state.has_Mirror(player) and state.has_Pearl(player) and state.can_reach('Light World', 'Region', player))) @@ -596,22 +574,8 @@ def inverted_rules(world, player): set_rule(world.get_entrance('Dark Death Mountain Ledge Mirror Spot (West)', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Laser Bridge Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Superbunny Cave Exit (Bottom)', player), lambda state: False) # Cannot get to bottom exit from top. Just exists for shuffling - - set_rule(world.get_location('Spike Cave', player), lambda state: - state.has('Hammer', player) and state.can_lift_rocks(player) and - ((state.has('Cape', player) and state.can_extend_magic(player, 16, True)) or - (state.has('Cane of Byrna', player) and - (state.can_extend_magic(player, 12, True) or - (state.world.can_take_damage and (state.has_Boots(player) or state.has_hearts(player, 4)))))) - ) - - set_rule(world.get_location('Hookshot Cave - Top Right', player), lambda state: state.has('Hookshot', player)) - set_rule(world.get_location('Hookshot Cave - Top Left', player), lambda state: state.has('Hookshot', player)) - set_rule(world.get_location('Hookshot Cave - Bottom Right', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player)) - set_rule(world.get_location('Hookshot Cave - Bottom Left', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('Floating Island Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword required to cast magic (!) - set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player)) # new inverted spots set_rule(world.get_entrance('Post Aga Teleporter', player), lambda state: state.has('Beat Agahnim 1', player)) @@ -644,215 +608,18 @@ def inverted_rules(world, player): set_rule(world.get_entrance('Dark Grassy Lawn Flute', player), lambda state: state.can_flute(player)) set_rule(world.get_entrance('Hammer Peg Area Flute', player), lambda state: state.can_flute(player)) - set_rule(world.get_entrance('Sewers Door', player), lambda state: state.has_key('Small Key (Escape)', player)) - set_rule(world.get_entrance('Sewers Back Door', player), lambda state: state.has_key('Small Key (Escape)', player)) - - set_rule(world.get_location('Eastern Palace - Big Chest', player), lambda state: state.has('Big Key (Eastern Palace)', player)) - set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) - set_rule(world.get_location('Eastern Palace - Prize', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state)) - for location in ['Eastern Palace - Boss', 'Eastern Palace - Big Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Eastern Palace)', player) - - set_rule(world.get_location('Desert Palace - Big Chest', player), lambda state: state.has('Big Key (Desert Palace)', player)) - set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player)) - set_rule(world.get_entrance('Desert Palace East Wing', player), lambda state: state.has_key('Small Key (Desert Palace)', player)) - set_rule(world.get_location('Desert Palace - Prize', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state)) - set_rule(world.get_location('Desert Palace - Boss', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) - for location in ['Desert Palace - Boss', 'Desert Palace - Big Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Desert Palace)', player) - - for location in ['Desert Palace - Boss', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']: - forbid_item(world.get_location(location, player), 'Small Key (Desert Palace)', player) - - set_rule(world.get_entrance('Tower of Hera Small Key Door', player), lambda state: state.has_key('Small Key (Tower of Hera)', player) or item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player)) - set_rule(world.get_entrance('Tower of Hera Big Key Door', player), lambda state: state.has('Big Key (Tower of Hera)', player)) - set_rule(world.get_location('Tower of Hera - Big Chest', player), lambda state: state.has('Big Key (Tower of Hera)', player)) - set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Tower of Hera - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Tower of Hera)' and item.player == player) - set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player)) - for location in ['Tower of Hera - Boss', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Tower of Hera)', player) -# for location in ['Tower of Hera - Big Key Chest']: -# forbid_item(world.get_location(location, player), 'Small Key (Tower of Hera)', player) - - set_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player)) - add_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player)) - - set_rule(world.get_entrance('Swamp Palace Small Key Door', player), lambda state: state.has_key('Small Key (Swamp Palace)', player)) - set_rule(world.get_entrance('Swamp Palace (Center)', player), lambda state: state.has('Hammer', player)) - set_rule(world.get_location('Swamp Palace - Big Chest', player), lambda state: state.has('Big Key (Swamp Palace)', player) or item_name(state, 'Swamp Palace - Big Chest', player) == ('Big Key (Swamp Palace)', player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Swamp Palace - Big Chest', player), lambda state, item: item.name == 'Big Key (Swamp Palace)' and item.player == player) - set_rule(world.get_entrance('Swamp Palace (North)', player), lambda state: state.has('Hookshot', player)) - set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize', player)) - for location in ['Swamp Palace - Entrance']: - forbid_item(world.get_location(location, player), 'Big Key (Swamp Palace)', player) - - set_rule(world.get_entrance('Thieves Town Big Key Door', player), lambda state: state.has('Big Key (Thieves Town)', player)) - set_rule(world.get_entrance('Blind Fight', player), lambda state: state.has_key('Small Key (Thieves Town)', player)) - set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Prize', player)) - set_rule(world.get_location('Thieves\' Town - Big Chest', player), lambda state: (state.has_key('Small Key (Thieves Town)', player) or item_name(state, 'Thieves\' Town - Big Chest', player) == ('Small Key (Thieves Town)', player)) and state.has('Hammer', player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Thieves\' Town - Big Chest', player), lambda state, item: item.name == 'Small Key (Thieves Town)' and item.player == player and state.has('Hammer', player)) - set_rule(world.get_location('Thieves\' Town - Attic', player), lambda state: state.has_key('Small Key (Thieves Town)', player)) - for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']: - forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player) - for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Boss']: - forbid_item(world.get_location(location, player), 'Small Key (Thieves Town)', player) - - set_rule(world.get_entrance('Skull Woods First Section South Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player)) - set_rule(world.get_entrance('Skull Woods First Section (Right) North Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player)) - set_rule(world.get_entrance('Skull Woods First Section West Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) # ideally would only be one key, but we may have spent thst key already on escaping the right section - set_rule(world.get_entrance('Skull Woods First Section (Left) Door to Exit', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) - set_rule(world.get_location('Skull Woods - Big Chest', player), lambda state: state.has('Big Key (Skull Woods)', player) or item_name(state, 'Skull Woods - Big Chest', player) == ('Big Key (Skull Woods)', player)) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Skull Woods - Big Chest', player), lambda state, item: item.name == 'Big Key (Skull Woods)' and item.player == player) - - set_rule(world.get_entrance('Skull Woods Torch Room', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 3) and state.has('Fire Rod', player) and state.has_sword(player)) # sword required for curtain - set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player)) - for location in ['Skull Woods - Boss']: - forbid_item(world.get_location(location, player), 'Small Key (Skull Woods)', player) - - set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.can_melt_things(player)) - set_rule(world.get_location('Ice Palace - Big Chest', player), lambda state: state.has('Big Key (Ice Palace)', player)) - set_rule(world.get_entrance('Ice Palace (Kholdstare)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player) and state.has('Big Key (Ice Palace)', player) and (state.has_key('Small Key (Ice Palace)', player, 2) or (state.has('Cane of Somaria', player) and state.has_key('Small Key (Ice Palace)', player, 1)))) - # TODO: investigate change from VT. Changed to hookshot or 2 keys (no checking for big key in specific chests) - set_rule(world.get_entrance('Ice Palace (East)', player), lambda state: (state.has('Hookshot', player) or (item_in_locations(state, 'Big Key (Ice Palace)', player, [('Ice Palace - Spike Room', player), ('Ice Palace - Big Key Chest', player), ('Ice Palace - Map Chest', player)]) and state.has_key('Small Key (Ice Palace)', player))) and (state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))) - set_rule(world.get_entrance('Ice Palace (East Top)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player)) - set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize', player)) - for location in ['Ice Palace - Big Chest', 'Ice Palace - Boss']: - forbid_item(world.get_location(location, player), 'Big Key (Ice Palace)', player) - - set_rule(world.get_entrance('Misery Mire Entrance Gap', player), lambda state: (state.has_Boots(player) or state.has('Hookshot', player)) and (state.has_sword(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player))) # need to defeat wizzrobes, bombs don't work ... - set_rule(world.get_location('Misery Mire - Big Chest', player), lambda state: state.has('Big Key (Misery Mire)', player)) - set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) - set_rule(world.get_entrance('Misery Mire Big Key Door', player), lambda state: state.has('Big Key (Misery Mire)', player)) - # you can squander the free small key from the pot by opening the south door to the north west switch room, locking you out of accessing a color switch ... - # big key gives backdoor access to that from the teleporter in the north west - set_rule(world.get_location('Misery Mire - Map Chest', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 1) or state.has('Big Key (Misery Mire)', player)) - # in addition, you can open the door to the map room before getting access to a color switch, so this is locked behing 2 small keys or the big key... - set_rule(world.get_location('Misery Mire - Main Lobby', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 2) or state.has_key('Big Key (Misery Mire)', player)) - # we can place a small key in the West wing iff it also contains/blocks the Big Key, as we cannot reach and softlock with the basement key door yet - set_rule(world.get_entrance('Misery Mire (West)', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 2) if ((item_name(state, 'Misery Mire - Compass Chest', player) in [('Big Key (Misery Mire)', player)]) or - (item_name(state, 'Misery Mire - Big Key Chest', player) in [('Big Key (Misery Mire)', player)])) else state.has_key('Small Key (Misery Mire)', player, 3)) - set_rule(world.get_location('Misery Mire - Compass Chest', player), lambda state: state.has_fire_source(player)) - set_rule(world.get_location('Misery Mire - Big Key Chest', player), lambda state: state.has_fire_source(player)) - set_rule(world.get_entrance('Misery Mire (Vitreous)', player), lambda state: state.has('Cane of Somaria', player)) - set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize', player)) - for location in ['Misery Mire - Big Chest', 'Misery Mire - Boss']: - forbid_item(world.get_location(location, player), 'Big Key (Misery Mire)', player) - - set_rule(world.get_entrance('Turtle Rock Entrance Gap', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('Turtle Rock Entrance Gap Reverse', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_location('Turtle Rock - Compass Chest', player), lambda state: state.has('Cane of Somaria', player)) # We could get here from the middle section without Cane as we don't cross the entrance gap! - set_rule(world.get_location('Turtle Rock - Roller Room - Left', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player)) - set_rule(world.get_location('Turtle Rock - Roller Room - Right', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player)) - set_rule(world.get_location('Turtle Rock - Big Chest', player), lambda state: state.has('Big Key (Turtle Rock)', player) and (state.has('Cane of Somaria', player) or state.has('Hookshot', player))) - set_rule(world.get_entrance('Turtle Rock (Big Chest) (North)', player), lambda state: state.has('Cane of Somaria', player) or state.has('Hookshot', player)) - set_rule(world.get_entrance('Turtle Rock Big Key Door', player), lambda state: state.has('Big Key (Turtle Rock)', player)) - set_rule(world.get_entrance('Turtle Rock (Dark Room) (North)', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('Turtle Rock (Dark Room) (South)', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player)) - set_rule(world.get_entrance('Turtle Rock (Trinexx)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 4) and state.has('Big Key (Turtle Rock)', player) and state.has('Cane of Somaria', player)) - set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize', player)) - - set_rule(world.get_entrance('Palace of Darkness Bonk Wall', player), lambda state: state.can_shoot_arrows(player)) - set_rule(world.get_entrance('Palace of Darkness Hammer Peg Drop', player), lambda state: state.has('Hammer', player)) - set_rule(world.get_entrance('Palace of Darkness Bridge Room', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 1)) # If we can reach any other small key door, we already have back door access to this area - set_rule(world.get_entrance('Palace of Darkness Big Key Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) and state.has('Big Key (Palace of Darkness)', player) and state.can_shoot_arrows(player) and state.has('Hammer', player)) - set_rule(world.get_entrance('Palace of Darkness (North)', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 4)) - set_rule(world.get_location('Palace of Darkness - Big Chest', player), lambda state: state.has('Big Key (Palace of Darkness)', player)) - - set_rule(world.get_entrance('Palace of Darkness Big Key Chest Staircase', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Big Key Chest', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 3))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Palace of Darkness - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5)) - else: - forbid_item(world.get_location('Palace of Darkness - Big Key Chest', player), 'Small Key (Palace of Darkness)', player) - - set_rule(world.get_entrance('Palace of Darkness Spike Statue Room Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Harmless Hellway', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 4))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Palace of Darkness - Harmless Hellway', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5)) - else: - forbid_item(world.get_location('Palace of Darkness - Harmless Hellway', player), 'Small Key (Palace of Darkness)', player) - - set_rule(world.get_entrance('Palace of Darkness Maze Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6)) - set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player)) - - # these key rules are conservative, you might be able to get away with more lenient rules - randomizer_room_chests = ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'] - compass_room_chests = ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'] - - set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player)) - set_rule(world.get_entrance('Ganons Tower (Tile Room)', player), lambda state: state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hammer', player)) - - set_rule(world.get_entrance('Ganons Tower (Map Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_name(state, 'Ganons Tower - Map Chest', player) in [('Big Key (Ganons Tower)', player), ('Small Key (Ganons Tower)', player)] and state.has_key('Small Key (Ganons Tower)', player, 3))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Ganons Tower - Map Chest', player), lambda state, item: item.name == 'Small Key (Ganons Tower)' and item.player == player and state.has_key('Small Key (Ganons Tower)', player, 3)) - else: - forbid_item(world.get_location('Ganons Tower - Map Chest', player), 'Small Key (Ganons Tower)', player) - - # It is possible to need more than 2 keys to get through this entance if you spend keys elsewhere. We reflect this in the chest requirements. - # However we need to leave these at the lower values to derive that with 3 keys it is always possible to reach Bob and Ice Armos. - set_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 2)) - # It is possible to need more than 3 keys .... - set_rule(world.get_entrance('Ganons Tower (Firesnake Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3)) - - #The actual requirements for these rooms to avoid key-lock - set_rule(world.get_location('Ganons Tower - Firesnake Room', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 2))) - for location in randomizer_room_chests: - set_rule(world.get_location(location, player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3))) - - # Once again it is possible to need more than 3 keys... - set_rule(world.get_entrance('Ganons Tower (Tile Room) Key Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) and state.has('Fire Rod', player)) - # Actual requirements - for location in compass_room_chests: - set_rule(world.get_location(location, player), lambda state: state.has('Fire Rod', player) and (state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(compass_room_chests, [player] * len(compass_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3)))) - - set_rule(world.get_location('Ganons Tower - Big Chest', player), lambda state: state.has('Big Key (Ganons Tower)', player)) - - set_rule(world.get_location('Ganons Tower - Big Key Room - Left', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Left', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) - set_rule(world.get_location('Ganons Tower - Big Key Chest', player), lambda state: world.get_location('Ganons Tower - Big Key Chest', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) - set_rule(world.get_location('Ganons Tower - Big Key Room - Right', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Right', player).parent_region.dungeon.bosses['bottom'].can_defeat(state)) - - set_rule(world.get_entrance('Ganons Tower Big Key Door', player), lambda state: state.has('Big Key (Ganons Tower)', player) and state.can_shoot_arrows(player)) - set_rule(world.get_entrance('Ganons Tower Torch Rooms', player), lambda state: state.has_fire_source(player) and world.get_entrance('Ganons Tower Torch Rooms', player).parent_region.dungeon.bosses['middle'].can_defeat(state)) - set_rule(world.get_location('Ganons Tower - Pre-Moldorm Chest', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3)) - set_rule(world.get_entrance('Ganons Tower Moldorm Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4)) - set_rule(world.get_entrance('Ganons Tower Moldorm Gap', player), lambda state: state.has('Hookshot', player) and world.get_entrance('Ganons Tower Moldorm Gap', player).parent_region.dungeon.bosses['top'].can_defeat(state)) - set_defeat_dungeon_boss_rule(world.get_location('Agahnim 2', player)) - set_rule(world.get_entrance('Inverted Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player)) - for location in ['Ganons Tower - Big Chest', 'Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right', - 'Ganons Tower - Pre-Moldorm Chest', 'Ganons Tower - Validation Chest']: - forbid_item(world.get_location(location, player), 'Big Key (Ganons Tower)', player) - - set_rule(world.get_location('Ganon', player), lambda state: state.has_beam_sword(player) and state.has_fire_source(player) and state.has_crystals(world.crystals_needed_for_ganon, player) - and (state.has('Tempered Sword', player) or state.has('Golden Sword', player) or (state.has('Silver Arrows', player) and state.can_shoot_arrows(player)) or state.has('Lamp', player) or state.can_extend_magic(player, 12))) # need to light torch a sufficient amount of times - set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has_beam_sword(player)) # need to damage ganon to get tiles to drop - + set_rule(world.get_entrance('Inverted Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player]) set_rule(world.get_entrance('Inverted Ganons Tower', player), lambda state: False) # This is a safety for the TR function below to not require GT entrance in its key logic. - if world.swords == 'swordless': + if world.swords[player] == 'swordless': swordless_rules(world, player) set_trock_key_rules(world, player) - set_rule(world.get_entrance('Inverted Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt, player)) + set_rule(world.get_entrance('Inverted Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player)) def no_glitches_rules(world, player): - if world.mode != 'inverted': + if world.mode[player] != 'inverted': set_rule(world.get_entrance('Zoras River', player), lambda state: state.has('Flippers', player) or state.can_lift_rocks(player)) set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has('Flippers', player)) # can be fake flippered to set_rule(world.get_entrance('Hobo Bridge', player), lambda state: state.has('Flippers', player)) @@ -869,6 +636,7 @@ def no_glitches_rules(world, player): set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('East Dark World Pier', player), lambda state: state.has('Flippers', player)) add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player)) add_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has('Hookshot', player)) @@ -905,7 +673,7 @@ def no_glitches_rules(world, player): add_conditional_lamp('Palace of Darkness Maze Door', 'Palace of Darkness (Entrance)', 'Entrance') add_conditional_lamp('Palace of Darkness - Dark Basement - Left', 'Palace of Darkness (Entrance)', 'Location') add_conditional_lamp('Palace of Darkness - Dark Basement - Right', 'Palace of Darkness (Entrance)', 'Location') - if world.mode != 'inverted': + if world.mode[player] != 'inverted': add_conditional_lamp('Agahnim 1', 'Agahnims Tower', 'Entrance') add_conditional_lamp('Castle Tower - Dark Maze', 'Agahnims Tower', 'Location') else: @@ -921,7 +689,7 @@ def no_glitches_rules(world, player): add_conditional_lamp('Eastern Palace - Boss', 'Eastern Palace', 'Location') add_conditional_lamp('Eastern Palace - Prize', 'Eastern Palace', 'Location') - if not world.sewer_light_cone: + if not world.sewer_light_cone[player]: add_lamp_requirement(world.get_location('Sewers - Dark Cross', player), player) add_lamp_requirement(world.get_entrance('Sewers Back Door', player), player) add_lamp_requirement(world.get_entrance('Throne Room', player), player) @@ -929,9 +697,6 @@ def no_glitches_rules(world, player): def open_rules(world, player): # softlock protection as you can reach the sewers small key door with a guard drop key - forbid_item(world.get_location('Hyrule Castle - Boomerang Chest', player), 'Small Key (Escape)', player) - forbid_item(world.get_location('Hyrule Castle - Zelda\'s Chest', player), 'Small Key (Escape)', player) - set_rule(world.get_location('Hyrule Castle - Boomerang Chest', player), lambda state: state.has_key('Small Key (Escape)', player)) set_rule(world.get_location('Hyrule Castle - Zelda\'s Chest', player), lambda state: state.has_key('Small Key (Escape)', player)) @@ -942,10 +707,10 @@ def swordless_rules(world, player): set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has('Hammer', player)) set_rule(world.get_entrance('Skull Woods Torch Room', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 3) and state.has('Fire Rod', player)) # no curtain set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.has('Fire Rod', player) or state.has('Bombos', player)) #in swordless mode bombos pads are present in the relevant parts of ice palace - set_rule(world.get_location('Ganon', player), lambda state: state.has('Hammer', player) and state.has_fire_source(player) and state.has('Silver Arrows', player) and state.can_shoot_arrows(player) and state.has_crystals(world.crystals_needed_for_ganon, player)) + set_rule(world.get_location('Ganon', player), lambda state: state.has('Hammer', player) and state.has_fire_source(player) and state.has('Silver Arrows', player) and state.can_shoot_arrows(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player)) set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has('Hammer', player)) # need to damage ganon to get tiles to drop - if world.mode != 'inverted': + if world.mode[player] != 'inverted': set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has('Hammer', player) or state.has('Beat Agahnim 1', player)) # barrier gets removed after killing agahnim, relevant for entrance shuffle set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_Pearl(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword not required to use medallion for opening in swordless (!) set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_Pearl(player) and state.has_misery_mire_medallion(player)) # sword not required to use medallion for opening in swordless (!) @@ -956,32 +721,11 @@ def swordless_rules(world, player): set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_misery_mire_medallion(player)) # sword not required to use medallion for opening in swordless (!) set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has('Hammer', player)) -def standard_rules(world, player): - add_rule(world.get_entrance('Sewers Door', player), lambda state: state.can_kill_most_things(player)) +def standard_rules(world, player): set_rule(world.get_entrance('Hyrule Castle Exit (East)', player), lambda state: state.can_reach('Sanctuary', 'Region', player)) set_rule(world.get_entrance('Hyrule Castle Exit (West)', player), lambda state: state.can_reach('Sanctuary', 'Region', player)) - # ensures the required weapon for escape lands on uncle (unless player has it pre-equipped) - add_rule(world.get_location('Secret Passage', player), lambda state: state.can_kill_most_things(player)) - add_rule(world.get_location('Hyrule Castle - Map Chest', player), lambda state: state.can_kill_most_things(player)) - - def uncle_item_rule(item): - copy_state = CollectionState(world) - copy_state.collect(item) - copy_state.sweep_for_events() - return copy_state.can_reach('Sanctuary', 'Region', player) - - add_item_rule(world.get_location('Link\'s Uncle', player), uncle_item_rule) - - # easiest way to enforce key placement not relevant for open - set_rule(world.get_location('Sewers - Dark Cross', player), lambda state: state.can_kill_most_things(player)) - - set_rule(world.get_location('Hyrule Castle - Boomerang Chest', player), lambda state: state.can_kill_most_things(player)) - set_rule(world.get_location('Hyrule Castle - Zelda\'s Chest', player), lambda state: state.can_kill_most_things(player)) - - - def set_trock_key_rules(world, player): @@ -993,14 +737,14 @@ def set_trock_key_rules(world, player): all_state = world.get_all_state(True) # Check if each of the four main regions of the dungoen can be reached. The previous code section prevents key-costing moves within the dungeon. - can_reach_back = all_state.can_reach(world.get_region('Turtle Rock (Eye Bridge)', player)) if world.can_access_trock_eyebridge is None else world.can_access_trock_eyebridge - world.can_access_trock_eyebridge = can_reach_back - can_reach_front = all_state.can_reach(world.get_region('Turtle Rock (Entrance)', player)) if world.can_access_trock_front is None else world.can_access_trock_front - world.can_access_trock_front = can_reach_front - can_reach_big_chest = all_state.can_reach(world.get_region('Turtle Rock (Big Chest)', player)) if world.can_access_trock_big_chest is None else world.can_access_trock_big_chest - world.can_access_trock_big_chest = can_reach_big_chest - can_reach_middle = all_state.can_reach(world.get_region('Turtle Rock (Second Section)', player)) if world.can_access_trock_middle is None else world.can_access_trock_middle - world.can_access_trock_middle = can_reach_middle + can_reach_back = all_state.can_reach(world.get_region('Turtle Rock (Eye Bridge)', player)) if world.can_access_trock_eyebridge[player] is None else world.can_access_trock_eyebridge[player] + world.can_access_trock_eyebridge[player] = can_reach_back + can_reach_front = all_state.can_reach(world.get_region('Turtle Rock (Entrance)', player)) if world.can_access_trock_front[player] is None else world.can_access_trock_front[player] + world.can_access_trock_front[player] = can_reach_front + can_reach_big_chest = all_state.can_reach(world.get_region('Turtle Rock (Big Chest)', player)) if world.can_access_trock_big_chest[player] is None else world.can_access_trock_big_chest[player] + world.can_access_trock_big_chest[player] = can_reach_big_chest + can_reach_middle = all_state.can_reach(world.get_region('Turtle Rock (Second Section)', player)) if world.can_access_trock_middle[player] is None else world.can_access_trock_middle[player] + world.can_access_trock_middle[player] = can_reach_middle # No matter what, the key requirement for going from the middle to the bottom should be three keys. set_rule(world.get_entrance('Turtle Rock Dark Room Staircase', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 3)) @@ -1027,14 +771,16 @@ def set_trock_key_rules(world, player): # might open all the locked doors in any order so we need maximally restrictive rules. if can_reach_back: set_rule(world.get_location('Turtle Rock - Big Key Chest', player), lambda state: (state.has_key('Small Key (Turtle Rock)', player, 4) or item_name(state, 'Turtle Rock - Big Key Chest', player) == ('Small Key (Turtle Rock)', player))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player + and state.can_reach(world.get_region('Turtle Rock (Eye Bridge)', player))) else: forbid_item(world.get_location('Turtle Rock - Big Key Chest', player), 'Small Key (Turtle Rock)', player) elif can_reach_front and can_reach_middle: set_rule(world.get_location('Turtle Rock - Big Key Chest', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, tr_big_key_chest_keys_needed(state))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player + and state.can_reach(world.get_region('Turtle Rock (Entrance)', player)) and state.can_reach(world.get_region('Turtle Rock (Second Section)', player))) else: forbid_item(world.get_location('Turtle Rock - Big Key Chest', player), 'Small Key (Turtle Rock)', player) non_big_key_locations += ['Turtle Rock - Crystaroller Room', 'Turtle Rock - Eye Bridge - Bottom Left', @@ -1044,8 +790,9 @@ def set_trock_key_rules(world, player): set_rule(world.get_entrance('Turtle Rock (Chain Chomp Room) (North)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 2)) set_rule(world.get_entrance('Turtle Rock Pokey Room', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 1)) set_rule(world.get_location('Turtle Rock - Big Key Chest', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, tr_big_key_chest_keys_needed(state))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player and state.has_key('Small Key (Turtle Rock)', player, 2)) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player and state.has_key('Small Key (Turtle Rock)', player, 2) + and state.can_reach(world.get_region('Turtle Rock (Entrance)', player))) else: forbid_item(world.get_location('Turtle Rock - Big Key Chest', player), 'Small Key (Turtle Rock)', player) non_big_key_locations += ['Turtle Rock - Crystaroller Room', 'Turtle Rock - Eye Bridge - Bottom Left', @@ -1054,24 +801,25 @@ def set_trock_key_rules(world, player): elif can_reach_big_chest: set_rule(world.get_entrance('Turtle Rock (Chain Chomp Room) (South)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 2) if item_in_locations(state, 'Big Key (Turtle Rock)', player, [('Turtle Rock - Compass Chest', player), ('Turtle Rock - Roller Room - Left', player), ('Turtle Rock - Roller Room - Right', player)]) else state.has_key('Small Key (Turtle Rock)', player, 4)) set_rule(world.get_location('Turtle Rock - Big Key Chest', player), lambda state: (state.has_key('Small Key (Turtle Rock)', player, 4) or item_name(state, 'Turtle Rock - Big Key Chest', player) == ('Small Key (Turtle Rock)', player))) - if world.accessibility != 'locations': - set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player) + if world.accessibility[player] != 'locations': + set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player + and state.can_reach(world.get_region('Turtle Rock (Big Chest)', player))) else: forbid_item(world.get_location('Turtle Rock - Big Key Chest', player), 'Small Key (Turtle Rock)', player) non_big_key_locations += ['Turtle Rock - Crystaroller Room', 'Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right', 'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'] - if not world.keysanity: + if not world.keyshuffle[player]: non_big_key_locations += ['Turtle Rock - Big Key Chest'] else: set_rule(world.get_entrance('Turtle Rock (Chain Chomp Room) (South)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 2) if item_in_locations(state, 'Big Key (Turtle Rock)', player, [('Turtle Rock - Compass Chest', player), ('Turtle Rock - Roller Room - Left', player), ('Turtle Rock - Roller Room - Right', player)]) else state.has_key('Small Key (Turtle Rock)', player, 4)) set_rule(world.get_location('Turtle Rock - Big Key Chest', player), lambda state: (state.has_key('Small Key (Turtle Rock)', player, 4) or item_name(state, 'Turtle Rock - Big Key Chest', player) == ('Small Key (Turtle Rock)', player))) - if world.accessibility != 'locations': + if world.accessibility[player] != 'locations': set_always_allow(world.get_location('Turtle Rock - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Turtle Rock)' and item.player == player) non_big_key_locations += ['Turtle Rock - Crystaroller Room', 'Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right', 'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'] - if not world.keysanity: + if not world.keyshuffle[player]: non_big_key_locations += ['Turtle Rock - Big Key Chest', 'Turtle Rock - Chain Chomps'] # set big key restrictions @@ -1114,7 +862,6 @@ def set_big_bomb_rules(world, player): 'Bonk Rock Cave', 'Library', 'Potion Shop', - 'Waterfall of Wishing', 'Dam', 'Lumberjack House', 'Lake Hylia Fortune Teller', @@ -1243,7 +990,7 @@ def set_big_bomb_rules(world, player): #2. Mirror and Flute and basic routes (can make difference if accessed via insanity or w/ mirror from connector, and then via hyrule castle gate, because no gloves are needed in that case) #3. Go to south DW and then cross peg bridge: Need Mitts and hammer and moon pearl # -> (Mitts and CPB) or (((G or Flute) and M) and BR)) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and cross_peg_bridge(state)) or (((state.can_lift_rocks(player) or state.has('Ocarina', player)) and state.has_Mirror(player)) and basic_routes(state))) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and cross_peg_bridge(state)) or (((state.can_lift_rocks(player) or state.has('Flute', player)) and state.has_Mirror(player)) and basic_routes(state))) elif bombshop_entrance.name in Southern_DW_entrances: #1. Mirror and enter via gate: Need mirror and Aga1 #2. cross peg bridge: Need hammer and moon pearl @@ -1252,52 +999,52 @@ def set_big_bomb_rules(world, player): elif bombshop_entrance.name in Isolated_DW_entrances: # 1. mirror then flute then basic routes # -> M and Flute and BR - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and state.has('Ocarina', player) and basic_routes(state)) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and state.has('Flute', player) and basic_routes(state)) elif bombshop_entrance.name in Isolated_LW_entrances: # 1. flute then basic routes # Prexisting mirror spot is not permitted, because mirror might have been needed to reach these isolated locations. # -> Flute and BR - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Ocarina', player) and basic_routes(state)) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and basic_routes(state)) elif bombshop_entrance.name in West_LW_DM_entrances: # 1. flute then basic routes or mirror # Prexisting mirror spot is permitted, because flute can be used to reach west DM directly. # -> Flute and (M or BR) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Ocarina', player) and (state.has_Mirror(player) or basic_routes(state))) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and (state.has_Mirror(player) or basic_routes(state))) elif bombshop_entrance.name in East_LW_DM_entrances: # 1. flute then basic routes or mirror and hookshot # Prexisting mirror spot is permitted, because flute can be used to reach west DM directly and then east DM via Hookshot # -> Flute and ((M and Hookshot) or BR) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Ocarina', player) and ((state.has_Mirror(player) and state.has('Hookshot', player)) or basic_routes(state))) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and ((state.has_Mirror(player) and state.has('Hookshot', player)) or basic_routes(state))) elif bombshop_entrance.name == 'Fairy Ascension Cave (Bottom)': # Same as East_LW_DM_entrances except navigation without BR requires Mitts # -> Flute and ((M and Hookshot and Mitts) or BR) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Ocarina', player) and ((state.has_Mirror(player) and state.has('Hookshot', player) and state.can_lift_heavy_rocks(player)) or basic_routes(state))) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and ((state.has_Mirror(player) and state.has('Hookshot', player) and state.can_lift_heavy_rocks(player)) or basic_routes(state))) elif bombshop_entrance.name in Castle_ledge_entrances: # 1. mirror on pyramid to castle ledge, grab bomb, return through mirror spot: Needs mirror # 2. flute then basic routes # -> M or (Flute and BR) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) or (state.has('Ocarina', player) and basic_routes(state))) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) or (state.has('Flute', player) and basic_routes(state))) elif bombshop_entrance.name in Desert_mirrorable_ledge_entrances: # Cases when you have mire access: Mirror to reach locations, return via mirror spot, move to center of desert, mirror anagin and: # 1. Have mire access, Mirror to reach locations, return via mirror spot, move to center of desert, mirror again and then basic routes # 2. flute then basic routes # -> (Mire access and M) or Flute) and BR - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: ((state.can_reach('Dark Desert', 'Region', player) and state.has_Mirror(player)) or state.has('Ocarina', player)) and basic_routes(state)) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: ((state.can_reach('Dark Desert', 'Region', player) and state.has_Mirror(player)) or state.has('Flute', player)) and basic_routes(state)) elif bombshop_entrance.name == 'Old Man Cave (West)': # 1. Lift rock then basic_routes # 2. flute then basic_routes # -> (Flute or G) and BR - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Ocarina', player) or state.can_lift_rocks(player)) and basic_routes(state)) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flute', player) or state.can_lift_rocks(player)) and basic_routes(state)) elif bombshop_entrance.name == 'Graveyard Cave': # 1. flute then basic routes # 2. (has west dark world access) use existing mirror spot (required Pearl), mirror again off ledge # -> (Flute or (M and P and West Dark World access) and BR - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Ocarina', player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state)) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flute', player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state)) elif bombshop_entrance.name in Mirror_from_SDW_entrances: # 1. flute then basic routes # 2. (has South dark world access) use existing mirror spot, mirror again off ledge # -> (Flute or (M and South Dark World access) and BR - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Ocarina', player) or (state.can_reach('South Dark World', 'Region', player) and state.has_Mirror(player))) and basic_routes(state)) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flute', player) or (state.can_reach('South Dark World', 'Region', player) and state.has_Mirror(player))) and basic_routes(state)) elif bombshop_entrance.name == 'Dark World Potion Shop': # 1. walk down by lifting rock: needs gloves and pearl` # 2. walk down by hammering peg: needs hammer and pearl @@ -1309,7 +1056,11 @@ def set_big_bomb_rules(world, player): # (because otherwise mirror was used to reach the grave, so would cancel a pre-existing mirror spot) # to account for insanity, must consider a way to escape without a cave for basic_routes # -> (M and Mitts) or ((Mitts or Flute or (M and P and West Dark World access)) and BR) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and state.has_Mirror(player)) or ((state.can_lift_heavy_rocks(player) or state.has('Ocarina', player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state))) + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and state.has_Mirror(player)) or ((state.can_lift_heavy_rocks(player) or state.has('Flute', player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state))) + elif bombshop_entrance.name == 'Waterfall of Wishing': + # same as the Normal_LW_entrances case except in insanity it's possible you could be here without Flippers which + # means you need an escape route of either Flippers or Flute + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flippers', player) or state.has('Flute', player)) and (basic_routes(state) or state.has_Mirror(player))) def set_inverted_big_bomb_rules(world, player): @@ -1478,6 +1229,17 @@ def set_inverted_big_bomb_rules(world, player): # You either need to Flute to 5 or cross the rock/hammer choice pass to the south. add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) or state.has('Hammer', player) or state.can_lift_rocks(player)) elif bombshop_entrance.name == 'Kings Grave': + # Either lift the rock and walk to the castle to Mirror or Mirror immediately and Flute. + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_flute(player) or state.can_lift_heavy_rocks(player)) and state.has_Mirror(player)) + elif bombshop_entrance.name == 'Waterfall of Wishing': + # You absolutely must be able to swim to return it from here. + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player) and state.has_Mirror(player)) + elif bombshop_entrance.name == 'Ice Palace': + # You can swim to the dock or use the Flute to get off the island. + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flippers', player) or state.can_flute(player)) + elif bombshop_entrance.name == 'Capacity Upgrade': + # You must Mirror but then can use either Ice Palace return path. + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flippers', player) or state.can_flute(player)) and state.has_Mirror(player)) # Either lift the rock and walk to the castle to Mirror or Mirror immediately and Flute. add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_flute(player) or (state.has_Pearl(player) and state.can_lift_heavy_rocks(player))) and state.has_Mirror(player)) elif bombshop_entrance.name == 'Two Brothers House (West)': diff --git a/Text.py b/Text.py index ac254287..d673e2da 100644 --- a/Text.py +++ b/Text.py @@ -107,6 +107,7 @@ Triforce_texts = [ "You get one\nwish. Choose\nwisely, hero!", "Can you please\nbreak us three\nup? Thanks.", " Pick us up\n before we\n get dizzy!", + "\n Honk." ] BombShop2_texts = ['Bombs!\nBombs!\nBiggest!\nBestest!\nGreatest!\nBoomest!'] Sahasrahla2_texts = ['You already got my item, idiot.', 'Why are you still talking to me?', 'This text won\'t change.', 'Have you met my brother, Hasarahshla?'] @@ -366,7 +367,7 @@ class Credits(object): SceneLargeCreditLine(23, "Woodsmen's Hut"), ], 'grove': [ - SceneSmallCreditLine(19, 'ocarina boy plays again'), + SceneSmallCreditLine(19, 'flute boy plays again'), SceneLargeCreditLine(23, 'Haunted Grove'), ], 'well': [ @@ -427,7 +428,6 @@ class CreditLine(object): @property def x(self): - x = 0 if self.align == 'left': x = 0 elif self.align == 'right': @@ -1311,7 +1311,7 @@ class TextTable(object): 'item_get_bombos', 'item_get_quake', 'item_get_hammer', - 'item_get_ocarina', + 'item_get_flute', 'item_get_cane_of_somaria', 'item_get_hookshot', 'item_get_bombs', @@ -1552,7 +1552,7 @@ class TextTable(object): text['item_get_bombos'] = CompressedTextMapper.convert("Let's set everything on fire, and melt things!") text['item_get_quake'] = CompressedTextMapper.convert("Time to make the earth shake, rattle, and roll!") text['item_get_hammer'] = CompressedTextMapper.convert("STOP!\n\nHammer Time!") # 66 - text['item_get_ocarina'] = CompressedTextMapper.convert("Finally! We can play the Song of Time!") + text['item_get_flute'] = CompressedTextMapper.convert("Finally! We can play the Song of Time!") text['item_get_cane_of_somaria'] = CompressedTextMapper.convert("Make blocks!\nThrow blocks!\nsplode Blocks!") text['item_get_hookshot'] = CompressedTextMapper.convert("BOING!!!\nBOING!!!\nSay no more…") text['item_get_bombs'] = CompressedTextMapper.convert("BOMBS! Use A to pick 'em up, throw 'em, get hurt!") diff --git a/Utils.py b/Utils.py index de9fd0c5..95c4ea05 100644 --- a/Utils.py +++ b/Utils.py @@ -1,53 +1,84 @@ import os import subprocess import sys +import typing +import functools + +from yaml import load + +try: + from yaml import CLoader as Loader +except ImportError: + from yaml import Loader + def int16_as_bytes(value): value = value & 0xFFFF return [value & 0xFF, (value >> 8) & 0xFF] + def int32_as_bytes(value): value = value & 0xFFFFFFFF return [value & 0xFF, (value >> 8) & 0xFF, (value >> 16) & 0xFF, (value >> 24) & 0xFF] + def pc_to_snes(value): return ((value<<1) & 0x7F0000)|(value & 0x7FFF)|0x8000 def snes_to_pc(value): return ((value & 0x7F0000)>>1)|(value & 0x7FFF) +def parse_player_names(names, players, teams): + names = tuple(n for n in (n.strip() for n in names.split(",")) if n) + ret = [] + while names or len(ret) < teams: + team = [n[:16] for n in names[:players]] + # where does the 16 character limit come from? + while len(team) != players: + team.append(f"Player {len(team) + 1}") + ret.append(team) + + names = names[players:] + return ret + def is_bundled(): return getattr(sys, 'frozen', False) def local_path(path): - if local_path.cached_path is not None: + if local_path.cached_path: return os.path.join(local_path.cached_path, path) - if is_bundled(): - # we are running in a bundle - local_path.cached_path = sys._MEIPASS # pylint: disable=protected-access,no-member + elif is_bundled(): + if hasattr(sys, "_MEIPASS"): + # we are running in a PyInstaller bundle + local_path.cached_path = sys._MEIPASS # pylint: disable=protected-access,no-member + else: + # cx_Freeze + local_path.cached_path = os.path.dirname(os.path.abspath(sys.argv[0])) else: # we are running in a normal Python environment - local_path.cached_path = os.path.dirname(os.path.abspath(__file__)) + import __main__ + local_path.cached_path = os.path.dirname(os.path.abspath(__main__.__file__)) return os.path.join(local_path.cached_path, path) local_path.cached_path = None def output_path(path): - if output_path.cached_path is not None: + if output_path.cached_path: return os.path.join(output_path.cached_path, path) - if not is_bundled(): + if not is_bundled() and not hasattr(sys, "_MEIPASS"): + # this should trigger if it's cx_freeze bundling output_path.cached_path = '.' return os.path.join(output_path.cached_path, path) else: - # has been packaged, so cannot use CWD for output. + # has been PyInstaller packaged, so cannot use CWD for output. if sys.platform == 'win32': - #windows + # windows import ctypes.wintypes - CSIDL_PERSONAL = 5 # My Documents - SHGFP_TYPE_CURRENT = 0 # Get current, not default value + CSIDL_PERSONAL = 5 # My Documents + SHGFP_TYPE_CURRENT = 0 # Get current, not default value buf = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH) ctypes.windll.shell32.SHGetFolderPathW(None, CSIDL_PERSONAL, None, SHGFP_TYPE_CURRENT, buf) @@ -96,7 +127,7 @@ def make_new_base2current(old_rom='Zelda no Densetsu - Kamigami no Triforce (Jap with open(new_rom, 'rb') as stream: new_rom_data = bytearray(stream.read()) # extend to 2 mb - old_rom_data.extend(bytearray([0x00] * (2097152 - len(old_rom_data)))) + old_rom_data.extend(bytearray([0x00]) * (2097152 - len(old_rom_data))) out_data = OrderedDict() for idx, old in enumerate(old_rom_data): @@ -107,8 +138,49 @@ def make_new_base2current(old_rom='Zelda no Densetsu - Kamigami no Triforce (Jap if offset - 1 in out_data: out_data[offset-1].extend(out_data.pop(offset)) with open('data/base2current.json', 'wt') as outfile: - json.dump([{key:value} for key, value in out_data.items()], outfile, separators=(",", ":")) + json.dump([{key: value} for key, value in out_data.items()], outfile, separators=(",", ":")) basemd5 = hashlib.md5() basemd5.update(new_rom_data) return "New Rom Hash: " + basemd5.hexdigest() + + +parse_yaml = functools.partial(load, Loader=Loader) + + +class Hint(typing.NamedTuple): + receiving_player: int + finding_player: int + location: int + item: int + found: bool + +def get_public_ipv4() -> str: + import socket + import urllib.request + import logging + ip = socket.gethostbyname(socket.gethostname()) + try: + ip = urllib.request.urlopen('https://checkip.amazonaws.com/').read().decode('utf8').strip() + except Exception as e: + try: + ip = urllib.request.urlopen('https://v4.ident.me').read().decode('utf8').strip() + except: + logging.exception(e) + pass # we could be offline, in a local game, so no point in erroring out + return ip + + +def get_options() -> dict: + if not hasattr(get_options, "options"): + locations = ("options.yaml", "host.yaml", + local_path("options.yaml"), local_path("host.yaml")) + + for location in locations: + if os.path.exists(location): + with open(location) as f: + get_options.options = parse_yaml(f.read()) + break + else: + raise FileNotFoundError(f"Could not find {locations[1]} to load options.") + return get_options.options diff --git a/_vendor/__init__.py b/_vendor/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/_vendor/collections_extended/CONTRIBUTERS b/_vendor/collections_extended/CONTRIBUTERS deleted file mode 100644 index 333a02bf..00000000 --- a/_vendor/collections_extended/CONTRIBUTERS +++ /dev/null @@ -1,5 +0,0 @@ -Mike Lenzen https://github.com/mlenzen -Caleb Levy https://github.com/caleblevy -Marein Könings https://github.com/MareinK -Jad Kik https://github.com/jadkik -Kuba Marek https://github.com/bluecube \ No newline at end of file diff --git a/_vendor/collections_extended/LICENSE b/_vendor/collections_extended/LICENSE deleted file mode 100644 index 8405e89a..00000000 --- a/_vendor/collections_extended/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/_vendor/collections_extended/__init__.py b/_vendor/collections_extended/__init__.py deleted file mode 100644 index 039fee03..00000000 --- a/_vendor/collections_extended/__init__.py +++ /dev/null @@ -1,55 +0,0 @@ -"""collections_extended contains a few extra basic data structures.""" -from ._compat import Collection -from .bags import bag, frozenbag -from .setlists import setlist, frozensetlist -from .bijection import bijection -from .range_map import RangeMap, MappedRange - -__version__ = '1.0.2' - -__all__ = ( - 'collection', - 'setlist', - 'frozensetlist', - 'bag', - 'frozenbag', - 'bijection', - 'RangeMap', - 'MappedRange', - 'Collection', - ) - - -def collection(iterable=None, mutable=True, ordered=False, unique=False): - """Return a Collection with the specified properties. - - Args: - iterable (Iterable): collection to instantiate new collection from. - mutable (bool): Whether or not the new collection is mutable. - ordered (bool): Whether or not the new collection is ordered. - unique (bool): Whether or not the new collection contains only unique values. - """ - if iterable is None: - iterable = tuple() - if unique: - if ordered: - if mutable: - return setlist(iterable) - else: - return frozensetlist(iterable) - else: - if mutable: - return set(iterable) - else: - return frozenset(iterable) - else: - if ordered: - if mutable: - return list(iterable) - else: - return tuple(iterable) - else: - if mutable: - return bag(iterable) - else: - return frozenbag(iterable) diff --git a/_vendor/collections_extended/_compat.py b/_vendor/collections_extended/_compat.py deleted file mode 100644 index bbf0fbd9..00000000 --- a/_vendor/collections_extended/_compat.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Python 2/3 compatibility helpers.""" -import sys - -is_py2 = sys.version_info[0] == 2 - -if is_py2: - def keys_set(d): - """Return a set of passed dictionary's keys.""" - return set(d.keys()) -else: - keys_set = dict.keys - - -if sys.version_info < (3, 6): - from collections import Sized, Iterable, Container - - def _check_methods(C, *methods): - mro = C.__mro__ - for method in methods: - for B in mro: - if method in B.__dict__: - if B.__dict__[method] is None: - return NotImplemented - break - else: - return NotImplemented - return True - - class Collection(Sized, Iterable, Container): - """Backport from Python3.6.""" - - __slots__ = tuple() - - @classmethod - def __subclasshook__(cls, C): - if cls is Collection: - return _check_methods(C, "__len__", "__iter__", "__contains__") - return NotImplemented - -else: - from collections.abc import Collection - - -def handle_rich_comp_not_implemented(): - """Correctly handle unimplemented rich comparisons. - - In Python 3, return NotImplemented. - In Python 2, raise a TypeError. - """ - if is_py2: - raise TypeError() - else: - return NotImplemented diff --git a/_vendor/collections_extended/_util.py b/_vendor/collections_extended/_util.py deleted file mode 100644 index 58a83f45..00000000 --- a/_vendor/collections_extended/_util.py +++ /dev/null @@ -1,16 +0,0 @@ -"""util functions for collections_extended.""" - - -def hash_iterable(it): - """Perform a O(1) memory hash of an iterable of arbitrary length. - - hash(tuple(it)) creates a temporary tuple containing all values from it - which could be a problem if it is large. - - See discussion at: - https://groups.google.com/forum/#!msg/python-ideas/XcuC01a8SYs/e-doB9TbDwAJ - """ - hash_value = hash(type(it)) - for value in it: - hash_value = hash((hash_value, value)) - return hash_value diff --git a/_vendor/collections_extended/bags.py b/_vendor/collections_extended/bags.py deleted file mode 100644 index cce132fe..00000000 --- a/_vendor/collections_extended/bags.py +++ /dev/null @@ -1,527 +0,0 @@ -"""Bag class definitions.""" -import heapq -from operator import itemgetter -from collections import Set, MutableSet, Hashable - -from . import _compat - - -class _basebag(Set): - """Base class for bag classes. - - Base class for bag and frozenbag. Is not mutable and not hashable, so there's - no reason to use this instead of either bag or frozenbag. - """ - - # Basic object methods - - def __init__(self, iterable=None): - """Create a new basebag. - - If iterable isn't given, is None or is empty then the bag starts empty. - Otherwise each element from iterable will be added to the bag - however many times it appears. - - This runs in O(len(iterable)) - """ - self._dict = dict() - self._size = 0 - if iterable: - if isinstance(iterable, _basebag): - for elem, count in iterable._dict.items(): - self._dict[elem] = count - self._size += count - else: - for value in iterable: - self._dict[value] = self._dict.get(value, 0) + 1 - self._size += 1 - - def __repr__(self): - if self._size == 0: - return '{0}()'.format(self.__class__.__name__) - else: - repr_format = '{class_name}({values!r})' - return repr_format.format( - class_name=self.__class__.__name__, - values=tuple(self), - ) - - def __str__(self): - if self._size == 0: - return '{class_name}()'.format(class_name=self.__class__.__name__) - else: - format_single = '{elem!r}' - format_mult = '{elem!r}^{mult}' - strings = [] - for elem, mult in self._dict.items(): - if mult > 1: - strings.append(format_mult.format(elem=elem, mult=mult)) - else: - strings.append(format_single.format(elem=elem)) - return '{%s}' % ', '.join(strings) - - # New public methods (not overriding/implementing anything) - - def num_unique_elements(self): - """Return the number of unique elements. - - This runs in O(1) time - """ - return len(self._dict) - - def unique_elements(self): - """Return a view of unique elements in this bag. - - In Python 3: - This runs in O(1) time and returns a view of the unique elements - In Python 2: - This runs in O(n) and returns set of the current elements. - """ - return _compat.keys_set(self._dict) - - def count(self, value): - """Return the number of value present in this bag. - - If value is not in the bag no Error is raised, instead 0 is returned. - - This runs in O(1) time - - Args: - value: The element of self to get the count of - Returns: - int: The count of value in self - """ - return self._dict.get(value, 0) - - def nlargest(self, n=None): - """List the n most common elements and their counts. - - List is from the most - common to the least. If n is None, the list all element counts. - - Run time should be O(m log m) where m is len(self) - Args: - n (int): The number of elements to return - """ - if n is None: - return sorted(self._dict.items(), key=itemgetter(1), reverse=True) - else: - return heapq.nlargest(n, self._dict.items(), key=itemgetter(1)) - - @classmethod - def _from_iterable(cls, it): - return cls(it) - - @classmethod - def from_mapping(cls, mapping): - """Create a bag from a dict of elem->count. - - Each key in the dict is added if the value is > 0. - """ - out = cls() - for elem, count in mapping.items(): - if count > 0: - out._dict[elem] = count - out._size += count - return out - - def copy(self): - """Create a shallow copy of self. - - This runs in O(len(self.num_unique_elements())) - """ - return self.from_mapping(self._dict) - - # implementing Sized methods - - def __len__(self): - """Return the cardinality of the bag. - - This runs in O(1) - """ - return self._size - - # implementing Container methods - - def __contains__(self, value): - """Return the multiplicity of the element. - - This runs in O(1) - """ - return self._dict.get(value, 0) - - # implementing Iterable methods - - def __iter__(self): - """Iterate through all elements. - - Multiple copies will be returned if they exist. - """ - for value, count in self._dict.items(): - for i in range(count): - yield(value) - - # Comparison methods - - def _is_subset(self, other): - """Check that every element in self has a count <= in other. - - Args: - other (Set) - """ - if isinstance(other, _basebag): - for elem, count in self._dict.items(): - if not count <= other._dict.get(elem, 0): - return False - else: - for elem in self: - if self._dict.get(elem, 0) > 1 or elem not in other: - return False - return True - - def _is_superset(self, other): - """Check that every element in self has a count >= in other. - - Args: - other (Set) - """ - if isinstance(other, _basebag): - for elem, count in other._dict.items(): - if not self._dict.get(elem, 0) >= count: - return False - else: - for elem in other: - if elem not in self: - return False - return True - - def __le__(self, other): - if not isinstance(other, Set): - return _compat.handle_rich_comp_not_implemented() - return len(self) <= len(other) and self._is_subset(other) - - def __lt__(self, other): - if not isinstance(other, Set): - return _compat.handle_rich_comp_not_implemented() - return len(self) < len(other) and self._is_subset(other) - - def __gt__(self, other): - if not isinstance(other, Set): - return _compat.handle_rich_comp_not_implemented() - return len(self) > len(other) and self._is_superset(other) - - def __ge__(self, other): - if not isinstance(other, Set): - return _compat.handle_rich_comp_not_implemented() - return len(self) >= len(other) and self._is_superset(other) - - def __eq__(self, other): - if not isinstance(other, Set): - return False - if isinstance(other, _basebag): - return self._dict == other._dict - if not len(self) == len(other): - return False - for elem in other: - if self._dict.get(elem, 0) != 1: - return False - return True - - def __ne__(self, other): - return not (self == other) - - # Operations - &, |, +, -, ^, * and isdisjoint - - def __and__(self, other): - """Intersection is the minimum of corresponding counts. - - This runs in O(l + n) where: - n is self.num_unique_elements() - if other is a bag: - l = 1 - else: - l = len(other) - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - values = dict() - for elem in self._dict: - values[elem] = min(other._dict.get(elem, 0), self._dict.get(elem, 0)) - return self.from_mapping(values) - - def isdisjoint(self, other): - """Return if this bag is disjoint with the passed collection. - - This runs in O(len(other)) - - TODO move isdisjoint somewhere more appropriate - """ - for value in other: - if value in self: - return False - return True - - def __or__(self, other): - """Union is the maximum of all elements. - - This runs in O(m + n) where: - n is self.num_unique_elements() - if other is a bag: - m = other.num_unique_elements() - else: - m = len(other) - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - values = dict() - for elem in self.unique_elements() | other.unique_elements(): - values[elem] = max(self._dict.get(elem, 0), other._dict.get(elem, 0)) - return self.from_mapping(values) - - def __add__(self, other): - """Return a new bag also containing all the elements of other. - - self + other = self & other + self | other - - This runs in O(m + n) where: - n is self.num_unique_elements() - m is len(other) - Args: - other (Iterable): elements to add to self - """ - out = self.copy() - for value in other: - out._dict[value] = out._dict.get(value, 0) + 1 - out._size += 1 - return out - - def __sub__(self, other): - """Difference between the sets. - - For normal sets this is all x s.t. x in self and x not in other. - For bags this is count(x) = max(0, self.count(x)-other.count(x)) - - This runs in O(m + n) where: - n is self.num_unique_elements() - m is len(other) - Args: - other (Iterable): elements to remove - """ - out = self.copy() - for value in other: - old_count = out._dict.get(value, 0) - if old_count == 1: - del out._dict[value] - out._size -= 1 - elif old_count > 1: - out._dict[value] = old_count - 1 - out._size -= 1 - return out - - def __mul__(self, other): - """Cartesian product of the two sets. - - other can be any iterable. - Both self and other must contain elements that can be added together. - - This should run in O(m*n+l) where: - m is the number of unique elements in self - n is the number of unique elements in other - if other is a bag: - l is 0 - else: - l is the len(other) - The +l will only really matter when other is an iterable with MANY - repeated elements. - For example: {'a'^2} * 'bbbbbbbbbbbbbbbbbbbbbbbbbb' - The algorithm will be dominated by counting the 'b's - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - values = dict() - for elem, count in self._dict.items(): - for other_elem, other_count in other._dict.items(): - new_elem = elem + other_elem - new_count = count * other_count - values[new_elem] = new_count - return self.from_mapping(values) - - def __xor__(self, other): - """Symmetric difference between the sets. - - other can be any iterable. - - This runs in O(m + n) where: - m = len(self) - n = len(other) - """ - return (self - other) | (other - self) - - -class bag(_basebag, MutableSet): - """bag is a mutable unhashable bag.""" - - def pop(self): - """Remove and return an element of self.""" - # TODO can this be done more efficiently (no need to create an iterator)? - it = iter(self) - try: - value = next(it) - except StopIteration: - raise KeyError - self.discard(value) - return value - - def add(self, elem): - """Add elem to self.""" - self._dict[elem] = self._dict.get(elem, 0) + 1 - self._size += 1 - - def discard(self, elem): - """Remove elem from this bag, silent if it isn't present.""" - try: - self.remove(elem) - except ValueError: - pass - - def remove(self, elem): - """Remove elem from this bag, raising a ValueError if it isn't present. - - Args: - elem: object to remove from self - Raises: - ValueError: if the elem isn't present - """ - old_count = self._dict.get(elem, 0) - if old_count == 0: - raise ValueError - elif old_count == 1: - del self._dict[elem] - else: - self._dict[elem] -= 1 - self._size -= 1 - - def discard_all(self, other): - """Discard all of the elems from other.""" - if not isinstance(other, _basebag): - other = self._from_iterable(other) - for elem, other_count in other._dict.items(): - old_count = self._dict.get(elem, 0) - new_count = old_count - other_count - if new_count >= 0: - if new_count == 0: - if elem in self: - del self._dict[elem] - else: - self._dict[elem] = new_count - self._size += new_count - old_count - - def remove_all(self, other): - """Remove all of the elems from other. - - Raises a ValueError if the multiplicity of any elem in other is greater - than in self. - """ - if not self._is_superset(other): - raise ValueError - self.discard_all(other) - - def clear(self): - """Remove all elements from this bag.""" - self._dict = dict() - self._size = 0 - - # In-place operations - - def __ior__(self, other): - """Set multiplicity of each element to the maximum of the two collections. - - if isinstance(other, _basebag): - This runs in O(other.num_unique_elements()) - else: - This runs in O(len(other)) - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - for elem, other_count in other._dict.items(): - old_count = self._dict.get(elem, 0) - new_count = max(other_count, old_count) - self._dict[elem] = new_count - self._size += new_count - old_count - return self - - def __iand__(self, other): - """Set multiplicity of each element to the minimum of the two collections. - - if isinstance(other, _basebag): - This runs in O(other.num_unique_elements()) - else: - This runs in O(len(other)) - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - for elem, old_count in set(self._dict.items()): - other_count = other._dict.get(elem, 0) - new_count = min(other_count, old_count) - if new_count == 0: - del self._dict[elem] - else: - self._dict[elem] = new_count - self._size += new_count - old_count - return self - - def __ixor__(self, other): - """Set self to the symmetric difference between the sets. - - if isinstance(other, _basebag): - This runs in O(other.num_unique_elements()) - else: - This runs in O(len(other)) - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - other_minus_self = other - self - self -= other - self |= other_minus_self - return self - - def __isub__(self, other): - """Discard the elements of other from self. - - if isinstance(it, _basebag): - This runs in O(it.num_unique_elements()) - else: - This runs in O(len(it)) - """ - self.discard_all(other) - return self - - def __iadd__(self, other): - """Add all of the elements of other to self. - - if isinstance(it, _basebag): - This runs in O(it.num_unique_elements()) - else: - This runs in O(len(it)) - """ - if not isinstance(other, _basebag): - other = self._from_iterable(other) - for elem, other_count in other._dict.items(): - self._dict[elem] = self._dict.get(elem, 0) + other_count - self._size += other_count - return self - - -class frozenbag(_basebag, Hashable): - """frozenbag is an immutable, hashable bab.""" - - def __hash__(self): - """Compute the hash value of a frozenbag. - - This was copied directly from _collections_abc.Set._hash in Python3 which - is identical to _abcoll.Set._hash - We can't call it directly because Python2 raises a TypeError. - """ - if not hasattr(self, '_hash_value'): - self._hash_value = self._hash() - return self._hash_value diff --git a/_vendor/collections_extended/bijection.py b/_vendor/collections_extended/bijection.py deleted file mode 100644 index f9641de4..00000000 --- a/_vendor/collections_extended/bijection.py +++ /dev/null @@ -1,94 +0,0 @@ -"""Class definition for bijection.""" - -from collections import MutableMapping, Mapping - - -class bijection(MutableMapping): - """A one-to-one onto mapping, a dict with unique values.""" - - def __init__(self, iterable=None, **kwarg): - """Create a bijection from an iterable. - - Matches dict.__init__. - """ - self._data = {} - self.__inverse = self.__new__(bijection) - self.__inverse._data = {} - self.__inverse.__inverse = self - if iterable is not None: - if isinstance(iterable, Mapping): - for key, value in iterable.items(): - self[key] = value - else: - for pair in iterable: - self[pair[0]] = pair[1] - for key, value in kwarg.items(): - self[key] = value - - def __repr__(self): - if len(self._data) == 0: - return '{0}()'.format(self.__class__.__name__) - else: - repr_format = '{class_name}({values!r})' - return repr_format.format( - class_name=self.__class__.__name__, - values=self._data, - ) - - @property - def inverse(self): - """Return the inverse of this bijection.""" - return self.__inverse - - # Required for MutableMapping - def __len__(self): - return len(self._data) - - # Required for MutableMapping - def __getitem__(self, key): - return self._data[key] - - # Required for MutableMapping - def __setitem__(self, key, value): - if key in self: - del self.inverse._data[self[key]] - if value in self.inverse: - del self._data[self.inverse[value]] - self._data[key] = value - self.inverse._data[value] = key - - # Required for MutableMapping - def __delitem__(self, key): - value = self._data.pop(key) - del self.inverse._data[value] - - # Required for MutableMapping - def __iter__(self): - return iter(self._data) - - def __contains__(self, key): - return key in self._data - - def clear(self): - """Remove everything from this bijection.""" - self._data.clear() - self.inverse._data.clear() - - def copy(self): - """Return a copy of this bijection.""" - return bijection(self) - - def items(self): - """See Mapping.items.""" - return self._data.items() - - def keys(self): - """See Mapping.keys.""" - return self._data.keys() - - def values(self): - """See Mapping.values.""" - return self.inverse.keys() - - def __eq__(self, other): - return isinstance(other, bijection) and self._data == other._data diff --git a/_vendor/collections_extended/range_map.py b/_vendor/collections_extended/range_map.py deleted file mode 100644 index 19a61238..00000000 --- a/_vendor/collections_extended/range_map.py +++ /dev/null @@ -1,384 +0,0 @@ -"""RangeMap class definition.""" -from bisect import bisect_left, bisect_right -from collections import namedtuple, Mapping, MappingView, Set - - -# Used to mark unmapped ranges -_empty = object() - -MappedRange = namedtuple('MappedRange', ('start', 'stop', 'value')) - - -class KeysView(MappingView, Set): - """A view of the keys that mark the starts of subranges. - - Since iterating over all the keys is impossible, the KeysView only - contains the keys that start each subrange. - """ - - __slots__ = () - - @classmethod - def _from_iterable(self, it): - return set(it) - - def __contains__(self, key): - loc = self._mapping._bisect_left(key) - return self._mapping._keys[loc] == key and \ - self._mapping._values[loc] is not _empty - - def __iter__(self): - for item in self._mapping.ranges(): - yield item.start - - -class ItemsView(MappingView, Set): - """A view of the items that mark the starts of subranges. - - Since iterating over all the keys is impossible, the ItemsView only - contains the items that start each subrange. - """ - - __slots__ = () - - @classmethod - def _from_iterable(self, it): - return set(it) - - def __contains__(self, item): - key, value = item - loc = self._mapping._bisect_left(key) - return self._mapping._keys[loc] == key and \ - self._mapping._values[loc] == value - - def __iter__(self): - for mapped_range in self._mapping.ranges(): - yield (mapped_range.start, mapped_range.value) - - -class ValuesView(MappingView): - """A view on the values of a Mapping.""" - - __slots__ = () - - def __contains__(self, value): - return value in self._mapping._values - - def __iter__(self): - for value in self._mapping._values: - if value is not _empty: - yield value - - -def _check_start_stop(start, stop): - """Check that start and stop are valid - orderable and in the right order. - - Raises: - ValueError: if stop <= start - TypeError: if unorderable - """ - if start is not None and stop is not None and stop <= start: - raise ValueError('stop must be > start') - - -def _check_key_slice(key): - if not isinstance(key, slice): - raise TypeError('Can only set and delete slices') - if key.step is not None: - raise ValueError('Cannot set or delete slices with steps') - - -class RangeMap(Mapping): - """Map ranges of orderable elements to values.""" - - def __init__(self, iterable=None, **kwargs): - """Create a RangeMap. - - A mapping or other iterable can be passed to initialize the RangeMap. - If mapping is passed, it is interpreted as a mapping from range start - indices to values. - If an iterable is passed, each element will define a range in the - RangeMap and should be formatted (start, stop, value). - - default_value is a an optional keyword argument that will initialize the - entire RangeMap to that value. Any missing ranges will be mapped to that - value. However, if ranges are subsequently deleted they will be removed - and *not* mapped to the default_value. - - Args: - iterable: A Mapping or an Iterable to initialize from. - default_value: If passed, the return value for all keys less than the - least key in mapping or missing ranges in iterable. If no mapping - or iterable, the return value for all keys. - """ - default_value = kwargs.pop('default_value', _empty) - if kwargs: - raise TypeError('Unknown keyword arguments: %s' % ', '.join(kwargs.keys())) - self._keys = [None] - self._values = [default_value] - if iterable: - if isinstance(iterable, Mapping): - self._init_from_mapping(iterable) - else: - self._init_from_iterable(iterable) - - @classmethod - def from_mapping(cls, mapping): - """Create a RangeMap from a mapping of interval starts to values.""" - obj = cls() - obj._init_from_mapping(mapping) - return obj - - def _init_from_mapping(self, mapping): - for key, value in sorted(mapping.items()): - self.set(value, key) - - @classmethod - def from_iterable(cls, iterable): - """Create a RangeMap from an iterable of tuples defining each range. - - Each element of the iterable is a tuple (start, stop, value). - """ - obj = cls() - obj._init_from_iterable(iterable) - return obj - - def _init_from_iterable(self, iterable): - for start, stop, value in iterable: - self.set(value, start=start, stop=stop) - - def __str__(self): - range_format = '({range.start}, {range.stop}): {range.value}' - values = ', '.join([range_format.format(range=r) for r in self.ranges()]) - return 'RangeMap(%s)' % values - - def __repr__(self): - range_format = '({range.start!r}, {range.stop!r}, {range.value!r})' - values = ', '.join([range_format.format(range=r) for r in self.ranges()]) - return 'RangeMap([%s])' % values - - def _bisect_left(self, key): - """Return the index of the key or the last key < key.""" - if key is None: - return 0 - else: - return bisect_left(self._keys, key, lo=1) - - def _bisect_right(self, key): - """Return the index of the first key > key.""" - if key is None: - return 1 - else: - return bisect_right(self._keys, key, lo=1) - - def ranges(self, start=None, stop=None): - """Generate MappedRanges for all mapped ranges. - - Yields: - MappedRange - """ - _check_start_stop(start, stop) - start_loc = self._bisect_right(start) - if stop is None: - stop_loc = len(self._keys) - else: - stop_loc = self._bisect_left(stop) - start_val = self._values[start_loc - 1] - candidate_keys = [start] + self._keys[start_loc:stop_loc] + [stop] - candidate_values = [start_val] + self._values[start_loc:stop_loc] - for i, value in enumerate(candidate_values): - if value is not _empty: - start_key = candidate_keys[i] - stop_key = candidate_keys[i + 1] - yield MappedRange(start_key, stop_key, value) - - def __contains__(self, value): - try: - self.__getitem(value) is not _empty - except KeyError: - return False - else: - return True - - def __iter__(self): - for key, value in zip(self._keys, self._values): - if value is not _empty: - yield key - - def __bool__(self): - if len(self._keys) > 1: - return True - else: - return self._values[0] != _empty - - __nonzero__ = __bool__ - - def __getitem(self, key): - """Get the value for a key (not a slice).""" - loc = self._bisect_right(key) - 1 - value = self._values[loc] - if value is _empty: - raise KeyError(key) - else: - return value - - def get(self, key, restval=None): - """Get the value of the range containing key, otherwise return restval.""" - try: - return self.__getitem(key) - except KeyError: - return restval - - def get_range(self, start=None, stop=None): - """Return a RangeMap for the range start to stop. - - Returns: - A RangeMap - """ - return self.from_iterable(self.ranges(start, stop)) - - def set(self, value, start=None, stop=None): - """Set the range from start to stop to value.""" - _check_start_stop(start, stop) - # start_index, stop_index will denote the sections we are replacing - start_index = self._bisect_left(start) - if start is not None: # start_index == 0 - prev_value = self._values[start_index - 1] - if prev_value == value: - # We're setting a range where the left range has the same - # value, so create one big range - start_index -= 1 - start = self._keys[start_index] - if stop is None: - new_keys = [start] - new_values = [value] - stop_index = len(self._keys) - else: - stop_index = self._bisect_right(stop) - stop_value = self._values[stop_index - 1] - stop_key = self._keys[stop_index - 1] - if stop_key == stop and stop_value == value: - new_keys = [start] - new_values = [value] - else: - new_keys = [start, stop] - new_values = [value, stop_value] - self._keys[start_index:stop_index] = new_keys - self._values[start_index:stop_index] = new_values - - def delete(self, start=None, stop=None): - """Delete the range from start to stop from self. - - Raises: - KeyError: If part of the passed range isn't mapped. - """ - _check_start_stop(start, stop) - start_loc = self._bisect_right(start) - 1 - if stop is None: - stop_loc = len(self._keys) - else: - stop_loc = self._bisect_left(stop) - for value in self._values[start_loc:stop_loc]: - if value is _empty: - raise KeyError((start, stop)) - # this is inefficient, we've already found the sub ranges - self.set(_empty, start=start, stop=stop) - - def empty(self, start=None, stop=None): - """Empty the range from start to stop. - - Like delete, but no Error is raised if the entire range isn't mapped. - """ - self.set(_empty, start=start, stop=stop) - - def clear(self): - """Remove all elements.""" - self._keys = [None] - self._values = [_empty] - - @property - def start(self): - """Get the start key of the first range. - - None if RangeMap is empty or unbounded to the left. - """ - if self._values[0] is _empty: - try: - return self._keys[1] - except IndexError: - # This is empty or everything is mapped to a single value - return None - else: - # This is unbounded to the left - return self._keys[0] - - @property - def end(self): - """Get the stop key of the last range. - - None if RangeMap is empty or unbounded to the right. - """ - if self._values[-1] is _empty: - return self._keys[-1] - else: - # This is unbounded to the right - return None - - def __eq__(self, other): - if isinstance(other, RangeMap): - return ( - self._keys == other._keys and - self._values == other._values - ) - else: - return False - - def __getitem__(self, key): - try: - _check_key_slice(key) - except TypeError: - return self.__getitem(key) - else: - return self.get_range(key.start, key.stop) - - def __setitem__(self, key, value): - _check_key_slice(key) - self.set(value, key.start, key.stop) - - def __delitem__(self, key): - _check_key_slice(key) - self.delete(key.start, key.stop) - - def __len__(self): - count = 0 - for v in self._values: - if v is not _empty: - count += 1 - return count - - def keys(self): - """Return a view of the keys.""" - return KeysView(self) - - def values(self): - """Return a view of the values.""" - return ValuesView(self) - - def items(self): - """Return a view of the item pairs.""" - return ItemsView(self) - - # Python2 - override slice methods - def __setslice__(self, i, j, value): - """Implement __setslice__ to override behavior in Python 2. - - This is required because empty slices pass integers in python2 as opposed - to None in python 3. - """ - raise SyntaxError('Assigning slices doesn\t work in Python 2, use set') - - def __delslice__(self, i, j): - raise SyntaxError('Deleting slices doesn\t work in Python 2, use delete') - - def __getslice__(self, i, j): - raise SyntaxError('Getting slices doesn\t work in Python 2, use get_range.') diff --git a/_vendor/collections_extended/setlists.py b/_vendor/collections_extended/setlists.py deleted file mode 100644 index 2976077c..00000000 --- a/_vendor/collections_extended/setlists.py +++ /dev/null @@ -1,552 +0,0 @@ -"""Setlist class definitions.""" -import random as random_ - -from collections import ( - Sequence, - Set, - MutableSequence, - MutableSet, - Hashable, - ) - -from . import _util - - -class _basesetlist(Sequence, Set): - """A setlist is an ordered Collection of unique elements. - - _basesetlist is the superclass of setlist and frozensetlist. It is immutable - and unhashable. - """ - - def __init__(self, iterable=None, raise_on_duplicate=False): - """Create a setlist. - - Args: - iterable (Iterable): Values to initialize the setlist with. - """ - self._list = list() - self._dict = dict() - if iterable: - if raise_on_duplicate: - self._extend(iterable) - else: - self._update(iterable) - - def __repr__(self): - if len(self) == 0: - return '{0}()'.format(self.__class__.__name__) - else: - repr_format = '{class_name}({values!r})' - return repr_format.format( - class_name=self.__class__.__name__, - values=tuple(self), - ) - - # Convenience methods - def _fix_neg_index(self, index): - if index < 0: - index += len(self) - if index < 0: - raise IndexError('index is out of range') - return index - - def _fix_end_index(self, index): - if index is None: - return len(self) - else: - return self._fix_neg_index(index) - - def _append(self, value): - # Checking value in self will check that value is Hashable - if value in self: - raise ValueError('Value "%s" already present' % str(value)) - else: - self._dict[value] = len(self) - self._list.append(value) - - def _extend(self, values): - new_values = set() - for value in values: - if value in new_values: - raise ValueError('New values contain duplicates') - elif value in self: - raise ValueError('New values contain elements already present in self') - else: - new_values.add(value) - for value in values: - self._dict[value] = len(self) - self._list.append(value) - - def _add(self, item): - if item not in self: - self._dict[item] = len(self) - self._list.append(item) - - def _update(self, values): - for value in values: - if value not in self: - self._dict[value] = len(self) - self._list.append(value) - - @classmethod - def _from_iterable(cls, it, **kwargs): - return cls(it, **kwargs) - - # Implement Container - def __contains__(self, value): - return value in self._dict - - # Iterable we get by inheriting from Sequence - - # Implement Sized - def __len__(self): - return len(self._list) - - # Implement Sequence - def __getitem__(self, index): - if isinstance(index, slice): - return self._from_iterable(self._list[index]) - return self._list[index] - - def count(self, value): - """Return the number of occurences of value in self. - - This runs in O(1) - - Args: - value: The value to count - Returns: - int: 1 if the value is in the setlist, otherwise 0 - """ - if value in self: - return 1 - else: - return 0 - - def index(self, value, start=0, end=None): - """Return the index of value between start and end. - - By default, the entire setlist is searched. - - This runs in O(1) - - Args: - value: The value to find the index of - start (int): The index to start searching at (defaults to 0) - end (int): The index to stop searching at (defaults to the end of the list) - Returns: - int: The index of the value - Raises: - ValueError: If the value is not in the list or outside of start - end - IndexError: If start or end are out of range - """ - try: - index = self._dict[value] - except KeyError: - raise ValueError - else: - start = self._fix_neg_index(start) - end = self._fix_end_index(end) - if start <= index and index < end: - return index - else: - raise ValueError - - @classmethod - def _check_type(cls, other, operand_name): - if not isinstance(other, _basesetlist): - message = ( - "unsupported operand type(s) for {operand_name}: " - "'{self_type}' and '{other_type}'").format( - operand_name=operand_name, - self_type=cls, - other_type=type(other), - ) - raise TypeError(message) - - def __add__(self, other): - self._check_type(other, '+') - out = self.copy() - out._extend(other) - return out - - # Implement Set - - def issubset(self, other): - return self <= other - - def issuperset(self, other): - return self >= other - - def union(self, other): - out = self.copy() - out.update(other) - return out - - def intersection(self, other): - other = set(other) - return self._from_iterable(item for item in self if item in other) - - def difference(self, other): - other = set(other) - return self._from_iterable(item for item in self if item not in other) - - def symmetric_difference(self, other): - return self.union(other) - self.intersection(other) - - def __sub__(self, other): - self._check_type(other, '-') - return self.difference(other) - - def __and__(self, other): - self._check_type(other, '&') - return self.intersection(other) - - def __or__(self, other): - self._check_type(other, '|') - return self.union(other) - - def __xor__(self, other): - self._check_type(other, '^') - return self.symmetric_difference(other) - - # Comparison - - def __eq__(self, other): - if not isinstance(other, _basesetlist): - return False - if not len(self) == len(other): - return False - for self_elem, other_elem in zip(self, other): - if self_elem != other_elem: - return False - return True - - def __ne__(self, other): - return not (self == other) - - # New methods - - def sub_index(self, sub, start=0, end=None): - """Return the index of a subsequence. - - This runs in O(len(sub)) - - Args: - sub (Sequence): An Iterable to search for - Returns: - int: The index of the first element of sub - Raises: - ValueError: If sub isn't a subsequence - TypeError: If sub isn't iterable - IndexError: If start or end are out of range - """ - start_index = self.index(sub[0], start, end) - end = self._fix_end_index(end) - if start_index + len(sub) > end: - raise ValueError - for i in range(1, len(sub)): - if sub[i] != self[start_index + i]: - raise ValueError - return start_index - - def copy(self): - return self.__class__(self) - - -class setlist(_basesetlist, MutableSequence, MutableSet): - """A mutable (unhashable) setlist.""" - - def __str__(self): - return '{[%s}]' % ', '.join(repr(v) for v in self) - - # Helper methods - def _delete_all(self, elems_to_delete, raise_errors): - indices_to_delete = set() - for elem in elems_to_delete: - try: - elem_index = self._dict[elem] - except KeyError: - if raise_errors: - raise ValueError('Passed values contain elements not in self') - else: - if elem_index in indices_to_delete: - if raise_errors: - raise ValueError('Passed vales contain duplicates') - indices_to_delete.add(elem_index) - self._delete_values_by_index(indices_to_delete) - - def _delete_values_by_index(self, indices_to_delete): - deleted_count = 0 - for i, elem in enumerate(self._list): - if i in indices_to_delete: - deleted_count += 1 - del self._dict[elem] - else: - new_index = i - deleted_count - self._list[new_index] = elem - self._dict[elem] = new_index - # Now remove deleted_count items from the end of the list - if deleted_count: - self._list = self._list[:-deleted_count] - - # Set/Sequence agnostic - def pop(self, index=-1): - """Remove and return the item at index.""" - value = self._list.pop(index) - del self._dict[value] - return value - - def clear(self): - """Remove all elements from self.""" - self._dict = dict() - self._list = list() - - # Implement MutableSequence - def __setitem__(self, index, value): - if isinstance(index, slice): - old_values = self[index] - for v in value: - if v in self and v not in old_values: - raise ValueError - self._list[index] = value - self._dict = {} - for i, v in enumerate(self._list): - self._dict[v] = i - else: - index = self._fix_neg_index(index) - old_value = self._list[index] - if value in self: - if value == old_value: - return - else: - raise ValueError - del self._dict[old_value] - self._list[index] = value - self._dict[value] = index - - def __delitem__(self, index): - if isinstance(index, slice): - indices_to_delete = set(self.index(e) for e in self._list[index]) - self._delete_values_by_index(indices_to_delete) - else: - index = self._fix_neg_index(index) - value = self._list[index] - del self._dict[value] - for elem in self._list[index + 1:]: - self._dict[elem] -= 1 - del self._list[index] - - def insert(self, index, value): - """Insert value at index. - - Args: - index (int): Index to insert value at - value: Value to insert - Raises: - ValueError: If value already in self - IndexError: If start or end are out of range - """ - if value in self: - raise ValueError - index = self._fix_neg_index(index) - self._dict[value] = index - for elem in self._list[index:]: - self._dict[elem] += 1 - self._list.insert(index, value) - - def append(self, value): - """Append value to the end. - - Args: - value: Value to append - Raises: - ValueError: If value alread in self - TypeError: If value isn't hashable - """ - self._append(value) - - def extend(self, values): - """Append all values to the end. - - If any of the values are present, ValueError will - be raised and none of the values will be appended. - - Args: - values (Iterable): Values to append - Raises: - ValueError: If any values are already present or there are duplicates - in the passed values. - TypeError: If any of the values aren't hashable. - """ - self._extend(values) - - def __iadd__(self, values): - """Add all values to the end of self. - - Args: - values (Iterable): Values to append - Raises: - ValueError: If any values are already present - """ - self._check_type(values, '+=') - self.extend(values) - return self - - def remove(self, value): - """Remove value from self. - - Args: - value: Element to remove from self - Raises: - ValueError: if element is already present - """ - try: - index = self._dict[value] - except KeyError: - raise ValueError('Value "%s" is not present.') - else: - del self[index] - - def remove_all(self, elems_to_delete): - """Remove all elements from elems_to_delete, raises ValueErrors. - - See Also: - discard_all - Args: - elems_to_delete (Iterable): Elements to remove. - Raises: - ValueError: If the count of any element is greater in - elems_to_delete than self. - TypeError: If any of the values aren't hashable. - """ - self._delete_all(elems_to_delete, raise_errors=True) - - # Implement MutableSet - - def add(self, item): - """Add an item. - - Note: - This does not raise a ValueError for an already present value like - append does. This is to match the behavior of set.add - Args: - item: Item to add - Raises: - TypeError: If item isn't hashable. - """ - self._add(item) - - def update(self, values): - """Add all values to the end. - - If any of the values are present, silently ignore - them (as opposed to extend which raises an Error). - - See also: - extend - Args: - values (Iterable): Values to add - Raises: - TypeError: If any of the values are unhashable. - """ - self._update(values) - - def discard_all(self, elems_to_delete): - """Discard all the elements from elems_to_delete. - - This is much faster than removing them one by one. - This runs in O(len(self) + len(elems_to_delete)) - - Args: - elems_to_delete (Iterable): Elements to discard. - Raises: - TypeError: If any of the values aren't hashable. - """ - self._delete_all(elems_to_delete, raise_errors=False) - - def discard(self, value): - """Discard an item. - - Note: - This does not raise a ValueError for a missing value like remove does. - This is to match the behavior of set.discard - """ - try: - self.remove(value) - except ValueError: - pass - - def difference_update(self, other): - """Update self to include only the differene with other.""" - other = set(other) - indices_to_delete = set() - for i, elem in enumerate(self): - if elem in other: - indices_to_delete.add(i) - if indices_to_delete: - self._delete_values_by_index(indices_to_delete) - - def intersection_update(self, other): - """Update self to include only the intersection with other.""" - other = set(other) - indices_to_delete = set() - for i, elem in enumerate(self): - if elem not in other: - indices_to_delete.add(i) - if indices_to_delete: - self._delete_values_by_index(indices_to_delete) - - def symmetric_difference_update(self, other): - """Update self to include only the symmetric difference with other.""" - other = setlist(other) - indices_to_delete = set() - for i, item in enumerate(self): - if item in other: - indices_to_delete.add(i) - for item in other: - self.add(item) - self._delete_values_by_index(indices_to_delete) - - def __isub__(self, other): - self._check_type(other, '-=') - self.difference_update(other) - return self - - def __iand__(self, other): - self._check_type(other, '&=') - self.intersection_update(other) - return self - - def __ior__(self, other): - self._check_type(other, '|=') - self.update(other) - return self - - def __ixor__(self, other): - self._check_type(other, '^=') - self.symmetric_difference_update(other) - return self - - # New methods - def shuffle(self, random=None): - """Shuffle all of the elements in self randomly.""" - random_.shuffle(self._list, random=random) - for i, elem in enumerate(self._list): - self._dict[elem] = i - - def sort(self, *args, **kwargs): - """Sort this setlist in place.""" - self._list.sort(*args, **kwargs) - for index, value in enumerate(self._list): - self._dict[value] = index - - -class frozensetlist(_basesetlist, Hashable): - """An immutable (hashable) setlist.""" - - def __hash__(self): - if not hasattr(self, '_hash_value'): - self._hash_value = _util.hash_iterable(self) - return self._hash_value diff --git a/appveyor.yml b/appveyor.yml index a36537ac..86182c1f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,27 +2,28 @@ version: '{build}' pull_requests: do_not_increment_build_number: true environment: - ProjectVersion: build$(APPVEYOR_BUILD_VERSION) matrix: - - PYTHON: C:\PYTHON36 + - PYTHON: "C:\\Python37-x64\\python.exe" + PYTHON_VERSION: "3.7" + + - PYTHON: "C:\\Python38-x64\\python.exe" + PYTHON_VERSION: "3.8" install: - - ps: 'if(Test-Path env:APPVEYOR_REPO_TAG_NAME) {$env:ProjectVersion=$env:APPVEYOR_REPO_TAG_NAME}' - - '%PYTHON%\python.exe --version' - - '%PYTHON%\Scripts\pip install pyinstaller' - - '%PYTHON%\Scripts\pip install markdown' - - '%PYTHON%\python.exe -m markdown README.md > README.html' - - '%PYTHON%\Scripts\pyinstaller bundle\EntranceRandomizer.spec' - - 'mkdir dist\EntranceRandomizer\ext' - - 'move dist\EntranceRandomizer\*.pyd dist\EntranceRandomizer\ext' - - 'move dist\EntranceRandomizer\tcl*.dll dist\EntranceRandomizer\ext' - - 'move dist\EntranceRandomizer\tk*.dll dist\EntranceRandomizer\ext' - - ps: '$env:ER_Version= &"$env:PYTHON\python.exe" -c "import Main; import re; print(re.match(''[0-9]+\\.[0-9]+\\.[0-9]+'',Main.__version__).group(0))"' - - '"%WIX%\bin\heat.exe" dir "dist\EntranceRandomizer" -sfrag -srd -suid -dr INSTALLDIR -cg ERFiles -ag -template fragment -t bundle\components.xslt -out build\components.wxs' - - '"%WIX%\bin\candle.exe" -out build\ bundle\*.wxs build\*.wxs' - - '"%WIX%\bin\light.exe" -ext WixUIExtension build\*.wixobj -o dist\EntranceRandomizer-Installer-%ProjectVersion%-win32.msi -b dist\EntranceRandomizer' -build: off + - cmd: "%PYTHON% -m pip install --upgrade pip" + - cmd: "%PYTHON% -m pip install -r requirements.txt --upgrade" + - cmd: "%PYTHON% -m pip install --upgrade cx_Freeze" +build_script: + - cmd: "%PYTHON% setup.py build_exe" artifacts: -- path: dist/EntranceRandomizer*.msi - name: EntranceRandomizer-Installer-$(ProjectVersion)-win32.msi -- path: dist/EntranceRandomizer/ - name: EntranceRandomizer-Raw-$(ProjectVersion)-win32.zip + - path: "build\\exe.win-amd64-%PYTHON_VERSION%\\" + name: "Berserker_Multiworld_%APPVEYOR_REPO_BRANCH%_Python%PYTHON_VERSION%-x64" +deploy: + description: 'Appveyor automated build' + provider: GitHub + auth_token: + secure: +cRWefLphFutZuzCcCsNS0tl7nNj/IpnJmfht6hZFh2z9eQdFgcu6zwGS3lWItat + artifact: /.*\.zip/ + draft: false + prerelease: false + on: + APPVEYOR_REPO_TAG: true # deploy on tag push only \ No newline at end of file diff --git a/bundle/EntranceRandomizer.spec b/bundle/EntranceRandomizer.spec deleted file mode 100644 index 308a3ba9..00000000 --- a/bundle/EntranceRandomizer.spec +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: python -*- -from PyInstaller.compat import is_win -block_cipher = None - -# Todo: the runtime hooks should only be installed on windows -a = Analysis(['../EntranceRandomizer.py'], - pathex=['bundle'], - binaries=[], - datas=[('../data/', 'data/'), ('../README.html', '.')], - hiddenimports=[], - hookspath=[], - runtime_hooks=['bundle/_rt_hook.py'], - excludes=['lzma', 'bz2'], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) - -exe = EXE(pyz, - a.scripts, - exclude_binaries=True, - name='EntranceRandomizer', - debug=False, - strip=False, - upx=False, - icon='../data/ER.ico', - console=is_win ) -coll = COLLECT(exe, - a.binaries, - a.zipfiles, - a.datas, - strip=False, - upx=False, - name='EntranceRandomizer') -app = BUNDLE(coll, - name ='EntranceRandomizer.app', - icon = '../data/ER.icns', - bundle_identifier = None) diff --git a/bundle/_rt_hook.py b/bundle/_rt_hook.py deleted file mode 100644 index 17ea446b..00000000 --- a/bundle/_rt_hook.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -import os - -sys.path.append(os.path.join(sys._MEIPASS, "ext")) diff --git a/bundle/components.xslt b/bundle/components.xslt deleted file mode 100644 index 1b4c7132..00000000 --- a/bundle/components.xslt +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundle/installer.wxs b/bundle/installer.wxs deleted file mode 100644 index f5d111d7..00000000 --- a/bundle/installer.wxs +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - INSTALLDIR - - - - - 1 - 1 - - - diff --git a/data/base2current_extendedmsu.json b/data/base2current_extendedmsu.json new file mode 100644 index 00000000..58854124 --- /dev/null +++ b/data/base2current_extendedmsu.json @@ -0,0 +1 @@ +[{"35":[92,0,136,161]},{"47":[34,0,255,161,234]},{"87":[0]},{"89":[161]},{"99":[192]},{"127":[179]},{"155":[164]},{"204":[92,70,128,161]},{"215":[92,122,225,160,234]},{"221":[43]},{"257":[43]},{"827":[128,1]},{"980":[92,162,133,164]},{"2027":[128,50]},{"2379":[34,214,129,160]},{"2385":[162,2,0]},{"2404":[234,234,234]},{"2414":[234,234,234]},{"2424":[234,234,234]},{"2434":[234,234,234]},{"2444":[234,234,234]},{"2456":[34,68,179,164]},{"2561":[165,188]},{"3097":[34,125,132,164,234]},{"4993":[2]},{"5002":[184]},{"5011":[164]},{"20581":[49]},{"20594":[51]},{"20636":[49,49]},{"20804":[168]},{"20817":[144]},{"20859":[160,176]},{"21027":[0]},{"21040":[0]},{"21082":[0,0]},{"21809":[92,245,199,160]},{"21847":[34,205,200,160,234]},{"21854":[34,204,151]},{"21858":[234,234]},{"23454":[63]},{"23562":[63]},{"24418":[92,164,253]},{"24422":[234,234]},{"25951":[32]},{"26189":[92,55,253,160,96,234]},{"27785":[160]},{"27789":[160]},{"27884":[160]},{"27887":[176]},{"30972":[222,163,160]},{"30994":[96,164,160]},{"31001":[222,163,160]},{"31011":[96,164,160]},{"31046":[4,188,164]},{"31102":[34,75,154,160,234,234,234,234,234,234]},{"32725":[48]},{"32727":[11,5]},{"50088":[235,187,164]},{"50445":[191,80,128,48]},{"50965":[191,80,128,48]},{"51006":[34,146,199,160,234,234,234,234]},{"51019":[234,234]},{"51027":[0]},{"53095":[34,136,188,164]},{"59775":[1,8]},{"59778":[1,7]},{"60395":[92,174,150,164,234]},{"60423":[34,33,194,164]},{"60790":[7,189,164]},{"61077":[151,181,160]},{"61133":[34,231,196,160,234]},{"62723":[34,52,132,160]},{"65511":[34,201,239,160]},{"65607":[213,238,160]},{"65778":[34,38,143,160,234,234]},{"65879":[34,210,194,160,234]},{"65894":[34,0,195,160]},{"66284":[34,35,195,160]},{"66292":[92,253,246,160]},{"66579":[234,234,234,234,234,234,34,165,128,160,208]},{"66710":[92,203,241,160]},{"67552":[34,126,128,164,234,234,234,234,234]},{"67579":[34,213,130,164]},{"67619":[34,143,128,160]},{"67793":[34,152,189,164,234,234]},{"67934":[68,249,160]},{"68474":[34,64,224]},{"68496":[15,240]},{"68499":[208,6,234]},{"68584":[72,249,160]},{"69737":[34,150,224]},{"69777":[15,240]},{"69780":[208,4,234]},{"70410":[72,249,160]},{"71576":[234,234,234,234,234,234]},{"71853":[34,246,246,160,234]},{"72216":[189,187,164]},{"72241":[34,0,195,160]},{"72246":[102,154,160]},{"73041":[34,98,155,160]},{"73263":[204,238,160]},{"73340":[34,241,128,160,234]},{"73937":[34,16,195,160]},{"74833":[34,213,130,164]},{"76178":[234,234]},{"76208":[234,234]},{"76423":[34,206,239,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"77216":[34,189,248,160,234]},{"78139":[247,160]},{"78172":[34,51,189,164,34,75,154,160,234,234]},{"79603":[34,241,187,164]},{"79767":[34,167,189,164]},{"82376":[234,234]},{"82676":[72,249,160]},{"87784":[234,234,234]},{"87892":[34,211,246,160,234,234,234,234,234]},{"88488":[4]},{"88505":[34,8,241,160]},{"90651":[34,44,238,160,234,234]},{"93230":[34,238,157,164,234,234]},{"93325":[34,170,156,164,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"93521":[34,238,157,164,234,234]},{"97647":[34,122,129,160,107]},{"97776":[34,146,129,160,96]},{"130070":[177,198,249,201,198,249]},{"157614":[34,205,156,164]},{"166195":[5]},{"166200":[1]},{"166205":[7]},{"166325":[107,194,164]},{"166331":[34,98,155,160]},{"167201":[4]},{"167203":[252]},{"167207":[254]},{"173045":[218,181,160]},{"173058":[218,181,160]},{"173307":[218,181,160]},{"173320":[218,181,160]},{"183384":[34,179,248,160,234]},{"186959":[80]},{"186977":[80]},{"187009":[80]},{"187802":[34,98,155,160]},{"187902":[34,121,155,160]},{"188153":[0]},{"188234":[86,238,160]},{"188261":[34,143,130,164,96]},{"188337":[34,80,152,160]},{"188959":[34,87,237,160,128,13]},{"189655":[34,135,196,160,234,234]},{"190938":[0]},{"190954":[64]},{"190970":[0]},{"190986":[64]},{"191002":[0]},{"191018":[0]},{"191034":[64]},{"191050":[64]},{"191262":[50,194,164]},{"191439":[34,164,197,160,234,234]},{"191760":[234,234,234,234,234]},{"191967":[34,184,197,160,234,234]},{"192037":[34,121,155,160]},{"192083":[34,111,143,160,234,234]},{"192095":[34,204,195,160,234]},{"192121":[36,196,160]},{"192140":[34,78,144,160,234]},{"192151":[234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"192286":[34,107,133,160]},{"192350":[195,133,160]},{"192378":[11,133,160]},{"192463":[198,132,160]},{"192506":[34,126,133,160,234,234,234,234,234,234]},{"192561":[216,132,160]},{"192650":[34,126,132,160,176,24,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"192877":[0,128,162]},{"192887":[34,97,143,160]},{"192893":[34,121,155,160]},{"192937":[0,128,162]},{"192957":[0,128,162]},{"192975":[0,128,162]},{"192985":[0,128,162]},{"193014":[34,98,155,160]},{"193025":[11,144,160]},{"193033":[34,98,155,160]},{"193140":[34,133,179,160]},{"193157":[34,126,179,160]},{"193440":[34,169,220,160]},{"193472":[236,236,160]},{"193546":[34,169,220,160]},{"193578":[180,236,160]},{"193854":[34,120,143,160]},{"193859":[32]},{"193888":[76,195,160]},{"194141":[34,60,196,160,234,234,234,234,234]},{"194177":[34,162,195,160,96,234,234,234,234,234,234,234,234]},{"195214":[92,87,237,160]},{"195327":[34,31,143,160,240,2,96,234]},{"195539":[34,162,199,160]},{"195589":[208,176,160]},{"195710":[34,230,176,160,234,234,234,234,234]},{"195735":[234,234,234,234,234,234]},{"195743":[162,176,160]},{"195909":[172,176,160]},{"196477":[34,121,155,160]},{"196497":[34,98,155,160]},{"197750":[35,193,160]},{"198721":[34,139,219,160,234,234]},{"198801":[234,234,234,234,234,234,234,234,34,38,187,164]},{"198942":[34,77,156,164]},{"199084":[6,240]},{"199188":[234,234,234,234,234,234,234,234]},{"199596":[34,68,143,160]},{"199659":[34,120,166,160,96,234]},{"199950":[34,104,143,160]},{"199964":[99,176,160]},{"199993":[34,182,176,160]},{"200070":[34,54,143,160]},{"200470":[34,47,143,160]},{"200845":[34,61,143,160,201]},{"200851":[240]},{"200853":[34,61,143,160]},{"200858":[8]},{"200893":[34,68,143,160]},{"201132":[34,0,128,164,234,234]},{"207430":[11]},{"207432":[11]},{"207434":[11]},{"207436":[11]},{"207438":[75]},{"207532":[240]},{"208729":[92,40,199,160,96]},{"208796":[22,244]},{"208799":[41,1,208]},{"208969":[77,143,160]},{"208994":[34,68,143,160,234,234]},{"209010":[139]},{"209098":[240,143,160]},{"209199":[41,247]},{"210057":[92,221,220,160,234,234,234,234]},{"210164":[147,143,160]},{"211413":[213,143,160]},{"212333":[69,194,164]},{"212610":[88,194,164]},{"213139":[27,191,164]},{"213169":[149,133,160]},{"214205":[34,35,181,160]},{"214972":[181,180,160]},{"215101":[48]},{"215190":[3]},{"215429":[3]},{"217490":[34,84,188,164]},{"217579":[34,197,193,160]},{"224597":[34,169,219,160]},{"224693":[34,189,219,160]},{"224710":[34,75,129,164]},{"225501":[34,12,128,164,234,234]},{"225992":[34,154,129,164]},{"226026":[34,203,220,160,234]},{"226304":[34,254,219,160,234]},{"229522":[115]},{"229524":[133,0,156]},{"229529":[173,123,3,208,93]},{"229574":[34,172,239,160]},{"229634":[34,117,192,164]},{"230816":[159,179,160]},{"230955":[159,179,160]},{"233256":[145,153,160]},{"233266":[34,165,128,160]},{"233297":[34,181,239,160,234]},{"233987":[90,187,164]},{"234731":[34,183,187,164]},{"234747":[34,192,239,160]},{"235953":[34,37,133,160,144,3]},{"236024":[67,205,160]},{"236047":[165,193,160]},{"236578":[34,83,134,164]},{"237653":[34,108,133,164,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"237676":[34,0,133,164]},{"237682":[234,175]},{"238447":[234,234,234,234,234]},{"238458":[116,198,160]},{"238498":[34,253,196,160,128,3]},{"238562":[34,64,199,160,240,4,234]},{"238751":[34,63,221,160]},{"238964":[34,63,221,160]},{"239190":[34,63,221,160]},{"239964":[77,189,164]},{"240044":[92,223,156,164]},{"240196":[234,234,234,234,234,234,34,192,128,160,208]},{"241065":[16]},{"241115":[34,31,220,160]},{"241165":[34,31,220,160]},{"241175":[34,235,128,164]},{"241294":[34,31,220,160]},{"241304":[34,235,128,164]},{"241814":[34,31,220,160,24,125,139,176]},{"241869":[81,237,160]},{"241877":[34,31,220,160,24,125,139,176]},{"242942":[34,197,237,160]},{"242973":[255]},{"243003":[255]},{"243060":[34,204,188,164,234]},{"243067":[234,234,34,110,217,160,234]},{"250411":[34,156,128,164,234,234]},{"250420":[34,61,220,160,234]},{"250478":[34,115,220,160,234]},{"259329":[142,1]},{"259373":[144,1,145,1]},{"259455":[144,1]},{"259501":[145,1]},{"261983":[34,29,154,164,96]},{"270714":[201,3,144]},{"271374":[201,3,176]},{"273121":[34,202,242,160,234]},{"273608":[34,31,183,160,76,230,172]},{"275716":[34,3,183,160,234]},{"276202":[34,64,183,160,76,8,183,32,86,248,107]},{"279550":[64]},{"279552":[49,80,127]},{"279585":[92,44,227,160,234]},{"279601":[34,156,128,160,234]},{"279644":[239,133,160,92,15,240,160,234,234]},{"279880":[92,10,195,164]},{"280037":[34,229,235,160,234,234]},{"280055":[234,234,234,234,234]},{"280063":[81,237,160]},{"280106":[92,127,227,160,234]},{"280265":[97,211,160]},{"280287":[97,210,160]},{"280314":[97,211,160]},{"280335":[34,63,180,160]},{"282028":[34,98,156,164,234,234,234,234,234]},{"282124":[92,32,130,164,234,234,234]},{"282393":[34,73,130,164]},{"282569":[107]},{"283541":[34,191,194,160,234,234]},{"285863":[34,27,129,164,234]},{"285881":[34,31,220,160]},{"285891":[34,182,128,164]},{"295207":[34,198,132,164]},{"295219":[34,223,132,164]},{"296429":[34,68,201,160,234]},{"296453":[92,126,194,164,234]},{"296466":[97,212]},{"296471":[98,212]},{"296480":[97,214]},{"296488":[97,212]},{"296493":[98,212]},{"296502":[97,214,34,0,128,160]},{"296583":[34,98,155,160]},{"296619":[97,215]},{"296810":[113,209]},{"296882":[34,194,129,160]},{"296888":[234,234,234]},{"296927":[234,234,234]},{"297038":[145,207]},{"297052":[129,208]},{"297087":[34,71,133,160,234,176]},{"297120":[92,25,227,160,234]},{"297144":[97,210]},{"297200":[145,207]},{"297225":[129,208]},{"297263":[98,216]},{"297292":[34,143,195,160]},{"297309":[105,216]},{"297904":[34,91,129,160,234]},{"301947":[34,126,130,164,234,234,234,234,144]},{"302146":[92,28,195,164,234,234]},{"304330":[240]},{"304340":[240]},{"304350":[240]},{"304360":[240]},{"304370":[240]},{"304380":[240]},{"304390":[240]},{"304400":[240]},{"304410":[240]},{"304420":[240]},{"304430":[240]},{"304440":[240]},{"305387":[5]},{"313527":[189,247]},{"313655":[176]},{"313943":[37]},{"315565":[15,67,255,18,25,22]},{"316450":[15,69,255,18,25,22]},{"324263":[34,193,224,160]},{"324619":[34,123,153,160]},{"324675":[34,182,188,164]},{"324780":[8,8,16]},{"324882":[43]},{"324896":[34,29,238,160,34,158,188,164,234,234,234,234,234,234]},{"324996":[34,16,195,160]},{"325098":[169,2,0,234]},{"325131":[34,77,238,160]},{"325203":[34,155,178,164]},{"325565":[6,31,64,18,1,63,20,1,63,19,31,66,26,31,75,26,32,75,37,45,63,41,32,63,42,60,63]},{"341871":[229,239,160]},{"342245":[34,59,132,160,34,31,188,164,156,0,16,156,1,16,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"342345":[34,54,248,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"343854":[0,1]},{"343880":[50]},{"343898":[50]},{"344082":[234,234,234,234,234,234,234,234,34,121,155,160]},{"344119":[34,121,155,160]},{"344185":[34,121,155,160]},{"344248":[34,121,155,160]},{"344312":[34,121,155,160]},{"344375":[34,121,155,160]},{"344441":[34,121,155,160]},{"344499":[34,121,155,160]},{"344565":[34,121,155,160]},{"344623":[34,121,155,160]},{"344689":[34,121,155,160]},{"344747":[34,121,155,160]},{"344813":[34,121,155,160]},{"344871":[34,121,155,160]},{"344937":[34,121,155,160]},{"345406":[34,151,154,160]},{"345531":[34,170,154,160,96]},{"345560":[34,170,154,160,96]},{"393133":[235,187,164]},{"409856":[34,210,227,160]},{"410028":[94,255,161]},{"410347":[34,155,178,164]},{"412057":[234,234,234,234]},{"412775":[66,0,0,175]},{"412810":[162,239,160]},{"412876":[92,105,178,164]},{"413015":[107]},{"413094":[126,148,164]},{"413109":[34,249,237,160]},{"413141":[34,142,145,164,234,234,234,234,234,234,234,234]},{"413199":[234,234,234,234,234,234,234,234,234]},{"413249":[34,35,149,164,234,234,234,234]},{"413264":[34,74,149,164,234,234,234,234,234,234]},{"413297":[92,113,149,164,234]},{"413317":[234,234,234,234]},{"413448":[34,204,178,164]},{"414010":[76,29]},{"414014":[104]},{"414018":[105]},{"414022":[130]},{"414026":[136,1]},{"414032":[92,29]},{"414036":[120]},{"414040":[121]},{"414044":[146]},{"414048":[136,1]},{"414472":[66,0,0]},{"414504":[77]},{"414506":[78,29,101]},{"414510":[78,29,109]},{"414514":[78,29,136,1]},{"414522":[136,1]},{"414526":[136,1]},{"414532":[93]},{"414534":[94,29,117]},{"414538":[94,29,125]},{"414542":[94,29,136,1]},{"414550":[136,1]},{"414554":[136,1]},{"414611":[34,142,145,164,234,234,234,234,234,234,234,234]},{"414774":[68]},{"414776":[36]},{"414790":[128]},{"414947":[34,106,178,164,128,18,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"414988":[204]},{"414990":[74,1,202,1,42]},{"414996":[146,1,18,1]},{"415015":[34,251,137,164,234]},{"415036":[66]},{"415040":[234,234]},{"415090":[64]},{"415102":[61]},{"415421":[81]},{"415659":[34,106,178,164]},{"415678":[34,163,149,164]},{"416378":[22,150,164]},{"416491":[34,237,149,164,234]},{"416529":[34,200,149,164]},{"416588":[234,234,234,234]},{"416912":[34,228,149,164]},{"416937":[34,214,149,164]},{"417380":[136,1]},{"417384":[136,1]},{"417388":[136,1]},{"417392":[136,1]},{"417396":[136,1]},{"417400":[136,1]},{"417406":[136,1]},{"417410":[136,1]},{"417414":[136,1]},{"417418":[136,1]},{"417422":[136,1]},{"417426":[136,1]},{"417432":[77]},{"417434":[78,29,101]},{"417438":[78,29,109]},{"417442":[78,29,136,1,79,29,98]},{"417450":[101,29,78]},{"417456":[136,1]},{"417462":[93]},{"417464":[94,29,117]},{"417468":[94,29,125]},{"417472":[94,29,136,1,95,29,114]},{"417480":[117,29,94]},{"417486":[136,1]},{"417798":[77]},{"417800":[78,29,101]},{"417804":[78,29,109]},{"417808":[78,29,136,1,79,29,98]},{"417816":[101,29,78]},{"417822":[139]},{"417826":[136,1]},{"417836":[93]},{"417838":[94,29,117]},{"417842":[94,29,125]},{"417846":[94,29,136,1,95,29,114]},{"417854":[117,29,94]},{"417860":[155]},{"417864":[136,1]},{"417870":[136,1]},{"417874":[136,1]},{"417878":[136,1]},{"417882":[136,1]},{"417886":[136,1]},{"417890":[136,1]},{"417894":[136,1]},{"417898":[136,1]},{"417902":[136,1]},{"417906":[136,1]},{"417910":[136,1]},{"417914":[136,1]},{"417918":[136,1]},{"417924":[136,1]},{"417928":[136,1]},{"417932":[136,1]},{"417936":[136,1]},{"417940":[136,1]},{"417944":[136,1]},{"417948":[136,1]},{"417952":[136,1]},{"417956":[136,1]},{"417960":[136,1]},{"417964":[136,1]},{"417968":[136,1]},{"417972":[136,1]},{"417978":[76,29,74,29,103,29,76,29,78,29,101,29,136,1]},{"417996":[136,1]},{"418000":[136,1]},{"418004":[136,1]},{"418010":[92,29,90,29,119,29,92,29,94,29,117,29,136,1]},{"418028":[136,1]},{"418032":[136,1]},{"418036":[136,1]},{"418348":[136,1,76,29,104]},{"418354":[105,29,130]},{"418360":[79]},{"418362":[98,29,101]},{"418366":[78,29,136,1]},{"418382":[136,1,92,29,120]},{"418388":[121,29,146]},{"418394":[95]},{"418396":[114,29,117]},{"418400":[94,29,136,1]},{"418458":[76,29]},{"418462":[74,29]},{"418466":[103,29]},{"418470":[76,29]},{"418474":[78,29,136,1,101,29,136,1]},{"418484":[136,1]},{"418490":[92,29]},{"418494":[90,29]},{"418498":[119,29]},{"418502":[92,29]},{"418506":[94,29,136,1,117,29,136,1]},{"418516":[136,1]},{"418523":[128,13,97,13,98,13,76,13,97,13,134,13,136,1]},{"418541":[144,13,113,13,114,13,92,13,113,13,150,13,136,1]},{"418716":[128,13,97,13,78,13,107,13,78,13,134,13,136,1]},{"418734":[144,13,113,13,94,13,123,13,94,13,150,13,136,1]},{"418842":[9]},{"418848":[9]},{"418854":[9]},{"418860":[9]},{"418866":[9]},{"418872":[9]},{"418874":[44]},{"418878":[73]},{"418880":[73]},{"418882":[73]},{"418884":[73]},{"418886":[201]},{"418888":[45]},{"418890":[30]},{"418892":[9]},{"418898":[9]},{"418900":[9]},{"418902":[9]},{"418904":[9]},{"418906":[137]},{"418908":[77]},{"418910":[30,128,9]},{"418914":[109]},{"418916":[30,128,9]},{"418920":[141]},{"418922":[30,128,9]},{"418926":[173]},{"418928":[30]},{"418930":[137]},{"418936":[73]},{"418942":[9]},{"418948":[9]},{"418954":[73]},{"418960":[9]},{"418966":[201]},{"418972":[137]},{"418978":[137]},{"418984":[9]},{"418986":[9]},{"418988":[9]},{"418990":[9]},{"418992":[9]},{"418994":[9]},{"418996":[9]},{"418998":[9]},{"419004":[9]},{"419006":[9]},{"419008":[9]},{"419010":[9]},{"419012":[9]},{"419014":[9]},{"419016":[9]},{"419018":[9]},{"419024":[5]},{"421983":[43]},{"422780":[254,242,160,234,234]},{"436680":[165,2,105,0]},{"439171":[7]},{"439312":[75]},{"443170":[7]},{"444489":[34,121,155,160]},{"449502":[34,110,189,164,234,234,234,234,234,234]},{"449516":[16,39]},{"449521":[15,39]},{"449575":[34,35]},{"449578":[160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"449609":[34,65]},{"449612":[160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"449691":[34,14,243,160,234,234,234,234,234,234]},{"450109":[128]},{"450137":[34,135,155,160,96]},{"450208":[4]},{"450227":[34,180,132,164]},{"450334":[34,218,155,160]},{"450360":[34,91,183,160,144]},{"450366":[76,136,223,32,70,227,107,234,234,234]},{"450458":[34,199,184,160,234]},{"450492":[34,186,155,160,234,234,234]},{"450861":[34,221,184,160]},{"451151":[242]},{"451157":[244]},{"451163":[50,18]},{"451169":[52,18]},{"451292":[76,241,226]},{"451485":[34,240,132,164]},{"451775":[34,209,132,164]},{"452340":[128]},{"452537":[34,77,156,160,234]},{"452559":[34,59,156,160,234]},{"452581":[34,95,156,160,234]},{"452634":[96]},{"453064":[34,122,160,160,96]},{"453452":[242]},{"453458":[244]},{"453464":[50,18]},{"453470":[52,18]},{"453536":[128]},{"453538":[126,0]},{"453542":[64]},{"453546":[34,221,193,160,234,234,76,230,236]},{"453867":[34,113,156,160,234]},{"453892":[34,131,156,160]},{"454092":[34,236,155,160,234,234,234,234,234]},{"454233":[34,236,155,160,234,234,234,234,234]},{"454256":[34,69,195,160,234]},{"454282":[34,236,155,160,234,234,234,234,234]},{"454459":[34,236,155,160,234,234,234,234,234]},{"456591":[19]},{"456599":[18]},{"456607":[20]},{"456631":[21]},{"456871":[75,60]},{"456879":[79,44]},{"456887":[47,36]},{"457299":[34,243,131,160]},{"457344":[34,125,154,160,234,234,234,234]},{"457367":[176,134]},{"457374":[33]},{"457503":[34,138,217,160]},{"457513":[34,176,217,160,128,18,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"457783":[34,163,196,160,128,15,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,92,13,238,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,226,48,162,255]},{"477379":[55]},{"478834":[71]},{"478858":[7]},{"478866":[7]},{"478882":[71]},{"478890":[7]},{"478906":[71]},{"479162":[118]},{"480090":[55]},{"480098":[55]},{"480106":[55]},{"480851":[9]},{"480868":[0]},{"484946":[74,179,35]},{"485100":[34,227,227,160]},{"485416":[34,156,175,35,183,124,234]},{"485439":[183,124,234]},{"485459":[183,124,234]},{"485466":[34,163,179,35]},{"485485":[34,178,176,35,76,253,232]},{"486667":[34,187,131,164,234,234]},{"486677":[34,187,131,164,234,234]},{"486698":[34,200,131,164,234,234]},{"486832":[172,179,35]},{"486873":[34,192,179,35]},{"487006":[221,235,160]},{"487403":[169,2,0,234]},{"487935":[34,11,228,160]},{"488156":[34,11,228,160]},{"488213":[34,11,228,160]},{"488242":[34,11,228,160]},{"488309":[34,11,228,160]},{"488340":[34,11,228,160]},{"488721":[34,11,228,160]},{"489560":[34,11,228,160]},{"490022":[34,11,228,160]},{"490060":[34,11,228,160]},{"490164":[34,11,228,160]},{"490184":[34,11,228,160]},{"490209":[34,11,228,160]},{"490257":[34,11,228,160]},{"490438":[34,27,228,160,96]},{"561458":[12]},{"561460":[30]},{"561462":[63]},{"561464":[127]},{"561466":[127]},{"561468":[63]},{"561470":[19]},{"561473":[12,18,45,94,82,46,19,0]},{"561482":[112]},{"561484":[248,0,252,0,238,0,254,0,254,0,252,0,0,112,136,116,234,154,234,100]},{"561840":[7]},{"561842":[15]},{"561844":[10]},{"561846":[9,1,12,4,7,3,3]},{"561856":[5,8,13,14,11,4,3]},{"561864":[184,0,120,96,254,192,62,0,127,0,254]},{"561876":[254]},{"561878":[8]},{"561880":[248,144,28,246,162,54,220]},{"859925":[0,43]},{"882113":[34,156,156,164]},{"883347":[15]},{"883371":[15]},{"883395":[15]},{"883419":[15]},{"883443":[15]},{"883467":[15]},{"883789":[34,36,132,160]},{"883797":[234,234,234,234,234,234]},{"899214":[92,9,242,160]},{"900244":[34,93,240,160,208,39,234,234,234,234,234,234]},{"900357":[92,84,242,160,234]},{"900437":[92,238,240,160,234]},{"900447":[34,197,246,160,234,234,234]},{"900458":[34,241,187,164]},{"901799":[34,110,153,164,107,32,222,201,107]},{"903876":[34,150,242,160,208,3,107,234,234]},{"912889":[34,27,128,191,107,234]},{"912923":[34]},{"912925":[128,191,107]},{"917533":[188,170,191,174,201,172,184,183,189,178,183,190,174,248,188,170,191,174,201,186,190,178,189,249,172,184,183,189,178,183,190,174,251]},{"917567":[223]},{"917575":[223]},{"917582":[223]},{"917590":[223]},{"917596":[172,170,183,216,189,255,194,184,190]},{"917606":[189,170,180,174,248,182,174,255,188,184,182,174]},{"917619":[185,181,170,172,174,249,183,178,172,174,205,251,252,0,247,228,248,255,249]},{"917639":[254,113,251,252,0,247,255,248,228,249,255,254,113,251,252,0,247,255,248]},{"917659":[249]},{"917662":[113]},{"917664":[252,0,247,228,248,255,254,114,251,252,0,247,255,248,228,254,114,251,178,216,182,255,179,190,188,189,255,176,184,178,183,176,248,184,190,189,255,175,184,187,255,170,255,185,170,172,180,249,184,175,255,188,182,184,180,174,188,205,251,254,110,0,254,107,4,251,184,183,181,194,255,170,173,190,181,189,188,248,188,177,184,190,181,173,255,189,187,170,191,174,181,249,170,189,255,183,178,176,177,189,205,251,194,184,190,255,172,170,183,255,185,187,174,188,188,248,193,255,189,184,255,188,174,174,255,189,177,174,249,182,170,185,205,251,185,187,174,188,188,255,189,177,174,255,170,248,171,190,189,189,184,183,255,189,184,255,181,178,175,189,249,189,177,178,183,176,188,255,171,194,255,194,184,190,205,251,192,177,174,183,255,194,184,190,255,177,170,188,255,170,248,188,192,184,187,173,200,255,185,187,174,188,188,255,171,249,189,184,255,188,181,170,188,177,255,178,189,205,251,12,36,131,154,99,255,117,40,113,124,95,110,54,20,251,170,187,174,255,192,174,255,187,174,170,181,181,194,248,188,189,178,181,181,255,187,174,170,173,178,183,176,249,189,177,174,188,174,198,251,179,174,174,195,174,199,255,189,177,174,187,174,248,187,174,170,181,181,194,255,170,187,174,255,170,249,181,184,189,255,184,175,255,189,177,178,183,176,188,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"917988":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,189,177,174,194,255,189,184,184,180,255,177,174,187,248,189,184,255,189,177,174,255,172,170,188,189,181,174,199,249,189,170,180,174,255,194,184,190,187,250,246,188,192,184,187,173,255,170,183,173,255,188,170,191,174,246,177,174,187,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,252,6,178,216,182,255,178,183,255,189,177,174,248,172,170,188,189,181,174,249,171,170,188,174,182,174,183,189,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,252,6,177,178,255,254,106,200,248,177,170,191,174,255,194,184,190,255,171,174,174,183,249,189,177,178,183,180,178,183,176,255,170,171,184,190,189,250,246,182,174,198,246,170,187,187,187,187,187,176,176,177,177,204,246,204,255,204,255,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,177,174,194,170,200,255,254,106]},{"918267":[181,184,183,176,255,189,178,182,174,255,183,184,249,188,174,174,205,250,246,194,184,190,255,192,170,183,189,255,170,246,182,170,188,189,174,187,255,188,192,184,187,173,198,246,250,246,192,174,181,181,255,176,184,184,173,255,181,190,172,180,246,192,178,189,177,255,189,177,170,189,205,251,178,189,255,184,172,172,190,187,188,255,189,184,248,182,174,255,189,177,170,189,255,178,255,181,178,180,174,249,189,184,170,188,189,255,170,183,173,255,179,170,182,200,250,246,171,190,189,255,172,177,174,174,188,174,255,170,183,173,246,172,187,170,172,180,174,187,188,255,178,188,246,171,174,189,189,174,187,205,250,246,194,184,190,255,181,178,180,174,198,246]},{"918430":[255,228,255,172,177,174,174,188,174,246,255,255,255,255,179,170,182,254,104,251,170,183,194,192,177,184,200,255,178,255,177,170,191,174,248,189,177,178,183,176,188,255,189,184,255,173,184,205,249,194,184,190,255,188,174,174,255,189,177,184,188,174,250,246,162,255,184,191,174,183,188,198,246,246,194,174,170,177,200,255,162,199,250,246,192,177,184,255,177,170,188,255,162,246,184,191,174,183,188,246,183,184,192,170,173,170,194,188,198,199,251,172,184,184,181,255,188,192,184,187,173,199,248,249,250,246,204,246,246,250,246,204,246,246,250,246,185,181,174,170,188,174]},{"918573":[188,170,191,174,255,190,188,251,176,190,170,187,173,188,199,255,177,174,181,185,199,248,189,177,174]},{"918599":[172,187,174,174,185,174,187,249,254,106,255,178,188,255,177,174,187,174,199,251,254,109,1,172,184,184,181,255,171,174,170,183,188,200,248,171,190,189,255,178,255,189,177,178,183,180,249,194,184,190,255,188,177,184,190,181,173,250,246,182,184,188,174,194,255,184,183,255,184,191,174,187,246,189,184,255,189,177,174,255,181,184,188,189,246,192,184,184,173,188,205,251,254,110,0,254,107,4,251,254,109,1,188,170,177,170,188,187,170,177,181,170,200,255,178,248,170,182,205,255,194,184,190,255,192,184,190,181,173,249,173,184,255,192,174,181,181,255,189,184,250,246,175,178,183,173,255,189,177,174,255,163,246,185,174,183,173,170,183,189,188,255,175,187,184,182,246,189,177,174,255,163,255,173,190,183,176,174,184,183,188,250,246,178,183,255,189,177,174,255,181,178,176,177,189,246,192,184,187,181,173,205,246,190,183,173,174,187,188,189,170,183,173,198,250,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,254,110,0,254,107,4,251,254,109,1,181,178,180,174,200,255,178,255,188,178,189,248,177,174,187,174,200]},{"918860":[170,183,173,255,189,174,181,181,249,194,184,190,255,192,177,170,189,255,189,184,250,246,173,184,198,246,246,250,246,170,181,187,178,176,177,189,200,255,176,184,246,170,183,173,255,175,178,183,173,255,170,181,181,246,189,177,174,255,182,170,178,173,174,183,188,200,250,246,189,177,174,187,174,255,170,187,174,200,246,181,178,180,174,200,255,182,170,194,171,174,255,167,246,184,175,255,189,177,174,182,205,255,178,250,246,173,190,183,183,184,255,170,183,194,182,184,187,174,205,246,178,216,182,255,184,181,173,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,224,255,173,194,178,183,176,255,190,183,172,181,174,248,255,255,189,177,178,188,255,192,170,194,204,251,210,211]},{"919053":[187,170,183,173,184,182,178,195,174,187,248,189,177,174,255,189,174,181,174,185,170,189,177,178,172,249,189,178,181,174,188,255,172,170,183,255,177,170,191,174,250,246,177,178,183,189,188,199,251,172,170,191,174,255,189,184]},{"919110":[181,184,188,189,200,248,184,181,173,255,182,170,183,205,249,176,184,184,173,255,181,190,172,180,205,251,248,224,255,181,184,188,189,255,192,184,184,173,188]},{"919150":[173,170,183,176,174,187,199,248,173,174,174,185,255,192,170,189,174,187,199,249,195,184,187,170,188,199,251,192,174,181,172,184,182,174,255,189,184,255,189,177,174,248,182,170,176,178,172,255,188,177,184,185,185,174,251,172,170,191,174,255,170,192,170,194,255,175,187,184,182,248,188,180,194,255,172,170,171,171,170,176,174,188,251,225,255,181,170,180,174,255,177,194,181,178,170,248,249,255,170,181,188,184,200,255,170,255,188,177,184,185,251,227,255,180,170,180,170,187,178,180,184,248,255,255,191,178,181,181,170,176,174,251,227,255,173,174,188,174,187,189,248,249,255,255,255,255,255,178,189,216,188,255,177,184,189,205,251,224,226,255,185,184,189,178,184,183,188,199,248,249,192,178,188,177,255,192,170,189,174,187,175,170,181,181,251,226,255,174,170,188,189,255,185,170,181,170,172,174,248,249,227,255,172,170,188,189,181,174,251,248,255,181,170,180,174,255,255,177,178,187,178,170,177,251,173,184,183,216,189,255,189,170,181,180,255,189,184,248,182,174,255,184,187,255,189,184,190,172,177,255,182,194,249,188,178,176,183,199,251,181,190,182,171,174,187,179,170,172,180,188,200,248,178,183,172,205,249,194,184,190,255,188,174,174,255,216,174,182,200,250,246,192,174,255,188,170,192,255,216,174,182,205,251,225,255,180,170,180,170,187,178,180,184,248,255,255,191,178,181,181,170,176,174,251,173,184,190,171,181,174,200,255,173,184,190,171,181,174,248,189,184,178,181,255,170,183,173,249,189,187,184,190,171,181,174,199,250,246,171,187,178,183,176,255,182,174,255,170,246,182,190,188,177,187,184,184,182,199,251,254,110,0,254,107,4,251,194,184,190,255,176,184,189,255,189,184,248,176,178,191,174,255,182,174,255,189,177,174,249,182,190,188,177,187,184,184,182,200,250,246,183,190,182,185,189,194,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,178,175,255,184,183,181,194,255,194,184,190,248,177,170,173,255,188,184,182,174,189,177,178,183,176,249,189,184,255,185,190,189,255,189,177,170,189,250,246,178,183,200,255,181,178,180,174,255,170,246,171,184,189,189,181,174,204,251,192,177,184,170,200,255,171,190,172,180,184,199,248,183,184,255,174,182,185,189,194,249,171,184,189,189,181,174,188,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0]},{"919706":[107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110]},{"919747":[254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"919793":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"919849":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0]},{"919909":[107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,182,174,189,177,178,183,176,255,178,188,248,182,178,188,188,178,183,176,204,249,189,177,174,255,171,178,176,255,180,174,194,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,192,177,184,170,199,255,178,255,172,170,183,248,189,170,181,180,255,170,176,170,178,183,199,251,194,170,183,180,255,184,183,255,189,177,174,248,185,178,189,172,177,175,184,187,180,255,178,183,249,189,177,174,255,172,174,183,189,174,187,255,184,175,250,246,189,184,192,183,200,255,194,170,255,177,174,170,187,173,246,178,189,255,177]},{"920101":[187,174]},{"920104":[251,176,170,183,184,183,255,178,188,255,188,190,172,177,248,170,255,173,178,183,176,190,188,200,255,183,184,249,184,183,174,255,181,178,180,174,188,255,177,178,182,200,250,246,194,170,255,177,174,170,187,173,255,178,189,246,177,174,187,174,205,251,189,177,174,187,174,255,178,188,255,170,248,185,184,187,189,170,181,255,183,174,170,187,249,189,177,174,255,181,184,188,189,250,246,192,184,184,173,188,200]},{"920206":[194,170,246,177,174,170,187,173,255,178,189,255,177,174,187,174,205,251,190,188,174,255,171,184,182,171,188,255,189,184,248,186,190,178,172,180,181,194,255,180,178,181,181,249,189,177,174,255,177,178,183,184,193,200,255,194,170,250,246,177,174,170,187,173,255,178,189,255,177,174,187,174,205,251,178,255,172,170,183,255,171,187,174,170,189,177,174,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,162,160,255,187,190,185,174,174,188,205,248,165,255,170,187,187,184,192,188]},{"920329":[249,192,178,183,255,187,190,185,174,174,188,199,250,246,192,170,183,189,255,189,184,255,185,181,170,194,198,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,181,174,189,216,188,255,173,184,255,189,177,178,188,199,251,192,177,174,187,174,255,170,187,174,255,194,184,190,248,176,184,178,183,176,198,249,188,189,187,170,178,176,177,189]},{"920419":[190,185,199,251,180,174,174,185,255,185,181,170,194,178,183,176]},{"920436":[248]},{"920441":[194,174,188,249,255]},{"920449":[183,184,254,104,251,201,192,178,188,177,178,183,176,255,185,184,183,173,201,248,249,255,184,183,255,191,170,172,170,189,178,184,183,251,185,178,172,180,255,188,184,182,174,189,177,178,183,176,248,189,184,255,189,177,187,184,192,255,178,183,205,254,105,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,194,184,190,255,188,190,187,174,198,248,255,255,228,255,184,177,255,194,174,170,177,249,255,255,255,255,190,182,254,104,251,192,174,181,181,200,255,178,255,173,184,183,216,189,248,192,170,183,189,255,178,189,200,255,188,184,249,189,170,180,174,255,178,189,255,171,170,172,180,205,251,254,110,0,254,107,4,251,178,255,176,187,170,183,189]},{"920613":[194,184,190,248,189,177,174,255,170,171,178,181,178,189,194,255,189,184,249,171,181,184,172,180,250,246,175,178,187,174,171,170,181,181,188,205,246,173,184,183,216,189,255,181,184,188,174,246,189,177,178,188,255,189,184,255,170,250,246,185,178,180,178,189,199,251,188,184,200,255,192,184,190,181,173,183,216,189,248,178,189,255,171,174,255,183,178,172,174,255,189,184,249,180,178,181,181]},{"920711":[176,170,183,184,183,198,250,246,189,177,174,188,174,255,188,177,184,190,181,173,246,177,174,181,185,255,178,183,255,189,177,174,246,175,178,183,170,181,255,185,177,170,188,174,205,251,171,184,189,189,181,174,255,175,178,181,181,174,173,199,248,182,184,183,174,194,255,188,170,191,174,173,199,251,189,177,170,183,180,255,194,184,190,255,175,184,187,248,189,177,174]},{"920803":[188,192,184,187,173,200,249,177,174,187,174,255,178,188,255,170,250,246,188,189,178,172,180,255,184,175,246,171,190,189,189,174,187,205,251,177,170,185,185,178,183,174,188,188,255,190,185,199,248,194,184,190,255,170,187,174,255,183,184,192,249,254,108,1,254,108,0,255,177,170,185,185,194,199,251,194,184,190,187,255,192,178,188,177,198,248,255,255,228,182,184,187,174,255,171,184,182,171,188,249,255,255,255,182,184,187,174,255,170,187,187,184,192,188,254,104,251,192,184,184,201,177,184,184,199,248,194,184,190,255,172,170,183,255,183,184,192,249,172,170,187,187,194]},{"920947":[254,108,1,254,108,0,255,171,184,182,171,188,251,192,184,184,201,177,184,184,199,248,194,184,190,255,172,170,183,255,183,184,192,249,177,184,181,173,255,254,108,1,254,108,0,255,170,187,187,184,192,188,251,194,184,190,255,177,170,191,174,255,170,181,181,255,178,248,172,170,183,255,176,178,191,174,255,194,184,190,200,249,177,174,187,174,255,170,187,174,255,194,184,190,187,250,246,187,190,185,174,174,188,255,171,170,172,180,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,181,178,175,174,198,255,181,184,191,174,198,248,177,170,185,185,178,183,174,188,188,198,255,189,177,174,249,186,190,174,188,189,178,184,183,255,194,184,190,250,246,188,177,184,190,181,173,255,187,174,170,181,181,194,246,170,188,180,255,178,188,255,255,192,170,188]},{"921180":[189,177,178,188,255,176,174,183,174,187,170,189,174,173,250,246,171,194,255,188,189,184,184,185,188,255,170,181,190,246,184,187,255,188,189,184,184,185,188,255,179,174,189,198,251,194,184,190,255,188,177,184,190,181,173,248,185,181,170,194,255,189,177,170,189,249,175,181,190,189,174,255,175,184,187,255,189,177,174,250,246,192,174,170,189,177,174,187,191,170,183,174,200]},{"921274":[172,170,190,188,174,255,187,174,170,188,184,183,188]},{"921288":[251,194,184,190,255,188,177,184,190,181,173,248,185,181,170,194,255,189,177,170,189,249,175,181,190,189,174,255,175,184,187,255,189,177,174,250,246,192,174,170,189,177,174,187,191,170,183,174,200,246,172,170,190,188,174,255,187,174,170,188,184,183,188,205,251,181,178,175,174,198,255,181,184,191,174,198,248,177,170]},{"921368":[185,178,183,174,188,188,198,255,189,177,174,249,186,190,174,188,189,178,184,183,255,194,184,190,250,246,188,177,184,190,181,173,255,187,174,170,181,181,194,246,170,188,180,255,178,188,255,255,192,170,188,246,189,177,178,188,255,176,174,183,174,187,170,189,174,173,250,246,171,194,255,188,189,184,184,185,188,255,170,181,190,246,184,187,255,188,189,184,184,185,188,255,179,174,189,198,251,189,177,178,188,255,178,188,248,172,177,187,178,188,189,184,188,216,255,177,190,189,205,249,250,246,177,174,216,188,255,184,190,189,200,246,188,174,170,187,172,177,178,183,176,255,175,184,187,246,170,255,171,184,192,205,251,177,178,200,255,173,184,255,194,184,190,248,180,183,184,192,255,191,174,174,189,184,187,185,198,249,250,246,194,184,190,255,187,174,170,181,181,194,246,188,177,184,190,181,173,205,255,170,183,173,246,170,181,181,255,189,177,174,255,184,189,177,174,187,250,246,176,187,174,170,189,255,176,190,194,188,255,192,177,184,246,182,170,173,174,255,189,177,178,188,246,185,184,188,188,178,171,181,174,205,250,246,176,184,255,189,177,170,183,180,255,189,177,174,182,205,246,246,250,246,178,175,255,194,184,190,255,172,170,183,246,172,170,189,172,177,255,189,177,174,182,204,251,192,177,194,255,170,187,174,255,194,184,190,248,187,174,170,173,178,183,176,255,189,177,178,188,249,188,178,176,183,198,255,187,190,183,199,199,199,251,194,184,190,255,183,174,174,173,255,172,170,185,174,200,248,171,190,189,255,183,184,189,249,177,184,184,180,188,177,184,189,251,189,184,188,188,255,187,184,172,180,188,248,189,184,188,188,255,178,189,174,182,188,249,189,184,188,188,255,172,184,184,180,178,174,188,251,224,255,188,180,190,181,181,255,192,184,184,173,188,248,249,225,255,188,189,174,191,174,216,188,255,189,184,192,183,251,248,226,255,180,170,187,180,170,189,188,255,172,170,191,174,251,248,226,255,173,170,187,180,255,185,170,181,170,172,174,251,248,227,255,171,184,182,171,255,188,177,184,185,185,174,251,248,227,255,182,178,188,174,187,194,255,182,178,187,174,249,255,183,184,255,192,170,194,255,178,183,205]},{"921873":[183,184,255,192,170,194,255,184,190,189,205,251,177,170,191,174,255,170,255,189,187,190,181,178,174,248,170,192,174,188,184,182,174,255,173,170,194,199,251,192,170,189,174,187,175,170,181,181,248,190,185,255,170,177,174,170,173,249,182,170,180,174,255,192,178,188,177,174,188,251,226,224,255,177,170,191,174,255,194,184,190,248,182,174,189,255,192,184,174,175,190,181,249,178,180,174,198,251,181,184,184,180,178,183,176,255,175,184,187,255,170,248,185,187,178,183,172,174,188,188,198,255,181,184,184,180,249,173,184,192,183,188,189,170,178,187,188,205,251,183,184,255,181,184,183,180,188,248,170,181,181,184,192,174,173,199,251,254,107,2,194,184,190,255,183,174,174,173,255,170,255,171,184,192,248,189,184,255,176,174,189]},{"922055":[185,170,188,189,249,189,177,174,255,187,174,173,250]},{"922069":[174,194,174,176,184,187,174,205,255,173,174,187,185,194,251,254,107,2,178,175,255,194,184,190,255,175,178,183,173,255,170,248,188,177,178,183,194,255,171,170,181,181,200,249,194,184,190,255,172,170,183,255,171,174,255,194,184,190,250,246,178,183,255,189,177,174,255,173,170,187,180,246,192,184,187,181,173,205,251,221,223,223,255,221,223,223,255,221,223,223,248,255,222,255,221,223,223,221,255,222,249,221,223,223,255,222,221,221,222,255,223,223,222,251,170,255,189,174,188,189,255,184,175,248,188,189,187,174,183,176,189,177,255,255,178,175,249,194,184,190,255,177,170,191,174,255,163,250,246,185,174,183,173,170,183,189,188,200,255,178,216,182,246,194,184,190,187,188,205,251,254,107,2,190,188,174,255,189,177,174,248,182,178,187,187,184,187,200,255,184,187,255,189,177,174,249,177,184,184,180,188,177,184,189,255,170,183,173,250,246,177,170,182,182,174,187,200,255,189,184,255,176,174,189]},{"922294":[189,184,255,189,184,192,174,187,255,184,175,246,177,174,187,170,199,251,254,107,2,173,187,170,178,183,255,189,177,174,248,175,181,184,184,173,176,170,189,174,255,189,184,249,187,170,178,188,174,255,189,177,174,250,246,192,170,189,174,187,255,177,174,187,174,199,251,254,107,2,171,181,178,183,173,255,177,170,189,174,216,188,248,171,187,178,176,177,189,255,181,178,176,177,189,205,251,254,107,2,181,178,176,177,189,178,183,176,255,164,248,189,184,187,172,177,174,188,255,192,178,181,181,249,184,185,174,183,255,194,184,190,187,255,192,170,194,250,246,175,184,187,192,170,187,173,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,174,172,184,183,173,170,187,194,248,189,184,190,187,183,170,182,174,183,189,249,192,178,183,183,174,187,188,250,254,121,45,246,255,255,206,206,206,162,160,161,167,206,206,206,246,170,255,255,195,170,174,183,251,254,107,2,189,177,178,188,255,178,188,255,170,248,175,190,183,183,194,255,181,184,184,180,178,183,176]},{"922537":[174,183,174,182,178,195,174,187,251,254,107,2,189,177,178,183,176,188,255,172,170,183,255,171,174,248,180,183,184,172,180,174,173,255,173,184,192,183,200,249,178,175,255,194,184,190,255,175,170,183,172,194,250,246,194,184,190,187,188,174,181,175,255,170,246,173,170,188,177,178,183,176,255,173,190,173,174,205,251,254,107,2,194,184,190]},{"922623":[172,170,183,248,187,174,175,181,174,172,189,249,170,176,170,177,183,178,182,216,188,250,246,174,183,174,187,176,194,255,192,178,189,177,246,188,192,184,187,173,200,255,171,190,176,201,183,174,189,246,184,187,255,177,170,182,182,174,187,205,251,254,107,2,170,181,181,255,187,178,176,177,189,255,188,189,184,185,248,172,184,181,181,170,171,184,187,170,189,174,249,170,183,173,255,181,178,188,189,174,183,250,246,178,172,174,255,178,188]},{"922733":[171,170,172,180,246,192,178,189,177,255,182,194,255,171,187,170,183,173,246,183,174,192,255,178,183,191,174,183,189,178,184,183,205,251,254,107,2,194,184,190,255,188,177,170,181,181]},{"922780":[183,184,189,248,185,170,188,188,204,255,192,178,189,177,184,190,189,249,189,177,174,255,187,174,173]},{"922806":[172,170,183,174,205,251,254,107,2,194,184,190,255,172,170,183,255,190,188,174,248,175,178,187,174,255,187,184,173,255,184,187,249,171,184,182,171,184,188,255,189,184,250,246,185,170,188,188,205,251,254,107,2,180,183,184,172,180,255,216,174,182,255,173,184,192,183,248,170,183,173,255,189,177,174,183]},{"922883":[171,184,182,171,249,189,177,174,182,255,173,174,170,173,205,251,254,107,2,189,177,178,188,255,178,188,255,170,255,171,170,173,248,185,181,170,172,174,200,255,192,178,189,177,255,170,249,176,190,194,255,192,177,184,255,192,178,181,181,250,246,182,170,180,174,255,194,184,190,255,175,170,181,181,204,246,246,250,246,170,255,181,184,189,205,251,187,170,183,173,184,182,178,195,174,187,248,189,184,190,187,183,170,182,174,183,189,249,192,178,183,183,174,187,188,250,254,121,45,246,255,255,206,206,206,162,160,161,168,206,206,206,246,188,255,255,170,183,173,194,246,250,246,255,255,206,206,206,162,160,161,167,206,206,206,246,170,255,255,170,179,183,174,171,161,167,164,246,188,255,255,170,179,183,174,171,161,167,164]},{"923063":[172,170,190,176,177,189,255,170,255,171,174,174,248,255,255,228,255,180,174,174,185,249,255]},{"923087":[255,255,187,174,181,174,170,188,174,254,104,251,172,170,190,176,177,189,255,175,170,178,187,194,199,248,255,255,228,255,180,174,174,185,249,255,255,255,255,187,174,181,174,170,188,174,254,104,251,192,177,184,170,200,255,171,190,172,180,184,199,248,183,184,255,174,182,185,189,194,249,171,184,189,189,181,174,188,205,251,194,184,190,187,255,189,178,182,174,255,192,170,188,248,254,108,3,254,108,2,255,182,178,183,255,254,108,1,254,108,0,255,188,174,172,205,251,194,184,190,255,177,170,191,174,255,161,165,248,188,174,172,184,183,173,188,200,249,176,184,204,255,176,184,204,255,176,184,204,251,183,178,172,174,199,248,194,184,190,255,172,170,183,255,177,170,191,174,249,189,177,178]},{"923260":[255,189]},{"923263":[170,188,177,199,251,189,184,184,255,188,181,184,192,199,248,178,255,180,174,174,185,255,182,194,249,185,187,174,172,178,184,190,188,199,251,194,184,190,255,170,181,187,174,170,173,194,248,177,170,191,174,255,194,184,190,187,249,185,187,178,195,174]},{"923326":[255,173,178,183,176,190,188,199,251,189,177,184,190,176,177,189,255,194,184,190,248,172,184,190,181,173,255,188,183,174,170,180,249,178,183,200,255,174,177,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,175,178,183,174,199,255,178,255,173,178,173,183,216,189,248,192,170,183,189,255,194,184,190,187,249,182,184,183,174,194,255,170,183,194,192,170,194,205,251,173,190,173,174,199,255,194,184,190,248,170,181,187,174,170,173,194,255,177,170,191,174,249,178,189,205,251,172,184,184,181,199,255,170,255,171,174,174,199,248,177,174,187,174,216,188,255,161,160,160,249,187,190,185,174,174,188,205,251,192,177,184,170,199,255,170,255,175,178,188,177,199,248,194,184,190,255,192,170,181,180,174,173,249,189,177,178,188,255,170,181,181,255,189,177,174,250,246,192,170,194,255,177,174,187,174,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,177,200,255,172,184,182,174,255,171,194,248,170,183,194,255,189,178,182,174,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,178,255,181,184,188,189,255,182,194,248,175,187,178,174,183,173,205,255,177,174,181,185,249,182,174,255,175,178,183,173,255,177,178,182]},{"923635":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,182,174,189,177,178,183,176,255,189,177,178,188,248,185,187,174,172,178,184,190,188,255,189,170,180,174,188,249,189,178,182,174,204,255,172,184,182,174,250,246,171,170,172,180,255,181,170,189,174,187,205,251,189,177,170,183,180,188,199,248,249,189,177,170,183,180,188,199,251,173,174,187,183,189,255,189,170,180,174,255,174,187,248,179,174,187,171,188,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,177,255,178,255,188,174,174,200,255,183,184,189,248,176,184,184,173,255,174,183,184,190,176,177,249,175,184,187,255,194,184,190,204]},{"923790":[175,178,183,174]},{"923795":[251,188,189,178,181,181,255,177,170,191,174,183,216,189,248,175,184,190,183,173,255,189,177,174,249,178,189,174,182,198,255,173,178,176,255,178,183,250,246,189,177,174,255,181,178,176,177,189,246,192,184,187,181,173,255,170,187,184,190,183,173,246,177,174,187,174,200,255,173,178,183,176,190,188,199,251,188,184]},{"923874":[178,255,176,170,191,174,255,194,184,190,248,170,183,255,178,189,174,182,200,255,170,183,173,249,194,184,190,216,187,174,255,188,189,178,181,181,250,246,177,174,187,174,205,246,246,250,246,246,246,250,246,178,255,182,174,170,183,200,255,192,174,255,172,170,183,246,188,178,189,255,177,174,187,174,255,170,183,173,246,188,189,170,187,174,255,170,189,255,174,170,172,177,250,246,184,189,177,174,187,200,255,178,175,255,194,184,190,246,181,178,180,174,204,246,250,246,246,246,250,246,246,246,250,246,175,178,183,174,200,255,178,255,176,190,174,188,188,246,194,184,190,255,188,177,184,190,181,173,246,179,190,188,189,255,176,184,205,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,255,171,184,184,180,249,184,185,174,183,188,255,189,177,174,250,246,173,174,188,174,187,189,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,183,184,189,177,178,183,176,249,173,184,178,183,176,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,178,216,182,249,172,177,174,170,185,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,170,182,255,178,249,172,177,174,170,185,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,195,184,187,170,249,181,178,191,174,188,255,170,189,255,189,177,174,250,246,174,183,173,255,184,175,255,189,177,174,246,187,178,191,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,255,172,170,185,174,249,172,170,183,255,185,170,188,188,250,246,189,177,187,184,190,176,177,255,189,177,174,246,171,170,187,187,178,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200]},{"924324":[188,185,178,183,200,249,177,170,182,182,174,187,200,255,184,187,255,183,174,189,250,246,189,184,255,177,190,187,189,246,170,176,170,177,183,178,182,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,172]},{"924390":[183,249,179,190,182,185,255,178,183,255,189,177,174,250,246,192,174,181,181,255,171,194,255,189,177,174,246,171,181,170,172,180,188,182,178,189,177,188,251,254,109,1,189,177,174,255,171,181,170,172,180,255,172,170,189,188,248,170,187,174,255,177,190,183,176,187,194,200,249,172,184,182,174,255,171,170,172,180,255,192,178,189,177]},{"924474":[246,187,190,185,174,174,188,251,254,109,1,192,174,181,172,184,182,174,255,189,184,255,189,177,174,248,175,184,187,189,190,183,174,249,188,177,184,185,185,174,199,250,246,175,170,183,172,194,255,170,255,187,174,170,173,198,246,255,255,228,178,255,182,190,188,189,255,180,183,184,192,246,255,255,255,183,174,176,170,189,178,191,174,254,104,251,254,109,1,175,184,187,255,254,108,0,254,108,1,255,187,190,185,174,174,188,248,178,189,255,178,188,255,173,184,183,174,205,249,171,174,255,176,184,183,174,199,251,254,109,1,192,174,181,181,255,189,177,174,183,200,255,192,177,194,248,173,178,173,255,194,184,190,255,174,191,174,183,249,172,184,182,174,255,178,183,255,177,174,187,174,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,192,177,194]},{"924673":[194,184,190,249,173,184,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,185,170,183,173,170,249,172,187,170,172,180,174,187,188,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,249,182,178,188,188,178,183,176,250,246,171,181,170,172,180,188,182,178,189,177,255,178,188,246,188,184,190,189,177,255,184,175,255,189,177,174,246,191,178,181,181,170,176,174,255,184,175,250,246,184,190,189,172,170,188,189,188]},{"924801":[254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,184,185,174,183,249,172,177,174,188,189,188,255,189,184,255,176,174,189,250,246,188,189,190,175,175,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,172,170,183,249,171,190,194,255,170,255,183,174,192,255,171,184,182,171,250,246,170,189,255,189,177,174,255,171,184,182,171,246,188,177,184,185,185,174,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,171,178,176,249,171,184,182,171,188,255,171,181,184,192,255,190,185,250,246,172,187,170,172,180,174,173,255,192,170,181,181,188,246,178,183,255,185,194,187,170,182,178,173,188,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,183,174,174,173,249,170,181,181,255,189,177,174,250,246,172,187,194,188,189,170,181,188,255,189,184,246,184,185,174,183,255,176,170,183,184,183,216,188,246,189,184,192,174,187,251,254,109]},{"925055":[171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200]},{"925074":[188,178,181,191,174,187,249,170,187,187,184,192,188,255,192,178,181,181,250,246,173,174,175,174,170,189,255,176,170,183,184,183,246,178,183,255,177,178,188,255,175,178,183,170,181,246,185,177,170,188,174,251,175,184,187,255,162,160,255,187,190,185,174,174,188,248,178,216,181,181,255,189,174,181,181,255,194,184,190,249,188,184,182,174,189,177,178,183,176,198,250,246,177,184,192,255,170,171,184,190,189,255,178,189,198,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,178,255,184,183,172,174,255,192,170,188,255,170,248,189,174,170,255,180,174,189,189,181,174,200,249,171,190,189,255,189,177,174,183,255,178,250,246,182,184,191,174,173,255,190,185,255,178,183,246,189,177,174,255,192,184,187,181,173,200,255,170,183,173,246,183,184,192,255,194,184,190,255,172,170,183,250,246,188,174,174,255,182,174,255,170,188,246,189,177,178,188,205,255,182,170,180,174,188,246,194,184,190,255,192,184,183,173,174,187,205,250,246,192,177,170,189,255,178,255,172,184,190,181,173,246,171,174,255,183,174,193,189,255,189,178,182,174,205,251,189,177,174,183,255,176,184,255,170,192,170,194,199,251,189,177,174,187,174,255,178,188,255,170,248,189,177,178,174,175,255,178,183,255,189,177,174,249,173,174,188,174,187,189,200,255,177,174,255,172,170,183,250,246,184,185,174,183,255,172,187,174,174,185,194,246,172,177,174,188,189,188,255,189,177,170,189,246,175,184,181,181,184,192,255,194,184,190,205,250,246,171,190,189,255,183,184,192,255,189,177,170,189,246,192,174,255,177,170,191,174,255,189,177,170,189,246,184,190,189,255,184,175,255,189,177,174,250,246,192,170,194,200,255,173,184,255,194,184,190,246,181,178,180,174,255,182,194,255,177,170,178,187,198,246,178,216,191,174,255,188,185,174,183,189,250,246,174,184,183,188,255,176,174,189,189,178,183,176,246,178,189,255,189,177,178,188,255,192,170,194,205,251,192,178,189,177,255,172,187,194,188,189,170,181,188,248,165,255,166,200,255,194,184,190,255,172,170,183,249,175,178,183,173,255,170,255,176,187,174,170,189,250,246,175,170,178,187,194,255,178,183,255,189,177,174,246,185,194,187,170,182,178,173,205,246,250,246,175,181,184,182,185,255,175,181,184,182,185,200,246,192,177,178,195,195,181,174,255,192,177,184,182,185,251,170,181,181,255,178,255,172,170,183,255,188,170,194,248,178,188,255,189,177,170,189,255,182,194,249,181,178,175,174,255,178,188,255,185,187,174,189,189,194,250,246,185,181,170,178,183,200]},{"925669":[178,255,181,178,180,174,246,192,170,189,172,177,178,183,216,255,189,177,174,250,246,185,190,173,173,181,174,188,255,176,170,189,177,174,187,246,187,170,178,183,200,246,170,183,173,255,170,181,181,255,178,255,172,170,183,250,246,173,184,255,178,188,255,179,190,188,189,246,185,184,190,187,255,188,184,182,174,255,189,174,170,246,175,184,187,255,189,192,184,200,250,246,170,183,173,255,188,185,174,170,180,255,182,194,246,185,184,178,183,189,255,184,175,255,191,178,174,192,246,171,190,189,255,178,189,216,188,255,183,184,189,250,246,188,170,183,174,200,246,178,189,216,188,255,183,184,189,255,188,170,183,174,251,254,109,1,178,216,182,255,188,178,172,180,199,255,188,177,184,192,248,182,174,255,170,255,171,184,189,189,181,174,200,249,176,174,189,255,188,184,182,174,189,177,178,183,176,199,251,254,110,0,254,107,4,251,254,109,1,181,174,170,191,174,255,182,174,255,170,181,184,183,174,248,178,216,182,255,188,178,172,180,205,255,194,184,190,249,177,170,191,174,255,182,194,255,178,189,174,182,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,222,222,255,222,221,223,222,223]},{"925972":[223,221,223,248,223,221,221]},{"925980":[223,221,221,223,222,249,223,223,221,222,223,255,221,223,222,222,221,251,172,170,183]},{"926002":[194,184,190,255,182,170,180,174,248,189,177,178,183,176,188,255,175,170,181,181,249,184,190,189,255,184,175,255,189,177,174,250,246,188,180,194,198,255,192,178,189,177,255,189,177,174,246,182,170,188,189,174,187,255,188,192,184,187,173,200,246,194,184,190,255,172,170,183,199,251,172,170,183]},{"926076":[194,184,190,255,182,170,180,174,248,189,177,178,183,176,188,255,175,170,181,181,249,184,190,189,255,184,175,255,189,177,174,250,246,188,180,194,198,255,192,178,189,177,255,189,177,174,246,182,170,188,189,174,187,255,188,192,184,187,173,200,246,194,184,190,255,172,170,183,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,119,7,252,3,254,107,2,254,103,255,174,185,178,188,184,173,174,255,255,178,178,178,255,254,120,3,248,255,170,255,181,178,183,180]},{"926199":[189,184,255]},{"926203":[255,255,249]},{"926209":[189,177,174,255,185,170,188,189,255,255,255,254,120,3,246,255,255,187,170,183,173,184,182,178,195,174,187,254,120,3,246,170,175,189,174,187,255,182,184,188,189,181,194,246,173,178,188,187,174,176,170,187,173,178,183,176,246,192,177,170,189,255,177,170,185,185,174,183,174,173,246,178,183,255,189,177,174,255,175,178,187,188,189,246,189,192,184,255,176,170,182,174,188,205,254,120,3,246,181,178,183,180]},{"926312":[170,192,170,180,174,183,188,246,189,184,255,177,178,188,255,190,183,172,181,174,246,181,174,170,191,178,183,176,255,189,177,174,246,177,184,190,188,174,205,254,120,3,246,177,174,255,179,190,188,189,255,187,190,183,188,246,184,190,189,255,189,177,174,255,173,184,184,187,200,254,120,3,246,178,183,189,184,255,189,177,174,255,187,170,178,183,194,246,183,178,176,177,189,205,254,120,3,254,103,254,103,246,176,170,183,184,183,255,177,170,188,246,182,184,191,174,173,255,170,187,184,190,183,173,246,170,181,181,255,189,177,174,255,178,189,174,182,188,246,178,183,255,177,194,187,190,181,174,205,254,120,7,246,194,184,190,255,192,178,181,181,255,177,170,191,174,246,189,184,255,175,178,183,173,255,170,181,181,246,189,177,174,255,178,189,174,182,188,246,183,174,172,174,188,188,170,187,194,255,189,184,246,171,174,170,189,255,176,170,183,184,183,205,254,120,7,246,189,177,178,188,255,178,188,255,194,184,190,187,246,172,177,170,183,172,174,255,189,184,255,171,174,255,170,246,177,174,187,184,205,254,120,3,254,103,254,103,246,194,184,190,255,182,190,188,189]},{"926579":[176,174,189,246,174,183,184,190,176,177,246,172,187,194,188,189,170,181,188,255,189,184,246,171,174,170,189,255,176,170,183,184,183,205,254,120,9,254,103,254,103,251,254,107,2,254,119,7,252,3,247,181,184,184,180,255,170,189,255,189,177,178,188,248,188,189,170,181,175,184,188,255,184,183,255,189,177,174,249,189,177,187,184,183,174,205,251,254,107]},{"926669":[254,119,7,252,3,247,178,189,255,178,188,255,194,184,190,187,248,189,178,182,174,255,189,184,255,188,177,178,183,174,199,251,254,107,2,254,119,7,252,3,247,170,181,188,184,200,255,194,184,190,255,183,174,174,173,248,189,184,255,173,174,175,174,170,189,255,189,177,178,188,249,176,190,194,199,251,254,110,0,254,107,4,251,163,160,255,171,184,182,171,188,255,175,184,187,248,161,160,160,255,187,190,185,174,174,188,205,249,176,184,184,173,255,173,174,170,181,188,255,170,181,181,250,246,173,170,194,199,251,163,160,255,171,184,182,171,188]},{"926807":[175,184,187,248,161,160,160,255,187,190,185,174,174,188,200,249,161,160,160,255,187,190,185,174,174,188,255,161,250,246,171,178,176,255,171,184,182,171,205,255,176,184,184,173,246,173,174,170,181,188,255,170,181,181,255,173,170,194,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,177,174,177,200,255,176,184,184,173,255,181,190,172,180,248,176,174,189,189,178,183,176,255,178,183,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,185,175,175,189,205,255,178,255,177,170,191,174,248,183,184,255,187,174,170,188,184,183,255,189,184,249,177,170,183,176,205,255,188,174,174,255,194,170,199,251,183,184,255,183,184,255,183,184,255,183,184,248,183,184,199,255,192]},{"926994":[255,188,177,184,190,181,173,249,185,181,170,194,255,171,194,255,182,194,250,246,187,190,181,174,188,199,246,176,184,184,173,171,194,174,204,251,254,110]},{"927033":[254,107,4,251,170,170,170,170,177,177,177,177,206,199,248,188,201,188,184,255,171,187,178,176,177,189,206,199,251,254,110,0,254,107,4,251,178,255,184,183,172,174,255,177,170,173,255,170,248,175,178,188,177,255,173,178,183,183,174,187,205,255,178,249,188,189,178,181,181,255,187,174,182,174,182,171,174,187,250,246,178,189,255,189,184,255,189,177,178,188,246,173,170,194,205,251,173,184,255,194,184,190,248,187,174,182,174,182,171,174,187,255,192,177,174,183,249,178,255,192,170,188,255,194,184,190,183,176,198,250,246,246,178,255,188,190,187,174,255,173,184,183,216,189,205,251,188,184,200,255,178,216,191,174,255,171,174,174,183,248,181,178,191,178,183,176,255,178,183,255,189,177,178,188,249,172,170,191,174,255,175,184,187,250,246,194,174,170,187,188,200,255,170,183,173,255,194,184,190,246,189,177,178,183,180,255,194,184,190,255,172,170,183,246,179,190,188,189,255,172,184,182,174,250,246,170,181,184,183,176,255,170,183,173,255,171,184,182,171,246,184,185,174,183,255,192,170,181,181,188,198,251,184,183,172,174,200,255,178,255,175,170,187,189,174,173,248,178,183,255,189,177,178,188,255,172,170,191,174,249,188,184,255,171,170,173,255,170,181,181,255,189,177,174,250,246,179,170,195,195,255,177,170,183,173,188,246,176,190,194,188,255,187,170,183]},{"927349":[170,192,170,194,246,170,183,173,255,177,178,173,255,178,183,255,189,177,174,250,246,188,170,183,173,205,251,185,170,183,173,170,188,255,170,187,174,248,191,174,187,194,255,191,178,172,178,184,190,188]},{"927400":[170,183,178,182,170,181,188,205,255,183,174,191,174,187]},{"927416":[175,184,187,176,174,189,204,246,246,250,246,246,246,178,255,183,174,191,174,187,255,192,178,181,181,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,183,174,255,184,175,255,190,188,248,170,181,192,170,194,188,255,181,178,174,188,205,251,184,183,174,255,184,175,255,190,188,248,170,181,192,170,194,188,255,189,174,181,181,188,249,189,177,174,255,189,187,190,189,177,205,251,184,183,174,255,184,175,255,190,188,248,181,178,180,174,188,255,185,174,170,183,190,189,249,171,190,189,189,174,187,205,251,178,255,192,170,181,181,174,173,255,184,175,175,248,182,194,255,171,187,184,189,177,174,187,255,181,174,184,249,250,246,192,177,170,189,255,170,255,173,178,183,176,190,188,205,251,183,184,192,255,178,255,188,177,184,190,181,173,248,185,187,184,171,170,171,181,194,255,189,170,181,180,249,189,184,255,177,178,182,204,251,173,178,173,255,194,184,190,255,172,184,182,174,248,175,187,184,182,255,182,194,249,171,187,184,189,177,174,187,188,255,187,184,184,182,198,250,246,246,170,187,174,255,192,174,255,172,184,184,181,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,175,178,183,174,199,248,176,184,255,176,174,189,255,188,184,182,174,249,182,184,187,174]},{"927832":[182,184,183,174,194,250,246,175,178,187,188,189,205,251,254,110,0,254,107,4,251,182,194,255,176,187,170,183,173,185,170,255,178,188,248,184,191,174,187,255,178,183,255,189,177,174,249,174,170,188,189,205,255,178,216,182,255,171,170,173,250,246,192,178,189,177,246,173,178,187,174,172,189,178,184,183,188,205,246,178,216,181,181,255,182,170,187,180,255,194,184,190,187,250,246,182,170,185,205,255,171,174,188,189,255,184,175,246,181,190,172,180,199,254,121,45,251,188,184,182,174,173,170,194,255,178,216,181,181,248,171,174,255,178,183,255,170,255,177,178,176,177,249,188,172,177,184,184,181,255,171,170,183,173,199,251,173,178,173,255,194,184,190,255,180,183,184,192,204,248,249,250,246,170,255,189,187,174,174,246,189,194,185,178,172,170,181,181,194,255,177,170,188,246,182,170,183,194,255,188,174,172,184,183,173,170,187,194,250,246,171,187,170,183,172,177,174,188,246,188,190,185,185,184,187,189,174,173,246,172,181,174,170,187,255,184,175,255,189,177,174,250,246,176,187,184,190,183,173,255,171,194,255,189,177,174,246,189,187,190,183,180,205,255,189,177,178,188,246,189,187,190,183,180,250,246,189,194,185,178,172,170,181,181,194,246,172,184,183,189,170,178,183,188,255,192,184,184,173,194,246,189,178,188,188,190,174,255,175,184,187,250,246,188,189,187,174,183,176,189,177,200,255,170,183,173,246,191,170,188,172,190,181,170,187,246,189,178,188,188,190,174,255,189,184,250,246,172,170,187,187,194,246,182,170,189,174,187,178,170,181,188,255,175,187,184,182,246,184,183,174,255,185,170,187,189,255,184,175,250]},{"928213":[189,177,174,255,189,187,174,174,255,189,184,246,170,183,184,189,177,174,187,205,251,248,201,192,178,188,177,178,183,176,255,185,184,183,173,201,249,250,246,189,177,187,184,192,255,178,189,174,182]},{"928263":[178,183,198,246,255,255,228,255,194,174,188,177,246,255,255]},{"928279":[255,183,184,254,104,251]},{"928286":[255,255,255,188,189,184,185,255,178,189,199,251,248,255,255,175,178,183,174,255,189,177,174,183,199,251,184,180,170,194]},{"928317":[255,177,174,187,174,216,188,248,194,184,190,187,255,178,189,174,182,249,171,170,172,180,200,255,172,170,190,188,174,255,178,250,246,172,170,183,216,189,255,190,188,174,255,178,189,205,246,178,216,182,255,188,189,190,172,180,255,178,183,246,189,177,178,188,255,175,184,190,183,189,170,178,183,205,251,177,184,192,255,182,170,183,194,198,248,255,255,228,254,108,1,254,108,0,255,187,190,185,174,174,188,249,255,255,255,254,108,3,254,108,2,255,187,190,185,174,174,188,254,104,251,178,255,181,178,180,174,255,194,184,190,200,255,188,184,248,177,174,187,174,216,188,255,170,255,189,177,178,183,176,249,194,184,190,255,172,170,183,255,190,188,174,255,189,184,250,246,171,174,170,189,255,190,185,255,176,170,183,184,183,205,251,248,178,188,255,176,187,174,170,189,255,181,190,172,180,251,248,255,178,188,255,176,184,184,173]},{"928524":[181,190,172,180,251,248,255,178,188,255,182,174,177]},{"928538":[181,190,172,180,251,192,177,194,255,194,184,190,255,172,184,182,174,248,178,183,255,177,174,187,174,255,170,183,173,249,185,187,174,189,174,183,173,255,181,178,180,174,250,246,194,184,190,255,177,170,191,174,246,188,184,182,174,189,177,178,183,176,255,189,177,178,188,246,175,184,190,183,189,170,178,183,250,246,192,170,183,189,188,198,255,172,184,182,174,246,171,170,172,180]},{"928633":[192,178,189,177,246,171,184,189,189,181,174,188,199,251,171,194,255,189,177,174,255,192,170,194,200,248,194,184,190,187,255,175,184,187,189,190,183,174,200,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,192,174,181,181,255,173,184,183,174,200,248,181,174,189,189,190,172,174,255,177,170,191,174,255,170,249,172,190,185,255,184,175]},{"928741":[189,174,170,204,251,178,255,192,187,184,189,174,255,170,248,192,184,187,173,205,255,179,190,188,189,249,184,183,174,205,255,184,183,255,170,250,246,188,189,184,183,174,255,170,183,173,246,189,177,187,174,192,255,178,189,255,178,183,189,184,246,189,177,174,255,184,172,174,170,183,205,255,178,189,250,246,192,170,188,255,182,194,255,192,184,187,173,205,246,178,189,255,192,170,188,255,192,177,170,189,246,192,184,190,181,173,255,188,170,191,174,255,182,174,205,250,246,178,255,177,184,185,174,255,188,184,182,174,173,170,194,246,188,184,182,174,184,183,174,255,175,178,183,173,188,246,189,177,170,189,255,192,184,187,173,255,170,183,173,250,246,171,187,178,183,176,188,255,178,189,255,189,184,246,182,174]},{"928918":[255,189,177,174,255,192,184,187,173,246,178,188,255,189,177,174,250,246,171,174,176,178,183,183,178,183,176,255,184,175,246,182,194,255,188,184,183,176,205,251,178,255,192,187,184,189,174,255,170,248,188,184,183,176,205,255,179,190,188,189,249,184,183,174,205,255,184,183,255,170,250,246,176,190,178,189,170,187,255,170,183,173,246,189,177,187,174,192,255,178,189,255,178,183,189,184,246,189,177,174,255,188,180,194,205,255,178,189,250,246,192,170,188,255,182,194,255,188,184,183,176,205,246,178,189,255,172,184,190,181,173,255,189,170,182,174,246,171,174,170,188,189,188,255,170,183,173,250,246,175,187,174,174]},{"929072":[182,178,183,173,188,205,255,178,189,246,175,181,178,189,189,174,187,188]},{"929091":[184,183,246,189,177,174,255,192,178,183,173,255,170,183,173,250,246,181,190,187,180,188,255,178,183,255,184,190,187,246,182,178,183,173,188,205,255,178,189,255,178,188,246,189,177,174,255,188,184,183,176,255,184,175,250,246,183,170,189,190,187,174,200,255,184,175,246,177,190,182,170,183,178,189,194,200,255,184,175,246,173,187,174,170,182,188,255,170,183,173,250,246,173,187,174,170,182,174,187,188,205,251,170,173,173,255,176,170,187,181,178,172,200,248,176,178,183,176,174,187,255,170,183,173,249,170,185,185,181,174,255,170,183,173,255,172,184,184,180,250,246,175,184,187,255,162,255,182,178,183,190,189,174,188,205,246,170,173,173,255,172,170,187,187,184,189,188,200,246,185,184,189,170,189,184,174,188,200,250,246,176,170,187,170,182,255,182,170,188,170,181,170,246,170,183,173,255,172,190,187,187,194,246,185,184,192,173,174,187,255,170,183,173,250,246,188,189,178,187,255,192,174,181,181,205,255,170,173,173,246,189,184,182,170,189,184,255,185,170,188,189,174,200,246,188,189,178,187,255,192,174,181,181,255,170,183,173,250,246,188,181,184,192,181,194,255,170,173,173,255,187,174,173,246,192,178,183,174,255,170,183,173,255,171,187,178,183,176,246,189,184,255,170,255,171,184,178,181,205,255,170,173,173,250,246,188,190,176,170,187,200,255,188,184,194,246,188,170,190,172,174,255,170,183,173,246,192,170,189,174,187,200,255,188,189,178,187,250,246,170,183,173,255,171,187,178,183,176,255,189,184,255,170,246,171,184,178,181,255,170,176,170,178,183,205,251,178,255,189,177,178,183,180,255,178,248,175,184,187,176,184,189,255,177,184,192,255,189,184,249,188,182,178,181,174,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,200,255,181,178,180,174,200,255,194,184,190,248,183,174,174,173,255,163,160,249,187,190,185,174,174,188,205,250,246,188,178,181,181,194,199,251,194,184,190,255,192,170,183,189,255,189,184,248,185,181,170,194,255,170,255,176,170,182,174,198,249,189,170,181,180,255,189,184,255,182,174,205,251,194,184,190,216,191,174,255,184,185,174,183,174,173,248,189,177,174,255,172,177,174,188,189,188,199,249,189,178,182,174,255,189,184,255,176,184,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,200,255,181,178,180,174,200,255,194,184,190,248,170,181,187,174,170,173,194,255,177,170,191,174,249,184,183,174,255,184,175,255,189,177,184,188,174]},{"929669":[251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251]},{"929699":[110,0,254,107,4,251,254,110,0,254,107,4,251,192,177,194,255,173,184,174,188,255,183,184,248,184,183,174,255,184,192,183,249,171,184,189,189,181,174,188,198,255,176,184,250,246,175,178,183,173,255,184,183,174,246,175,178,187,188,189,199,251,194,184,190,255,170,187,174,248,172,170,187,187,194,178,183,176,255,189,184,249,182,190,172,177,255,172,187,170,185,200,255,176,184,250,246,190,188,174,255,188,184,182,174,255,184,175,255,178,189,246,175,178,187,188,189,199,251,194,184,190,255,173,187,184,191,174,248,170,192,170,194,255,182,194,255,184,189,177,174,187,249,188,174,181,175,200,255,170,176,170,177,183,178,182,200,250,246,189,192,184,255,189,178,182,174,188,204,246,171,190,189,200,255,178,255,192,184,183,216,189,246,176,178,191,174,255,194,184,190,255,189,177,174,250,246,189,187,178,175,184,187,172,174,205,246,178,216,181,181,255,173,174,175,174,170,189,246,194,184,190,199,251,172,170,183,255,194,184,190,255,171,174,170,189,248,182,194,255,173,170,187,180,183,174,188,188,249,189,174,172,177,183,178,186,190,174,198,251,177,170,191,174,255,194,184,190,255,188,174,174,183,248,170,183,173,194,198,249,250,246,177,174,255,192,170,188,255,184,190,189,246,181,184,184,180,178,183,176,255,175,184,187,246,184,190,187,255,185,187,178,195,174,173,250,246,174,189,177,174,187,246,182,174,173,170,181,181,178,184,183,205,246,178,255,192,184,183,173,174,187,255,192,177,174,183,250,246,177,174,255,192,178,181,181,255,171,174,246,171,170,172,180,198,251,178,216,182,255,179,190,188,189,255,188,184,182,174,248,173,190,173,174,205,255,189,177,178,188,255,178,188,249,171,181,178,183,173,216,188,255,177,190,189,205,251,252,2,254,109,0,254,107,2,255,255,255,255,255,176,255,176,251,184,190,172,177,199,248,249,194,184,190,255,179,174,187,180,199,251,173,184]},{"930143":[216,189,255,170,187,176,190,174,248,192,178,189,177,255,170,255,175,187,184,195,174,183,249,173,174,170,173,187,184,172,180]},{"930175":[250,246,177,174,216,181,181]},{"930183":[183,174,191,174,187,246,172,177,170,183,176,174,255,177,178,188,246,185,184,188,178,189,178,184,183,199,251,254,110,0,254,107,4,251,188,184,255,194,184,190,200]},{"930225":[181,178,180,174,200,248,171,190,188,189,174,173,255,173,184,192,183]},{"930243":[182,194,249,173,184,184,187,200,255,170,183,173,255,170,187,174,250,246,171,174,178,183,176,255,170,255,179,174,187,180,246,171,194,255,189,170,181,180,178,183,176,255,189,184,246,182,174,198,255,183,184,187,182,170,181,181,194,255,178,250,246,192,184,190,181,173,255,171,174,255,170,183,176,187,194,246,170,183,173,255,182,170,180,174,255,194,184,190,246,185,170,194,255,175,184,187,255,178,189,200,250,246,171,190,189,255,178,255,171,174,189,246,194,184,190,216,187,174]},{"930362":[179,190,188,189,246,176,184,178,183,176,255,189,184,255,171,187,174,170,180,250,246,170,181,181,255,182,194,255,185,184,189,188,246,170,183,173,255,188,189,174,170,181,255,182,194,246,165,160,255,187,190,185,174,174,188,205,251,178,216,182,255,170,255,187,190,185,174,174,248,185,184,189,255,175,170,187,182,174,187,205,249,184,183,174,255,173,170,194,255,178,255,192,178,181,181,250,246,189,170,180,174,255,184,191,174,187,255,189,177,174,246,192,184,187,181,173,255,192,178,189,177]},{"930484":[182,194,246,188,180,178,181,181,195,205,255,177,170,191,174,250,246,194,184,190,255,182,174,189,255,182,194,246,171,187,184,189,177,174,187,255,178,183,255,189,177,174,246,173,174,188,174,187,189,198,255,177,174,216,188,250,246,192,170,194,255,187,178,172,177,174,187]},{"930552":[189,177,170,183,255,178]},{"930559":[170,182,205,251,206,206,255,173,174,191,255,172,170,191,174]},{"930575":[206,206,248,255,255,183,184,255,175,170,187,182,178,183,176,249,255,255,255,187,174,186,190,178,187,174,173,251,173,178,173,255,194,184,190,255,177,174,170,187,248,189,177,170,189,255,191,174,174,189,184,187,185,249,171,174,170,189,255,170,179,183,174,171,161,167,164,250,246,178,183,255,170,255,161,255,184,183,255,161,246,187,170,172,174,255,170,189,255,170,176,173,186,198,251,194,184,190,255,175,184,190,183,173,248,188,177,170,171,170,173,184,184,200,255,177,190,177,198,249,183,178,178,178,178,178,172,174,205,251,194,184,199,255,178,216,182,255,183,184,189,248,187,190,183,183,178,183,176,255,170,249,172,177,170,187,178,189,194,255,177,174,187,174,205,251,188,182,170,181,181,177,170,172,180,174,187,204,248,249,250,246,192,170,188,255,177,178,173,178,183,176,200,246,194,184,190,255,175,184,190,183,173,255,182,174,199,246,250,246,246,184,180,170,194,200,255,194,184,190,255,172,170,183,246,181,174,170,191,174,255,183,184,192,205,251,185,170,194,255,162,160,255,187,190,185,174,174,188,200,248,184,185,174,183,255,161,255,172,177,174,188,189,205,249,170,187,174,255,194,184,190,255,181,190,172,180,194,198,250,246,188,184,200,255,185,181,170,194,255,176,170,182,174,198,246,255]},{"930873":[228]},{"930875":[185,181,170,194,246,255]},{"930884":[183,174,191,174,187,199,254,104,251,176,184,184,173,255,181,190,172,180,255,189,177,174,183,251,192,174,181,181,255,175,178,183,174,200]},{"930919":[178,248,173,178,173,183,216,189,255,192,170,183,189,249,194,184,190,187,255,187,190,185,174,174,188,205,251,185,170,194,255,161,160,160]},{"930954":[187,190,185,174,174,188,248,184,185,174,183,255,161,255,172,177,174,188,189,205,249,170,187,174]},{"930979":[194,184,190,255,181,190,172,180,194,198,250,246,188,184,200,255,185,181,170,194,255,176,170,182,174,198,246,255,255,228,255,185,181,170,194,246,255,255,255,255,183,174,191,174,187,199,254,104,251,178,255,188,190,187,174,255,173,184,255,177,170,191,174,248,170,255,181,184,189,255,184,175,255,171,174,173,188,205,249,250,246,195,184,187,170,255,178,188,255,170,246,172,177,174,170,185,188,180,170,189,174,255,170,183,173,246,192,178,181,181,255,189,187,194,255,189,184,250,246,188,174,181,181,255,194,184,190,255,177,178,188,246,189,187,170,188,177,255,175,184,187,255,165,160,160,246,187,190,185,174,174,188,204,251,178,255,188,190,187,174,255,173,184,255,177,170,191,174,248,170,255,181,184,189,255,184,175,255,171,174,173,188,205,249,250,246,173,178,173,255,194,184,190,255,180,183,184,192,246,178,175,255,194,184,190,255,185,181,170,194,174,173,246,189,177,174,255,175,181,190,189,174,255,178,183,250,246,189,177,174,255,172,174,183,189,174,187,255,184,175,246,189,184,192,183,255,189,177,178,183,176,188,246,172,184,190,181,173,255,177,170,185,185,174,183,198,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,188,170,183,172,189,190,170,187,194,254,114,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,188,170,183,172,189,190,170,187,194,249,255,182,184,190,183,189,170,178,183,255,172,170,191,174,254,113,251,252,0,228,172,184,183,189,178,183,190,174,248,255,188,170,191,174,255,170,183,173]},{"931343":[186,190,178,189,254,114,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,177,184,191,174,181,255,187,174,183,189,170,181,248,178,188,255,168,160,255,187,190,185,174,174,188,205,249,178,255,177,170,191,174,255,170,181,181,255,173,170,194,251,189,178,182,174,216,188,255,190,185,199]},{"931418":[189,178,182,174,255,175,184,187,255,194,184,190,249,189,184]},{"931434":[176,184,205,251,172,184,182,174,255,171,170,172,180,248,181,170,189,174,187,200,255,178,255,177,170,191,174,249,189,184,255,171,190,187,194,250,246,189,177,178,183,176,188,205,251,188,184,182,174,189,177,178,183,176,255,178,188,248,175,184,181,181,184,192,178,183,176,255,194,184,190,205,249,178,255,173,184,183,216,189,255,181,178,180,174,205,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,182,184,190,183,189,170,178,183,255,172,170,191,174,254,114,251,194,184,190,255,189,177,178,183,180]},{"931565":[194,184,190,248,170,187,174,255,187,174,170,173,194,255,189,184,249,175,170,172,174,255,182,174,198,250,246,246,178,255,192,178,181,181,255,183,184,189,255,173,178,174,246,250,246,190,183,181,174,188,188,255,194,184,190,246,172,184,182,185,181,174,189,174,255,194,184,190,187,246,176,184,170,181,188,205,255,173,178,183,176,190,188,199,251,176,184,189]},{"931654":[192,170,193]},{"931658":[178,183,248,194,184,190,187,255,174,170,187,188,198,255,178,249,172,170,183,183,184,189,255,173,178,174,199,251,177,184,192,255,173,178,173]},{"931694":[194,184,190,248,176,174,189,255,190,185,255,177,174,187,174,198,251,178,189,216,188,255,170,255,188,174,172,187,174,189,248,189,184,255,174,191,174,187,194,184,183,174,205,251,194,184,190,255,183,174,174,173,255,170,181,181,255,167,248,172,187,194,188,189,170,181,188,255,189,184,249,174,183,189,174,187,205,251,194,184,190,255,183,174,174,173,255,170,181,181,255,167,248,172,187,194,188,189,170,181,188,255,189,184,249,171,174,170,189,255,176,170,183,184,183,205,251,194,184,190,255,177,170,191,174,255,183,184,248,171,184,192,205,255,173,178,183,176,190,188,199,251,194,184,190,255,172,170,183,216,189,255,171,174,188,189,248,182,174,255,192,178,189,177,184,190,189,249,188,178,181,191,174,187,255,170,187,187,184,192,188,199,251,194,184,190,255,172,170,183,216,189,255,171,174,188,189,248,182,174,255,192,178,189,177,184,190,189,249,188,178,181,191,174,187,255,170,187,187,184,192,188,199,251,184,177,255,183,184,199,255,188,178,181,191,174,187,199,248,182,194,255,184,183,174,255,189,187,190,174,249,192,174,170,180,183,174,188,188,199,251,177,174,181,181,184,255,254,106,205,255,178,248,170,182,255,182,190,187,170,177,173,170,177,181,170,200,249,171,187,184,189,177,174,187,255,184,175,250,246,188,170,177,170,188,187,170,177,181,170,255,170,183,173,246,170,176,178,183,170,177,205,255,171,174,177,184,181,173,246,189,177,174,255,185,184,192,174,187,255,184,175,250,246,178,183,191,178,188,178,171,178,181,178,189,194,205,254,120,3,246,204,255,204,255,204,246,192,170,178,189,199,255,194,184,190,255,172,170,183,250,246,188,174,174,255,182,174,198]},{"932084":[178,255,180,183,174,192,246,178,255,188,177,184,190,181,173,255,177,170,191,174,246,177,178,173,173,174,183,255,178,183,255,255,170,250,246,177,184,181,181,184,192,255,189,187,174,174,205,251,255]},{"932134":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932251":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932333":[255]},{"932335":[255,255,255,255,255,255,255,255,255]},{"932348":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932364":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932544":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932636":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932725":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932864":[255]},{"932866":[255,255,255,255,255,255,255,255]},{"932878":[255,255,255,255,255,255,255,255,255,255,255,255]},{"932891":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932938":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933050":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933207":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933260":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933322":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933413":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933485":[255,255]},{"933488":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933595":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933615":[255,255]},{"933618":[255,255]},{"933621":[255,255,255,255,255,255,255,255,255,255]},{"933632":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933726":[255]},{"933728":[255,255,255,255,255,255,255]},{"933739":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933820":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933842":[255,255,255,255,255]},{"933848":[255,255,255,255,255,255,255]},{"933856":[255,255,255,255,255,255,255,255,255,255,255]},{"933868":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933883":[255,255,255,255,255,255,255,255]},{"933892":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933918":[255,255,255,255,255,255,255,255]},{"933927":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933966":[255,255,255,255,255,255,255]},{"933974":[255]},{"933976":[255,255,255]},{"933980":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933998":[255,255,255,255,255,255,255,255,255,255,255]},{"934010":[255,255,255,255,255,255,255]},{"934018":[255]},{"934020":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934040":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934094":[255,255,255,255,255,255]},{"934101":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934128":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934145":[255,255,255,255,255,255,255,255,255,255]},{"934157":[255]},{"934172":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934198":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934215":[255,255,255,255,255,255,255,255,255,255,255]},{"934231":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934255":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934274":[255,255,255,255,255,255,255,255,255,255]},{"934291":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934312":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934330":[255]},{"934345":[255,255,255,255,255,255,255]},{"934353":[255,255,255,255,255,255,255,255,255,255,255]},{"934365":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934382":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934398":[255,255,255,255,255,255,255,255,255,255,255]},{"934410":[255,255,255,255,255,255]},{"934422":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934443":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934462":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934476":[255,255,255,255,255,255,255,255,255,255,255,255]},{"934489":[255,255,255,255,255,255,255,255]},{"934504":[255]},{"934519":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934555":[255]},{"934570":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934743":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934790":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934833":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935013":[255]},{"935015":[255,255,255,255,255,255,255,255]},{"935027":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935044":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935076":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935109":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935168":[255]},{"935170":[255,255,255,255,255,255,255,255,255]},{"935183":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935199":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935230":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935268":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935307":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935372":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935498":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935516":[255]},{"935518":[255]},{"935520":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935922":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935975":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936045":[255,255,255]},{"936049":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936123":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936202":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936231":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936288":[255]},{"936302":[255]},{"936316":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936376":[255]},{"936391":[255]},{"936399":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936471":[255]},{"936486":[255]},{"936501":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936571":[255]},{"936584":[255]},{"936597":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936674":[255]},{"936689":[255]},{"936704":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936773":[255]},{"936787":[255]},{"936800":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936866":[255]},{"936881":[255]},{"936893":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936970":[255]},{"936985":[255]},{"937000":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937031":[255]},{"937033":[255]},{"937035":[255]},{"937037":[255]},{"937039":[255,255,255,255,255,255,255,255,255,255,255,255]},{"937052":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937109":[255]},{"937123":[255]},{"937137":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937204":[255]},{"937219":[255]},{"937234":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937296":[255]},{"937311":[255]},{"937321":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937366":[255]},{"937380":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937441":[255]},{"937455":[255]},{"937466":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937538":[255]},{"937553":[255]},{"937564":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937624":[255]},{"937639":[255]},{"937646":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937696":[255]},{"937708":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937781":[255]},{"937795":[255]},{"937807":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937870":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937927":[255]},{"937941":[255]},{"937955":[255,255,255,255,255,255,255,255,255,255]},{"937966":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938020":[255]},{"938032":[255]},{"938046":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938117":[255]},{"938132":[255]},{"938145":[255,255,255,255,255,255,255,255,255,255,255]},{"938157":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938196":[255]},{"938211":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938284":[255]},{"938299":[255]},{"938314":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938385":[255]},{"938399":[255]},{"938414":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938437":[255,255,255,255]},{"938442":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938468":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938525":[255]},{"938539":[255]},{"938553":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938632":[255]},{"938646":[255]},{"938660":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938727":[255]},{"938742":[255]},{"938756":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938813":[255]},{"938828":[255]},{"938839":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938902":[255]},{"938916":[255]},{"938924":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938959":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939016":[255]},{"939030":[255]},{"939044":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939114":[255]},{"939129":[255]},{"939144":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939220":[255]},{"939234":[255]},{"939249":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939324":[255]},{"939339":[255]},{"939354":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939423":[255]},{"939434":[255]},{"939448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939516":[255]},{"939531":[255]},{"939544":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939577":[255]},{"939579":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939598":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939655":[255]},{"939669":[255]},{"939683":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939752":[255]},{"939767":[255]},{"939780":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939854":[255]},{"939868":[255]},{"939882":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939953":[255]},{"939967":[255]},{"939982":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940050":[255]},{"940065":[255]},{"940078":[255,255,255,255,255,255,255,255,255,255]},{"940089":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940153":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940197":[255]},{"940212":[255]},{"940226":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940258":[255]},{"940260":[255]},{"940262":[255,255,255,255,255]},{"940281":[255]},{"940291":[255]},{"940298":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940371":[255]},{"940386":[255]},{"940401":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940467":[255]},{"940482":[255]},{"940491":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940557":[255]},{"940572":[255]},{"940581":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940653":[255]},{"940668":[255]},{"940683":[255,255,255]},{"940687":[255,255]},{"940690":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940715":[255]},{"940717":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940787":[255]},{"940789":[255]},{"940792":[255,255]},{"940798":[255,255,255,255,255,255,255,255,255,255]},{"940809":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940867":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940911":[255]},{"940926":[255]},{"940940":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940972":[255]},{"940974":[255]},{"940976":[255,255,255,255,255]},{"940995":[255]},{"941005":[255]},{"941012":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941085":[255]},{"941100":[255]},{"941115":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941181":[255]},{"941196":[255]},{"941205":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941271":[255]},{"941286":[255]},{"941295":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941362":[255]},{"941371":[255]},{"941385":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941457":[255]},{"941472":[255]},{"941484":[255,255,255]},{"941488":[255,255]},{"941491":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941516":[255]},{"941518":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941563":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941611":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941628":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941742":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941775":[255,255,255,255,255,255,255,255,255]},{"941785":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941954":[255]},{"941956":[255,255,255,255,255,255,255,255,255]},{"941969":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942030":[255]},{"942032":[255,255,255,255,255,255,255,255,255,255]},{"942046":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942076":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942170":[255,255,255,255,255,255,255]},{"942179":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942789":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942832":[255]},{"942834":[255,255,255,255,255,255,255]},{"942845":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942899":[255]},{"942901":[255]},{"942903":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942923":[255]},{"942925":[255,255,255,255,255,255,255,255,255,255]},{"942939":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943097":[255,255,255,255,255]},{"943104":[255,255,255,255,255]},{"943112":[255,255,255,255,255]},{"943119":[255,255,255,255,255]},{"943127":[255,255,255,255,255]},{"943134":[255,255,255,255,255]},{"943142":[255,255,255,255,255,255]},{"943150":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943187":[255,255]},{"943195":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943211":[255,255]},{"943219":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943235":[255,255]},{"943243":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943259":[255,255]},{"943267":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943298":[255,255]},{"943306":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943346":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943360":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943570":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943586":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943830":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943882":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943936":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943957":[255]},{"943959":[255,255,255,255,255,255,255]},{"943970":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944480":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944607":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944909":[255]},{"944911":[255]},{"944913":[255,255,255,255,255]},{"944930":[255]},{"944945":[255]},{"944952":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944981":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945024":[255]},{"945039":[255]},{"945053":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945121":[255]},{"945134":[255]},{"945148":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945213":[255]},{"945227":[255]},{"945241":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945317":[255]},{"945332":[255]},{"945347":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945418":[255]},{"945433":[255]},{"945448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945517":[255]},{"945532":[255]},{"945545":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945616":[255]},{"945631":[255]},{"945646":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945682":[255]},{"945684":[255]},{"945686":[255]},{"945688":[255,255,255,255,255,255,255]},{"945696":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945924":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945941":[255,255,255,255,255,255,255]},{"945949":[255]},{"945951":[255]},{"945953":[255]},{"945955":[255,255,255,255,255,255,255,255,255]},{"945965":[255,255,255,255,255,255,255]},{"945973":[255]},{"945975":[255]},{"945977":[255,255,255,255,255,255,255,255]},{"945987":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946002":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946074":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946091":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946110":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946124":[255,255,255,255,255,255,255,255,255,255,255,255]},{"946137":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946210":[255]},{"946213":[255,255,255,255,255,255,255]},{"946225":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946346":[255]},{"946349":[255,255,255,255,255,255,255]},{"946361":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946376":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946558":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946679":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946711":[255,255,255,255,255,255,255,255,255,255,255]},{"946723":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946743":[255,255,255,255,255,255,255,255,255,255]},{"946755":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946826":[255]},{"946828":[255,255,255,255,255]},{"946837":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946864":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946908":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"947006":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"950962":[143]},{"954488":[34,67,236,160,96]},{"954852":[54,182,160]},{"955117":[34,236,160]},{"955529":[50,182,160]},{"962925":[15,182,160]},{"962951":[15,182,160]},{"963167":[15,182,160]},{"963214":[15,182,160]},{"965041":[15,182,160]},{"965069":[15,182,160]},{"965214":[15,182,160]},{"965298":[15,182,160]},{"965316":[15,182,160]},{"967797":[34,119,180,160,234,234,234,234,234,234,234,234]},{"967817":[234,234,234,234,34,145,180,160]},{"972824":[222,181,160]},{"972834":[222,181,160]},{"972851":[222,181,160]},{"974665":[92,16,198,160,234]},{"974706":[77,198,160]},{"974722":[50,198,160]},{"975106":[34,127,143,160]},{"975132":[34,127,143,160]},{"975265":[34,33,198,160,234,234]},{"975332":[34,255,197,160,234,234]},{"975401":[255]},{"976357":[11,182,160]},{"976423":[11,182,160]},{"978658":[251,181,160]},{"979078":[34,189,220,160]},{"979173":[204]},{"979181":[234]},{"979189":[250]},{"979197":[234]},{"979205":[250]},{"979213":[206]},{"979221":[206]},{"979229":[206]},{"979237":[206]},{"979245":[236]},{"979253":[235]},{"979261":[251]},{"979269":[235]},{"979277":[251]},{"979285":[236]},{"979293":[236]},{"979301":[236]},{"979309":[236]},{"979317":[236]},{"979325":[235]},{"979333":[251]},{"979341":[235]},{"979349":[251]},{"979357":[206]},{"979365":[206]},{"979373":[206]},{"979381":[206]},{"979389":[204]},{"979397":[234]},{"979405":[250]},{"979413":[234]},{"979421":[250]},{"979429":[204]},{"979437":[204]},{"979445":[204]},{"979453":[204]},{"979461":[235]},{"979469":[251]},{"979477":[235]},{"979485":[251]},{"979493":[251]},{"979501":[251]},{"979509":[251]},{"979517":[251]},{"979525":[251]},{"982376":[127,181,160]},{"982421":[15]},{"982430":[234,234,234,234,234,234,234,234]},{"982440":[34,219,196,160]},{"983466":[251,181,160]},{"983651":[251,181,160]},{"988539":[7,182,160]},{"988657":[7,182,160]},{"988668":[7,182,160]},{"988874":[7,182,160]},{"988902":[7,182,160]},{"989142":[7,182,160]},{"994007":[157,80]},{"994143":[157,80]},{"995192":[106,129,160]},{"996856":[255,181,160]},{"999246":[3,182,160]},{"999265":[3,182,160]},{"999359":[3,182,160]},{"999574":[3,182,160]},{"1002731":[92,57,205,30]},{"1003079":[92,213,197,160]},{"1003229":[34,98,155,160]},{"1003277":[34,98,155,160]},{"1004410":[220,130,160]},{"1004774":[34,79,128,164,234,234]},{"1004919":[92,92,128,164]},{"1005119":[226,181,160]},{"1005176":[234,234,34,111,128,164]},{"1005296":[226,181,160]},{"1007982":[234,234,234,234,234,234,234,234]},{"1008002":[0,128,162]},{"1008025":[34,95]},{"1008028":[160,234,234,234,234,234,234,234,234,234,234,234]},{"1008815":[34,130,128,160,234,234]},{"1009927":[4,240]},{"1009930":[34,38,143,160,234,234]},{"1010175":[173,143,160]},{"1011427":[34,234,169,160,96,234]},{"1011808":[34,168,144]},{"1011812":[234]},{"1012601":[234,234,234,234]},{"1041509":[30]},{"1048568":[32,25,8,49]},{"1048576":[34,8,185,160,48,66,192,27,240,63,192,5,240,59,192,4,240,55,192,12,240,51,192,11,240,47,192,58,240,43,192,73,240,57,192,1,240,53,192,80,240,49,192,2,240,45,192,59,240,30,192,42,240,26,192,13,240,22,192,20,240,18,192,19,240,14,192,41,240,10,135]},{"1048648":[107,199]},{"1048651":[176,249,167]},{"1048655":[107,72,167]},{"1048659":[208,4,104,135]},{"1048664":[107,104,107,72,152,201,73,208,2,169]},{"1048675":[201,80,208,2,169,1,26,207,23,244,126,176,14,175,23,244,126,58,168,104,175,23,244,126,130,200,255,104,130,196,255,169]},{"1048708":[143,211,243,126,169,10,143,204,243,126,107,175,197,243,126,240,6,175,145,80,127,73,1,107,165,138,201,128,208,2,165,35,107,175,87,243,126,240,1,107,175,202,243,126,41,64,72,175,74,128,48,208,5,104,73,64,128,1,104,107,165,27,240,1,107,175,87,243,126,240,1,107,165,138,41,64,72,175,74,128,48,208,5,104,73,64,128,1,104,107,173,224,2,240,13,34,165,128,160,240,7,100,93,156,224,2,100,86,96,175,116,129,48,240,16,34,165,128,160,208,10,32,13,129,169,4,141,44,1,128,5,169,9,141,44,1,107,218,90,169,23,133,93,169,1,141,224,2,133,86,34,138,253,2,122,250,96,175,202,243,126,208,16,175,204,243,126,201,7,208,26,169,8,143,204,243,126,128,14,175,204,243,126,201,8,208,10,169,7,143,204,243,126,34,99,212]},{"1048905":[96,175,164,128,48,208,10,173,12,4,201,12,208,3,156,122,4,107,142,216,2,34,4,157,9,144,1,107,100,174,100,175,107,100,167,194,32,156,24,6,156,26,6,226,32,92,138,187,13,194,32,175,89,243,126,133,12,175,91,243,126,41,255]},{"1048969":[34,149,253,2,34,48,128,191,107,165,16,201,14,3,240,25,201,14,7,240,20,167]},{"1048992":[159]},{"1048994":[195,126,159]},{"1048998":[197,126,230]},{"1049002":[230]},{"1049004":[232,232,136,16,237,107,167]},{"1049012":[159]},{"1049014":[197,126,230]},{"1049018":[230]},{"1049020":[232,232,136,16,241,107,169,9,157,159,3,165,27,208,10,165,138,201,128,208,4,165,140,201,151,107,169,112,72,171,34,204,130,160,34,137,187,164,107,175,74,128,48,240,3,76,86,130,175,160,128,48,240,6,175,83,243,126,240,10,175,197,243,126,201,3,144,2,128,20,169]},{"1049092":[143,202,243,126,175,204,243,126,201,7,208,6,169,8,143,204,243,126,107,175,74,128,48,240,3,76,135,130,165,27,240,17,173,12,4,201,255,208,13,165,160,208,6,175,113,129,48,208,12,76,227,129,175,162,128,48,208,23,76,248,129,169,64,143,202,243,126,175,204,243,126,201,8,208,6,169,7,143,204,243,126,107,175,160,128,48,240,6,175,83,243,126,240,10,175,197,243,126,201,3,144,2,128,26,169,64,143,202,243,126,175,204,243,126,201,7,240,6,201,8,240,2,128,6,169]},{"1049218":[143,204,243,126,107,165,27,240,17,173,12,4,201,255,208,13,165,160,208,6,175,113,129,48,208,12,76,227,129,175,162,128,48,208,23,76,98,130,169]},{"1049258":[143,202,243,126,175,204,243,126,201,7,208,6,169,8,143,204,243,126,107,175,116,129,48,240,8,165,138,41,64,143,202,243,126,107,175,204,243,126,201,14,240,1,107,169]},{"1049303":[143,204,243,126,107,169]},{"1049310":[143,204,243,126,34,69,249]},{"1049318":[107,175,197,243,126,201,1,240,1,107,175,200,243,126,201,3,208,47,175,133,129,48,56,239,110,243,126,144,4,143,115,243,126,175,134,129,48,56,239,67,243,126,144,4,143,117,243,126,175,135,129,48,56,239,119,243,126,144,4,143,118,243,126,128,100,201,2,208,47,175,136,129,48,56,239,110,243,126,144,4,143,115,243,126,175,137,129,48,56,239,67,243,126,144,4,143,117,243,126,175,138,129,48,56,239,119,243,126,144,4,143,118,243,126,128,49,201,4,208,45,175,139,129,48,56,239,110,243,126,144,4,143,115,243,126,175,140,129,48,56,239,67,243,126,144,4,143,117,243,126,175,141,129,48,56,239,119,243,126,144,4,143,118,243,126,107,175,197,243,126,201,1,208,30,175,77,128,48,137,4,240,4,143,202,80,127,137,2,240,4,143,201,80,127,137,1,240,4,143,200,80,127,128,42,175,77,128,48,137,4,240,6,169]},{"1049532":[143,202,80,127,175,77,128,48,137,2,240,6,169]},{"1049546":[143,201,80,127,175,77,128,48,137,1,240,6,169]},{"1049560":[143,200,80,127,107,175,129,129,48,240,15,175,64,243,126,201,3,144,7,56,233,2,143,64,243,126,107,175,196,80,127,201,1,208,1,107,201,255,208,2,26,107,175,74,243,126,208,27,175,202,243,126,208,17,173,12,4,208,6,175,56,128,48,128,10,175,57,128,48,128,4,175,58,128,48,107,175,197,243,126,201,2,144,3,169,1,107,175,204,243,126,107,34,243,131,160,133,29,107,34,204,130,160,175,61,128,48,208,40,175,187,242,126,41,223,143,187,242,126,175,251,242,126,41,223,143,251,242,126,175,22,242,126,41,127,143,22,242,126,175,81,240,126,41,254,143,81,240,126,175,161,128,48,240,10,175,106,240,126,41,127,143,106,240,126,107,218,90,188,128,14,208,5,34,223,133,160,168,34,7,134,160,34,105,141,160,143,152,192,126,156,233,2,192,38,208,21,175,152,192,126,208,15,175,107,243,126,26,41,3,143,107,243,126,208,14,128]},{"1049778":[34,179,145,7,34,157,153,7,24,130,1]},{"1049790":[56,34,235,179,160,122,250,107,218,90,34,35,193,160,188,128,14,208,5,34,212,138,160,168,128,182,8,34,232,151,160,144,42,72,90,175]},{"1049827":[80,127,240,7,34,149,133,160,130,25]},{"1049838":[189,128,14,34,233,150,160,201,3,208,10,72,189,96,14,9,32,157,96,14,104,34,92,220,6,122,104,40,107,8,34,232,151,160,144,247,72,90,175]},{"1049878":[80,127,240,6,34,195,133,160,128,231,189,128,14,128,204,175,152,192,126,208,26,192,32,240,22,192,55,240,18,192,56,240,14,192,57,240,10,34,7,141,160,144,4,169,46,56,107,24,107,175,152,192,126,240,2,56,107,189,94,12,192,32,240,19,192,55,240,15,192,56,240,11,192,57,240,7,72,34,7,141,160,104,107,24,107,175,51,80,127,240,8,58,143,51,80,127,169]},{"1049976":[107,191,128,242,126,107,175,52,80,127,240,6,58,143,52,80,127,107,191,128,242,126,9,64,159,128,242,126,107,72,175,147,129,48,240]},{"1050012":[169,1,143]},{"1050016":[80,127,165,93,201,20,240,25,169]},{"1050026":[143]},{"1050028":[80,127,34,105,141,160,143,153,192,126,34,223,133,160,157,128,14,34,83,150,160,104,107,72,169]},{"1050054":[143]},{"1050056":[80,127,34,105,141,160,143,153,192,126,34,212,138,160,157,128,14,34,83,150,160,104,107,165,27,240,7,34,36,134,160,130,4]},{"1050090":[34,193,135,160,107,72,175,152,192,126,208,7,104,34,88,173,9,128,1,104,72,169,1,143]},{"1050115":[80,127,104,107,72,8,165,27,208,20,194,32,165,138,201,42]},{"1050132":[208,11,175,22,244,126,9,1]},{"1050141":[143,22,244,126,40,104,107,8,194,32,165,160,201,225]},{"1050156":[208,50,175,135,128,48,208,6,175]},{"1050166":[128,48,128,35,218,8,194,48,165]},{"1050176":[72,165,2,72,169]},{"1050182":[128,133]},{"1050185":[169,48]},{"1050188":[133,2,169]},{"1050193":[34,59,150,164,250,134,2,250,134,1,40,250,130,92,1,201,226]},{"1050211":[208,50,175,135,128,48,208,6,175,1,128,48,128,35,218,8,194,48,165]},{"1050231":[72,165,2,72,169]},{"1050237":[128,133]},{"1050240":[169,48]},{"1050243":[133,2,169,1]},{"1050248":[34,59,150,164,250,134,2,250,134,1,40,250,130,37,1,201,234]},{"1050266":[208,50,175,135,128,48,208,6,175,2,128,48,128,35,218,8,194,48,165]},{"1050286":[72,165,2,72,169]},{"1050292":[128,133]},{"1050295":[169,48]},{"1050298":[133,2,169,2]},{"1050303":[34,59,150,164,250,134,2,250,134,1,40,250,130,238]},{"1050318":[201,27,1,208,108,165,34,235,41,1]},{"1050329":[208,50,175,135,128,48,208,6,175,3,128,48,128,35,218,8,194,48,165]},{"1050349":[72,165,2,72,169]},{"1050355":[128,133]},{"1050358":[169,48]},{"1050361":[133,2,169,3]},{"1050366":[34,59,150,164,250,134,2,250,134,1,40,250,130,175]},{"1050381":[175,135,128,48,208,6,175,4,128,48,128,35,218,8,194,48,165]},{"1050399":[72,165,2,72,169]},{"1050405":[128,133]},{"1050408":[169,48]},{"1050411":[133,2,169,4]},{"1050416":[34,59,150,164,250,134,2,250,134,1,40,250,130,125]},{"1050431":[201,38,1,208,50,175,135,128,48,208,6,175,5,128,48,128,35,218,8,194,48,165]},{"1050454":[72,165,2,72,169]},{"1050460":[128,133]},{"1050463":[169,48]},{"1050466":[133,2,169,5]},{"1050471":[34,59,150,164,250,134,2,250,134,1,40,250,130,70]},{"1050486":[201,39,1,208,50,175,135,128,48,208,6,175,6,128,48,128,35,218,8,194,48,165]},{"1050509":[72,165,2,72,169]},{"1050515":[128,133]},{"1050518":[169,48]},{"1050521":[133,2,169,6]},{"1050526":[34,59,150,164,250,134,2,250,134,1,40,250,130,15]},{"1050541":[201,135]},{"1050544":[208,7,175,98,129,48,130,3]},{"1050553":[169,23]},{"1050556":[41,255]},{"1050559":[40,107,8,194,32,165,138,201,3]},{"1050569":[208,107,165,34,201,98,7,144,50,175,135,128,48,208,6,175,64,129,48,128,35,218,8,194,48,165]},{"1050596":[72,165,2,72,169,64,129,133]},{"1050605":[169,48]},{"1050608":[133,2,169]},{"1050613":[34,59,150,164,250,134,2,250,134,1,40,250,130,203,2,175,135,128,48,208,6,175,22,128,48,128,35,218,8,194,48,165]},{"1050646":[72,165,2,72,169,16,128,133]},{"1050655":[169,48]},{"1050658":[133,2,169,6]},{"1050663":[34,59,150,164,250,134,2,250,134,1,40,250,130,153,2,201,5]},{"1050681":[208,50,175,135,128,48,208,6,175,65,129,48,128,35,218,8,194,48,165]},{"1050701":[72,165,2,72,169,64,129,133]},{"1050710":[169,48]},{"1050713":[133,2,169,1]},{"1050718":[34,59,150,164,250,134,2,250,134,1,40,250,130,98,2,201,40]},{"1050736":[208,50,175,135,128,48,208,6,175,66,129,48,128,35,218,8,194,48,165]},{"1050756":[72,165,2,72,169,64,129,133]},{"1050765":[169,48]},{"1050768":[133,2,169,2]},{"1050773":[34,59,150,164,250,134,2,250,134,1,40,250,130,43,2,201,42]},{"1050791":[208,50,175,135,128,48,208,6,175,74,129,48,128,35,218,8,194,48,165]},{"1050811":[72,165,2,72,169,64,129,133]},{"1050820":[169,48]},{"1050823":[133,2,169,10]},{"1050828":[34,59,150,164,250,134,2,250,134,1,40,250,130,244,1,201,48]},{"1050846":[208,107,165,34,201]},{"1050852":[2,176,50,175,135,128,48,208,6,175,67,129,48,128,35,218,8,194,48,165]},{"1050873":[72,165,2,72,169,64,129,133]},{"1050882":[169,48]},{"1050885":[133,2,169,3]},{"1050890":[34,59,150,164,250,134,2,250,134,1,40,250,130,182,1,175,135,128,48,208,6,175,23,128,48,128,35,218,8,194,48,165]},{"1050923":[72,165,2,72,169,16,128,133]},{"1050932":[169,48]},{"1050935":[133,2,169,7]},{"1050940":[34,59,150,164,250,134,2,250,134,1,40,250,130,132,1,201,53]},{"1050958":[208,50,175,135,128,48,208,6,175,68,129,48,128,35,218,8,194,48,165]},{"1050978":[72,165,2,72,169,64,129,133]},{"1050987":[169,48]},{"1050990":[133,2,169,4]},{"1050995":[34,59,150,164,250,134,2,250,134,1,40,250,130,77,1,201,59]},{"1051013":[208,50,175,135,128,48,208,6,175,69,129,48,128,35,218,8,194,48,165]},{"1051033":[72,165,2,72,169,64,129,133]},{"1051042":[169,48]},{"1051045":[133,2,169,5]},{"1051050":[34,59,150,164,250,134,2,250,134,1,40,250,130,22,1,201,66]},{"1051068":[208,50,175,135,128,48,208,6,175,70,129,48,128,35,218,8,194,48,165]},{"1051088":[72,165,2,72,169,64,129,133]},{"1051097":[169,48]},{"1051100":[133,2,169,6]},{"1051105":[34,59,150,164,250,134,2,250,134,1,40,250,130,223]},{"1051120":[201,74]},{"1051123":[208,50,175,135,128,48,208,6,175,70,129,48,128,35,218,8,194,48,165]},{"1051143":[72,165,2,72,169,64,129,133]},{"1051152":[169,48]},{"1051155":[133,2,169,6]},{"1051160":[34,59,150,164,250,134,2,250,134,1,40,250,130,168]},{"1051175":[201,91]},{"1051178":[208,50,175,135,128,48,208,6,175,71,129,48,128,35,218,8,194,48,165]},{"1051198":[72,165,2,72,169,64,129,133]},{"1051207":[169,48]},{"1051210":[133,2,169,7]},{"1051215":[34,59,150,164,250,134,2,250,134,1,40,250,130,113]},{"1051230":[201,104]},{"1051233":[208,50,175,135,128,48,208,6,175,72,129,48,128,35,218,8,194,48,165]},{"1051253":[72,165,2,72,169,64,129,133]},{"1051262":[169,48]},{"1051265":[133,2,169,8]},{"1051270":[34,59,150,164,250,134,2,250,134,1,40,250,130,58]},{"1051285":[201,129]},{"1051288":[208,50,175,135,128,48,208,6,175,73,129,48,128,35,218,8,194,48,165]},{"1051308":[72,165,2,72,169,64,129,133]},{"1051317":[169,48]},{"1051320":[133,2,169,9]},{"1051325":[34,59,150,164,250,134,2,250,134,1,40,250,130,3]},{"1051340":[169,23]},{"1051343":[41,255]},{"1051346":[40,107,8,194,32,165,160,201,200]},{"1051356":[208,50,175,135,128,48,208,6,175,80,129,48,128,35,218,8,194,48,165]},{"1051376":[72,165,2,72,169,80,129,133]},{"1051385":[169,48]},{"1051388":[133,2,169]},{"1051393":[34,59,150,164,250,134,2,250,134,1,40,250,130,242,1,201,51]},{"1051411":[208,50,175,135,128,48,208,6,175,81,129,48,128,35,218,8,194,48,165]},{"1051431":[72,165,2,72,169,80,129,133]},{"1051440":[169,48]},{"1051443":[133,2,169,1]},{"1051448":[34,59,150,164,250,134,2,250,134,1,40,250,130,187,1,201,7]},{"1051466":[208,50,175,135,128,48,208,6,175,82,129,48,128,35,218,8,194,48,165]},{"1051486":[72,165,2,72,169,80,129,133]},{"1051495":[169,48]},{"1051498":[133,2,169,2]},{"1051503":[34,59,150,164,250,134,2,250,134,1,40,250,130,132,1,201,90]},{"1051521":[208,50,175,135,128,48,208,6,175,83,129,48,128,35,218,8,194,48,165]},{"1051541":[72,165,2,72,169,80,129,133]},{"1051550":[169,48]},{"1051553":[133,2,169,3]},{"1051558":[34,59,150,164,250,134,2,250,134,1,40,250,130,77,1,201,6]},{"1051576":[208,50,175,135,128,48,208,6,175,84,129,48,128,35,218,8,194,48,165]},{"1051596":[72,165,2,72,169,80,129,133]},{"1051605":[169,48]},{"1051608":[133,2,169,4]},{"1051613":[34,59,150,164,250,134,2,250,134,1,40,250,130,22,1,201,41]},{"1051631":[208,50,175,135,128,48,208,6,175,85,129,48,128,35,218,8,194,48,165]},{"1051651":[72,165,2,72,169,80,129,133]},{"1051660":[169,48]},{"1051663":[133,2,169,5]},{"1051668":[34,59,150,164,250,134,2,250,134,1,40,250,130,223]},{"1051683":[201,172]},{"1051686":[208,50,175,135,128,48,208,6,175,86,129,48,128,35,218,8,194,48,165]},{"1051706":[72,165,2,72,169,80,129,133]},{"1051715":[169,48]},{"1051718":[133,2,169,6]},{"1051723":[34,59,150,164,250,134,2,250,134,1,40,250,130,168]},{"1051738":[201,222]},{"1051741":[208,50,175,135,128,48,208,6,175,87,129,48,128,35,218,8,194,48,165]},{"1051761":[72,165,2,72,169,80,129,133]},{"1051770":[169,48]},{"1051773":[133,2,169,7]},{"1051778":[34,59,150,164,250,134,2,250,134,1,40,250,130,113]},{"1051793":[201,144]},{"1051796":[208,50,175,135,128,48,208,6,175,88,129,48,128,35,218,8,194,48,165]},{"1051816":[72,165,2,72,169,80,129,133]},{"1051825":[169,48]},{"1051828":[133,2,169,8]},{"1051833":[34,59,150,164,250,134,2,250,134,1,40,250,130,58]},{"1051848":[201,164]},{"1051851":[208,50,175,135,128,48,208,6,175,89,129,48,128,35,218,8,194,48,165]},{"1051871":[72,165,2,72,169,80,129,133]},{"1051880":[169,48]},{"1051883":[133,2,169,9]},{"1051888":[34,59,150,164,250,134,2,250,134,1,40,250,130,3]},{"1051903":[169,62]},{"1051906":[41,255]},{"1051909":[40,107,194,32,165,160,201,200]},{"1051918":[208,4,56,130,82]},{"1051924":[201,51]},{"1051927":[208,4,56,130,73]},{"1051933":[201,7]},{"1051936":[208,4,56,130,64]},{"1051942":[201,90]},{"1051945":[208,4,56,130,55]},{"1051951":[201,6]},{"1051954":[208,4,56,130,46]},{"1051960":[201,41]},{"1051963":[208,4,56,130,37]},{"1051969":[201,172]},{"1051972":[208,4,56,130,28]},{"1051978":[201,222]},{"1051981":[208,4,56,130,19]},{"1051987":[201,144]},{"1051990":[208,4,56,130,10]},{"1051996":[201,164]},{"1051999":[208,4,56,130,1]},{"1052005":[24,226,32,107,90,165,27,208,3,130,230]},{"1052017":[8,194,32,165,160,201,135]},{"1052025":[208,7,175,58,227,48,130,137,1,201,200]},{"1052037":[208,7,175,62,227,48,130,125,1,201,51]},{"1052049":[208,7,175,63,227,48,130,113,1,201,7]},{"1052061":[208,7,175,64,227,48,130,101,1,201,90]},{"1052073":[208,7,175,65,227,48,130,89,1,201,6]},{"1052085":[208,7,175,66,227,48,130,77,1,201,41]},{"1052097":[208,7,175,67,227,48,130,65,1,201,172]},{"1052109":[208,7,175,68,227,48,130,53,1,201,222]},{"1052121":[208,7,175,69,227,48,130,41,1,201,144]},{"1052133":[208,7,175,70,227,48,130,29,1,201,164]},{"1052145":[208,7,175,71,227,48,130,17,1,201,225]},{"1052157":[208,7,175,72,227,48,130,5,1,201,226]},{"1052169":[208,7,175,73,227,48,130,249]},{"1052178":[201,234]},{"1052181":[208,7,175,74,227,48,130,237]},{"1052190":[201,27,1,208,22,165,34,235,41,1]},{"1052201":[208,7,175,75,227,48,130,217]},{"1052210":[175,76,227,48,130,210]},{"1052217":[201,38,1,208,7,175,77,227,48,130,198]},{"1052229":[201,39,1,208,44,175,78,227,48,130,186]},{"1052241":[169]},{"1052244":[130,180]},{"1052247":[8,194,32,165,138,201,3]},{"1052255":[208,21,165,34,201,98,7,144,7,175,79,227,48,130,156]},{"1052271":[175,59,227,48,130,149]},{"1052278":[201,5]},{"1052281":[208,7,175,80,227,48,130,137]},{"1052290":[201,40]},{"1052293":[208,7,175,81,227,48,130,125]},{"1052302":[201,42]},{"1052305":[208,7,175,61,227,48,130,113]},{"1052314":[201,48]},{"1052317":[208,21,165,34,201]},{"1052323":[2,176,7,175,82,227,48,130,94]},{"1052333":[175,60,227,48,130,87]},{"1052340":[201,53]},{"1052343":[208,7,175,83,227,48,130,75]},{"1052352":[201,59]},{"1052355":[208,7,175,84,227,48,130,63]},{"1052364":[201,66]},{"1052367":[208,7,175,85,227,48,130,51]},{"1052376":[201,74]},{"1052379":[208,7,175,85,227,48,130,39]},{"1052388":[201,91]},{"1052391":[208,7,175,86,227,48,130,27]},{"1052400":[201,104]},{"1052403":[208,7,175,87,227,48,130,15]},{"1052412":[201,129]},{"1052415":[208,7,175,88,227,48,130,3]},{"1052424":[169]},{"1052427":[41,255]},{"1052430":[40,122,107,175,17,244,126,41,8,107,175,17,244,126,41,4,107,175,17,244,126,41,128,107,175,16,244,126,41,1,201,1,107,175,16,244,126,41,2,107,175,16,244,126,41,4,107,175,16,244,126,41,8,107,175,16,244,126,41,8,74,74,107,34,48,208,13,175,16,244,126,41,8,240,4,128,5,169,5,189,128,13,107,175,16,244,126,41,16,107,175,16,244,126,41,128,107,175,17,244,126,42,42,42,42,107,175,17,244,126,41,32,107,175,16,244,126,41,32,107,72,175,17,244,126,9,8,143,17,244,126,104,107,72,175,17,244,126,9,4,143,17,244,126,104,107,72,175,17,244,126,9,128,143,17,244,126,104,107,72,175,100,227,48,143,152,192,126,104,34,157,153,7,72,175,16,244,126,9,1,143,16,244,126,104,107,72,175,16,244,126,9,2,143,16,244,126,104,107,72,175,103,227,48,143,152,192,126,104,34,157,153,7,72,175,16,244,126,9,4,143,16,244,126,104,107,72,175,106,227,48,143,152,192,126,104,34,157,153,7,72,175,16,244,126,9,8,143,16,244,126,104,107,72,175,101,227,48,143,152,192,126,104,34,157,153,7,72,175,16,244,126,9,16,143,16,244,126,104,107,72,175,16,244,126,9,32,143,16,244,126,104,107,72,175,92,227,48,143,152,192,126,104,34,157,153,7,72,175,16,244,126,9,128,143,16,244,126,104,107,72,175,17,244,126,9,16,143,17,244,126,188,128,14,208,48,175,135,128,48,208,6,175,19,128,48,128,35,218,8,194,48,165]},{"1052784":[72,165,2,72,169,16,128,133]},{"1052793":[169,48]},{"1052796":[133,2,169,3]},{"1052801":[34,59,150,164,250,134,2,250,134,1,40,250,168,175,56,227,48,143,152,192,126,104,156,233,2,107,72,175,17,244,126,9,32,143,17,244,126,104,107,254,128,13,72,8,194,32,165,160,201,35,1,208,54,175,135,128,48,208,6,175,16,128,48,128,35,218,8,194,48,165]},{"1052872":[72,165,2,72,169,16,128,133]},{"1052881":[169,48]},{"1052884":[133,2,169]},{"1052889":[34,59,150,164,250,134,2,250,134,1,40,250,168,175,90,227,48,128,64,201,30,1,208,54,175,135,128,48,208,6,175,17,128,48,128,35,218,8,194,48,165]},{"1052931":[72,165,2,72,169,16,128,133]},{"1052940":[169,48]},{"1052943":[133,2,169,1]},{"1052948":[34,59,150,164,250,134,2,250,134,1,40,250,168,175,91,227,48,128,5,169]},{"1052970":[160,70,226,32,143,152,192,126,40,104,107,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,27,72,32,99,219,207,150,128,48,144,16,175,153,192,126,208,10,104,175,151,128,48,34,53,145,160,107,104,218,139,75,171,170,191,118,146,160,171,250,201,248,176,1,107,201,249,208,12,175,123,243,126,208,3,169,59,107,169,60,107,201,250,208,7,34,27,218,160,76,53,145,201,251,208,7,34,215,218,160,76,53,145,201,253,208,28,175,153,192,126,208,19,175,91,243,126,207,148,128,48,144,9,175,149,128,48,34,53,145,160,107,169,4,107,201,254,208,60,175,153,192,126,208,19,175,89,243,126,207,144,128,48,144,13,175,145,128,48,34,53,145,160,107,175,89,243,126,201,255,208,3,169,67,107,201]},{"1053166":[208,3,169,67,107,201,1,208,3,169,68,107,201,2,208,3,169,69,107,169,70,107,201,255,208,62,175,153,192,126,208,27,175,22,244,126,41,192,74,74,74,74,74,74,207,146,128,48,144,21,175,147,128,48,34,53,145,160,107,175,22,244,126,41,192,74,74,74,74,74,74,201]},{"1053239":[208,3,169,45,107,201,1,208,3,169,32,107,169,46,107,201,248,208,43,175,153,192,126,208,21,175,64,243,126,26,74,207,152,128,48,144,15,175,153,128,48,34,53,145,160,107,175,64,243,126,26,74,201]},{"1053293":[208,3,169,41,107,169,42,107,107,6,68,69,70,45,32,46,9,9,10,8,5,16,11,44,27,26,28,20,25,12,7,29,47,7,21,18,13,13,14,17,23,40,39,4,4,15,22,3,19,1,30,16]},{"1053351":[48,34,33,36,36,36,35,35,35,41,42,44,43,3,3,52,53,49,51,2,50,54,55,44,67,12,56,57,58,249,60,68,61,62,63,64,44]},{"1053390":[65,36,71,72,72,72,254,255,253,13,250,251,248,248,255,255,255,255,73,74,73,255,255,255,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,44,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,21,72,32,99,219,207,150,128,48,144,10,104,175,151,128,48,34,118,147,160,107,104,218,139,75,171,170,191,112,148,160,171,250,201,248,176,1,107,201,253,208,43,175,89,243,126,207,144,128,48,144,9,175,145,128,48,34,118,147,160,107,201]},{"1053650":[208,3,169,4,107,201,1,208,3,169,4,107,201,2,208,3,169,2,107,169,8,107,201,254,208,44,175,22,244,126,41,192,74,74,74,74,74,74,207,146,128,48,144,9,175,147,128,48,34,118,147,160,107,201]},{"1053705":[208,3,169,4,107,201,1,208,3,169,2,107,169,8,107,201,255,208,29,175,91,243,126,207,148,128,48,144,9,175,149,128,48,34,118,147,160,107,201]},{"1053745":[208,3,169,4,107,169,2,107,201,252,208,12,175,84,243,126,208,3,169,2,107,169,8,107,201,248,208,12,175,84,243,126,208,3,169,8,107,169,2,107,201,250,208,7,34,27,218,160,76,118,147,201,251,208,7,34,215,218,160,76,118,147,107]},{"1053809":[4,2,8,4,2,8,2,4,2,2,2,4,4,4,8,8,8,2,2,4,2,2,2,4,2,4,2,8,8,4,2,10,2,4,2,4,4]},{"1053847":[4,4,8,2,2,8,4,2,8,4,4,8,8,8,4,2,8,2,4,8,2,4,4,2,2,8,8,2,4,4,8,8,8,4,4,4,2,8,8,8,8,4,8,8,8,8,4]},{"1053896":[2,6,2,2,4,8,253,254,255,252,250,251,248,248]},{"1053914":[8,8,8]},{"1053920":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,72,218,139,75,171,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,22,32,99,219,207,150,128,48,144,11,175,151,128,48,34,112,149,160,130,128]},{"1054119":[128,107,201,94,208,22,175,89,243,126,207,144,128,48,144,10,175,145,128,48,34,112,149,160,128,102,128,81,201,95,208,35,175,22,244,126,41,192,208,25,56,128,85,74,74,74,74,74,74,207,146,128,48,144,10,175,147,128,48,34,112,149,160,128,63,128,60,201,96,208,20,175,91,243,126,207,148,128,48,144,10,175,149,128,48,34,112,149,160,128,37,201,98,208,6,34,27,218,160,128,8,201,99,208,4,34,215,218,160,162]},{"1054230":[224,36,176,12,223,43,150,160,208,3,56,128,4,232,128,240,24,171,250,104,107,4,7,8,9,10,11,12,19,21,24,36,42,52,53,54,66,67,69,89,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,255,255,255,255,255,72,218,90,170,175,108,227,48,240,34,138,207,216,244,126,208,15,175,218,244,126,143,153,192,126,175,217,244,126,170,128,12,143,215,244,126,169]},{"1054329":[143,153,192,126,162,107,138,32,149,150,34,53,145,160,34,45,213]},{"1054347":[169]},{"1054349":[143,153,192,126,122,250,104,107,72,8,72,194,32,169]},{"1054365":[143,37,192,126,143,39,192,126,169]},{"1054375":[2,143,43,192,126,226,32,169,36,143,41,192,126,163,1,34,118,147,160,143,42,192,126,143,50,192,126,104,34,112,149,160,176,2,128,27,194,32,169]},{"1054416":[143,44,192,126,143,51,192,126,169]},{"1054426":[8,143,46,192,126,169]},{"1054433":[52,143,48,192,126,40,104,96,32,144,151,34,112,149,160,176,15,169,1,133,6,169,12,34,136,186,13,169,2,72,128,13,169,2,133,6,169,16,34,136,186,13,169,3,72,169,37,133,8,169,192,133,9,100,7,169,126,139,72,171,169,1,143,8,80,127,34,112,223,5,169]},{"1054505":[143,8,80,127,171,165,144,24,105,8,133,144,165,146,26,26,133,146,104,107,32,144,151,34,112,149,160,176,12,169,1,133,6,169,4,34,136,186,13,128,10,169,2,133,6,169,8,34,136,186,13,169,37,133,8,169,192,133,9,100,7,169,126,139,72,171,169,1,143,8,80,127,34,112,223,5,175,115,129,48,208,6,169]},{"1054589":[143,8,80,127,171,165,144,24,105,8,133,144,165,146,26,26,133,146,107,72,175,108,227,48,240,51,104,207,216,244,126,208,31,175,215,244,126,240,12,175,216,244,126,34,83,150,160,169]},{"1054638":[128,13,175,218,244,126,143,153,192,126,175,217,244,126,96,143,215,244,126,169]},{"1054659":[143,153,192,126,169,107,96,104,96,72,175,66,80,127,240,13,170,160,2]},{"1054679":[169]},{"1054682":[143,66,80,127,128,6,162,64,45,160,2]},{"1054694":[104,107,32,17,152,176,35,194,32,165,226,72,56,233,15]},{"1054710":[133,226,165,232,72,56,233,15]},{"1054719":[133,232,226,32,32,17,152,194,32,104,133,232,104,133,226,226,32,107,189,16,13,197,226,189,48,13,229,227,208,14,189]},{"1054751":[13,197,232,189,32,13,229,233,208,2,56,96,24,96,132,11,133,8,189]},{"1054771":[13,133]},{"1054774":[56,229,232,133,6,189,32,13,133,1,189,16,13,133,2,56,229,226,133,7,189,48,13,133,3,107,175,8,80,127,240,14,169]},{"1054809":[143,8,80,127,165,4,41,255,240,133,4,177,8,69,4,107,72,72,169,144,144,133,4,133,6,104,201,232,3,144,8,230,4,56,233,232,3,128,243,201,100]},{"1054851":[144,8,230,5,56,233,100]},{"1054859":[128,243,201,10]},{"1054864":[144,8,230,6,56,233,10]},{"1054872":[128,243,201,1]},{"1054877":[144,8,230,7,56,233,1]},{"1054885":[128,243,165,4,143,4,80,127,165,6,143,6,80,127,104,107,139,75,171,170,74,74,74,74,168,138,41,7,170,185,203,152,127,203,152,160,171,107]},{"1054924":[1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,218,174]},{"1054942":[16,41,127]},{"1054946":[157,2,16,232,232,104,10,41,255,127,9]},{"1054958":[112,157,2,16,232,232,152,157,2,16,232,232,226,32,169,255,157,2,16,142]},{"1054979":[16,169,1,133,20,194,32,107,218,174]},{"1054990":[16,41,127]},{"1054994":[157,2,16,232,232,104,10,41,255,63,157,2,16,232,232,218,187,72,138,24,105,2,16,168,104,84,126,127,24,99,1,250,170,226,32,169,255,157,2,16,142]},{"1055036":[16,169,1,133,20,194,32,107,8,165,93,201,4,208,42,175,86,243,126,208,36,175,1,80,127,240,30,165,138,207,152,80,127,240,22,175,22,244,126,9,4,143,22,244,126,169]},{"1055083":[143,109,243,126,169]},{"1055089":[143,1,80,127,40,175,109,243,126,107,162]},{"1055101":[175,22,244,126,137,4,240,9,41,251,143,22,244,126,169,240,107,169,6,107,34,232,152,9,169]},{"1055127":[143,1,80,127,107,165,93,201,4,208,20,175,86,243,126,208,8,169,1,143,1,80,127,128,6,169]},{"1055154":[143,1,80,127,107,72,165,138,143,152,80,127,104,107,169,32,141,226,2,156,123,3,100,85,156,96,3,107,175,48,128,48,47,20,130,48,240,4,34,221,153,160,107,72,173]},{"1055200":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141]},{"1055230":[67,141,1,67,169,64,141,129,33,169,243,141,130,33,169,126,141,131,33,156,2,67,169,30,141,3,67,169,112,141,4,67,169,128,141,5,67,169,1,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1055304":[67,104,107,8,226,32,175,202,243,126,73,64,143,202,243,126,240,4,169,7,128,2,169,3,143,199,243,126,40,107,72,175,114,129,48,240,10,104,175,139,243,126,34,136,250,13,107,104,34,136,250,13,107,175,114,129,48,240,11,169]},{"1055365":[143,23,192,126,175,139,243,126,107,169]},{"1055376":[143,23,192,126,169,255,107,218,138,10,170,175,202,243,126,73,64,208,1,232,191,96,128,48,250,107,218,175,202,243,126,41,64,208,54,175,59,128,48,240,36,175,104,243,126,15,20,244,126,41,1,208,24,218,191,77,155,160,170,191,104,243,126,31,20,244,126,250,63,87,155,160,208,3,130,98]},{"1055453":[191,66,155,160,16,3,24,128,90,170,128,52,175,59,128,48,240,36,175,104,243,126,15,20,244,126,41,2,208,24,218,191,80,155,160,170,191,104,243,126,31,20,244,126,250,63,91,155,160,208,3,130,44]},{"1055507":[191,70,155,160,170,128,3,56,250,107,191,80,128,48,41,64,208,13,175,116,243,126,63,155,160,2,208,16,24,128,14,175,122,243,126,63,155,160,2,208,3,24,128,1,56,250,107,2,10,3,255,6,8,12,11,7,9,5,1]},{"1055567":[1,1]},{"1055572":[1]},{"1055574":[1,32,32,16]},{"1055579":[2,128,8,16,1,64,4,8,226,32,175,202,243,126,73,64,208,4,169,7,128,2,169,3,143,199,243,126,40,107,175,202,243,126,41,64,240,3,169,7,107,169,3,107,194,32,175,19,130,48,41,255]},{"1055632":[240,5,169,8]},{"1055637":[128,4,175,72,128,48,73,255,255,24,105,1]},{"1055650":[24,101,234,201,24,255,176,3,169,24,255,133,234,201,24,255,226,32,208,3,238]},{"1055672":[2,107,175,19,130,48,41,255]},{"1055681":[240,5,169,8]},{"1055686":[128,7,175,72,128,48,41,255]},{"1055695":[24,101,234,48,3,169]},{"1055703":[133,234,107,175,73,128,48,208,5,165,244,41,16,107,165,240,41,16,73,16,107,173,12,4,41,255]},{"1055730":[201,255]},{"1055733":[208,1,107,175,22,244,126,41,32]},{"1055743":[240,4,169]},{"1055748":[107,173,12,4,41,255]},{"1055755":[201,255]},{"1055758":[107,218,8,226,48,173,12,4,197,31,144,26,74,170,175,111,243,126,159,124,243,126,224]},{"1055782":[208,4,143,125,243,126,224,1,208,4,143,124,243,126,34,10,240,160,40,250,107,175,69,128,48,208,6,169,8,22,133]},{"1055814":[107,169,136,21,133]},{"1055820":[107,175,69,128,48,208,6,169,16,22,133]},{"1055832":[107,169,144,21,133]},{"1055838":[107,175,69,128,48,208,6,169,24,22,133]},{"1055850":[107,169,152,21,133]},{"1055856":[107,175,69,128,48,208,6,169,32,22,133]},{"1055868":[107,169,160,21,133]},{"1055874":[107,175,69,128,48,208,1,107,8,194,48,169,80,45,141,70,22,169,84,45,141,72,22,169,81,45,141,76,22,169,82,45,141,78,22,169,83,45,141,80,22,169,85,45,141,84,22,169,86,45,141,86,22,169,87,45,141,88,22,169,88,45,141,90,22,169,89,45,141,92,22,169,90,45,141,94,22,169,91,45,141,96,22,169,92,45,141,100,22,162]},{"1055966":[169,245,36,157,134,22,157,198,22,232,232,224,32]},{"1055980":[144,240,175,22,244,126,41,32]},{"1055989":[240,3,130,200,1,175,69,128,48,41,1]},{"1056001":[208,3,130,231]},{"1056006":[169,16,40,141,132,22,226,32,169,22,24,111,125,243,126,141,134,22,169,40,105]},{"1056028":[141,135,22,169,22,24,111,128,243,126,141,136,22,169,40,105]},{"1056045":[141,137,22,169,22,24,111,126,243,126,141,140,22,169,40,105]},{"1056062":[141,141,22,169,22,24,111,127,243,126,141,142,22,169,40,105]},{"1056079":[141,143,22,169,22,24,111,134,243,126,141,144,22,169,40,105]},{"1056096":[141,145,22,169,22,24,111,130,243,126,141,148,22,169,40,105]},{"1056113":[141,149,22,169,22,24,111,129,243,126,141,150,22,169,40,105]},{"1056130":[141,151,22,169,22,24,111,132,243,126,141,152,22,169,40,105]},{"1056147":[141,153,22,169,22,24,111,135,243,126,141,154,22,169,40,105]},{"1056164":[141,155,22,169,22,24,111,133,243,126,141,156,22,169,40,105]},{"1056181":[141,157,22,169,22,24,111,131,243,126,141,158,22,169,40,105]},{"1056198":[141,159,22,169,22,24,111,136,243,126,141,160,22,169,40,105]},{"1056215":[141,161,22,169,22,24,111,137,243,126,141,164,22,169,40,105]},{"1056232":[141,165,22,194,32,175,69,128,48,41,2]},{"1056244":[208,3,130,201]},{"1056249":[169,17,40,141,196,22,175,103,243,126,41,64]},{"1056262":[240,6,169,38,40,141,198,22,175,103,243,126,41,8]},{"1056277":[240,6,169,38,40,141,200,22,175,103,243,126,41,32]},{"1056292":[240,6,169,38,40,141,204,22,175,103,243,126,41,16]},{"1056307":[240,6,169,38,40,141,206,22,175,102,243,126,41,32]},{"1056322":[240,6,169,38,40,141,208,22,175,103,243,126,41,2]},{"1056337":[240,6,169,38,40,141,212,22,175,103,243,126,41,4]},{"1056352":[240,6,169,38,40,141,214,22,175,102,243,126,41,128]},{"1056367":[240,6,169,38,40,141,216,22,175,102,243,126,41,16]},{"1056382":[240,6,169,38,40,141,218,22,175,102,243,126,41,64]},{"1056397":[240,6,169,38,40,141,220,22,175,103,243,126,41,1]},{"1056412":[240,6,169,38,40,141,222,22,175,102,243,126,41,8]},{"1056427":[240,6,169,38,40,141,224,22,175,102,243,126,41,4]},{"1056442":[240,6,169,38,40,141,228,22,175,22,244,126,41,32]},{"1056457":[208,3,130,170,1,175,69,128,48,41,4]},{"1056469":[208,3,130,201]},{"1056474":[169,33,40,141,132,22,175,105,243,126,41,64]},{"1056487":[240,6,169,38,40,141,134,22,175,105,243,126,41,8]},{"1056502":[240,6,169,38,40,141,136,22,175,105,243,126,41,32]},{"1056517":[240,6,169,38,40,141,140,22,175,105,243,126,41,16]},{"1056532":[240,6,169,38,40,141,142,22,175,104,243,126,41,32]},{"1056547":[240,6,169,38,40,141,144,22,175,105,243,126,41,2]},{"1056562":[240,6,169,38,40,141,148,22,175,105,243,126,41,4]},{"1056577":[240,6,169,38,40,141,150,22,175,104,243,126,41,128]},{"1056592":[240,6,169,38,40,141,152,22,175,104,243,126,41,16]},{"1056607":[240,6,169,38,40,141,154,22,175,104,243,126,41,64]},{"1056622":[240,6,169,38,40,141,156,22,175,105,243,126,41,1]},{"1056637":[240,6,169,38,40,141,158,22,175,104,243,126,41,8]},{"1056652":[240,6,169,38,40,141,160,22,175,104,243,126,41,4]},{"1056667":[240,6,169,38,40,141,164,22,175,69,128,48,41,8]},{"1056682":[208,3,130,201]},{"1056687":[169,32,44,141,196,22,175,101,243,126,41,64]},{"1056700":[240,6,169,38,44,141,198,22,175,101,243,126,41,8]},{"1056715":[240,6,169,38,44,141,200,22,175,101,243,126,41,32]},{"1056730":[240,6,169,38,44,141,204,22,175,101,243,126,41,16]},{"1056745":[240,6,169,38,44,141,206,22,175,100,243,126,41,32]},{"1056760":[240,6,169,38,44,141,208,22,175,101,243,126,41,2]},{"1056775":[240,6,169,38,44,141,212,22,175,101,243,126,41,4]},{"1056790":[240,6,169,38,44,141,214,22,175,100,243,126,41,128]},{"1056805":[240,6,169,38,44,141,216,22,175,100,243,126,41,16]},{"1056820":[240,6,169,38,44,141,218,22,175,100,243,126,41,64]},{"1056835":[240,6,169,38,44,141,220,22,175,101,243,126,41,1]},{"1056850":[240,6,169,38,44,141,222,22,175,100,243,126,41,8]},{"1056865":[240,6,169,38,44,141,224,22,175,100,243,126,41,4]},{"1056880":[240,6,169,38,44,141,228,22,40,107,8,139,75,171,194,48,162]},{"1056899":[191,194,161,160,157,234,18,191,214,161,160,157,42,19,191,234,161,160,157,106,19,191,254,161,160,157,170,19,191,18,162,160,157,234,19,191,38,162,160,157,42,20,191,58,162,160,157,106,20,191,78,162,160,157,170,20,191,98,162,160,157,234,20,232,232,224,20]},{"1056967":[144,186,175,116,243,126,41,4]},{"1056976":[240,24,169,43,61,141,50,19,169,44,61,141,52,19,169,45,61,141,114,19,169,46,61,141,116,19,175,116,243,126,41,2]},{"1057009":[240,24,169,43,45,141,174,19,169,44,45,141,176,19,169,45,45,141,238,19,169,46,45,141,240,19,175,116,243,126,41,1]},{"1057042":[240,24,169,43,37,141,182,19,169,44,37,141,184,19,169,45,37,141,246,19,169,46,37,141,248,19,175,122,243,126,41,2]},{"1057075":[240,12,169,68,45,141,172,20,169,69,45,141,174,20,175,122,243,126,41,16]},{"1057096":[240,12,169,68,45,141,110,20,169,69,45,141,112,20,175,122,243,126,41,64]},{"1057117":[240,12,169,68,45,141,176,20,169,69,45,141,178,20,175,122,243,126,41,32]},{"1057138":[240,12,169,68,45,141,114,20,169,69,45,141,116,20,175,122,243,126,41,4]},{"1057159":[240,12,169,68,37,141,180,20,169,69,37,141,182,20,175,122,243,126,41,1]},{"1057180":[240,12,169,68,37,141,118,20,169,69,37,141,120,20,175,122,243,126,41,8]},{"1057201":[240,12,169,68,45,141,184,20,169,69,45,141,186,20,171,40,107,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,245,36,245,36,245,36,43,49,44,49,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,61,49,46,49,245,36,245,36,245,36,252,104,252,40,245,36,43,49,44,49,245,36,245,36,43,49,44,49,245,36,252,104,252,40,245,36,61,49,46,49,245,36,245,36,61,49,46,49,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,70,49,71,49,70,49,71,49,70,49,71,49,245,36,252,104,252,40,70,49,71,49,70,49,71,49,70,49,71,49,70,49,71,49,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,33,37,34,37,35,37,36,37,63,37,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,59,33,60,33,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,61,33,62,33,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,59,33,60,33,245,36,245,36,59,33,60,33,245,36,252,104,252,40,245,36,61,33,62,33,245,36,245,36,61,33,62,33,245,36,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,47,37,52,37,53,37,54,37,55,37,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,70,49,71,49,70,49,71,49,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,70,49,71,49,70,49,71,49,70,49,71,49,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,70,49,71,49,70,49,71,49,245,36,245,36,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,194,32,165,160,201,23,1,208,6,226,32,169,160,128,76,226,32,175,132,128,48,201,160,176,66,175,146,80,127,208,23,175,132,128,48,24,111,109,243,126,207,108,243,126,144,4,175,108,243,126,143,146,80,127,175,109,243,126,207,146,80,127,144,19,169]},{"1057824":[143,114,243,126,173,10,2,208,14,169]},{"1057835":[143,146,80,127,56,107,169,8,143,114,243,126,24,107,175,109,243,126,207,108,243,126,144,21,175,108,243,126,143,109,243,126,169]},{"1057869":[143,114,243,126,173,10,2,208,8,56,107,169,160,143,114,243,126,24,107,194,32,165,160,201,23,1,208,6,226,32,169,128,128,61,226,32,175,133,128,48,201,128,176,51,175,147,80,127,208,19,175,133,128,48,24,111,110,243,126,201,128,144,2,169,128,143,147,80,127,175,110,243,126,207,147,80,127,144,8,169]},{"1057950":[143,147,80,127,56,107,169,1,143,115,243,126,24,107,226,48,175,110,243,126,201,128,176,9,169,128,143,115,243,126,226,48,107,226,49,107,218,90,8,160,255,162]},{"1057993":[165,12,201,232,3,144,3,130,24]},{"1058003":[201,100]},{"1058006":[144,3,130,97]},{"1058011":[201,10]},{"1058014":[144,3,130,170]},{"1058019":[201,1]},{"1058022":[144,3,130,243]},{"1058027":[100,10,165,12,201,232,3,144,8,56,233,232,3,230,10,128,243,133,12,192,255,208,10,160,6,165,14,24,121,112,166,133,14,165,14,159]},{"1058064":[201,126,232,232,169,56]},{"1058071":[159]},{"1058073":[201,126,232,232,164,10,152,10,168,185,92,166,159]},{"1058087":[201,126,232,232,169]},{"1058094":[159]},{"1058096":[201,126,232,232,165,14,24,105,8]},{"1058106":[133,14,100,10,165,12,201,100]},{"1058115":[144,8,56,233,100]},{"1058121":[230,10,128,243,133,12,192,255,208,10,160,4,165,14,24,121,112,166,133,14,165,14,159]},{"1058145":[201,126,232,232,169,56]},{"1058152":[159]},{"1058154":[201,126,232,232,164,10,152,10,168,185,92,166,159]},{"1058168":[201,126,232,232,169]},{"1058175":[159]},{"1058177":[201,126,232,232,165,14,24,105,8]},{"1058187":[133,14,100,10,165,12,201,10]},{"1058196":[144,8,56,233,10]},{"1058202":[230,10,128,243,133,12,192,255,208,10,160,2,165,14,24,121,112,166,133,14,165,14,159]},{"1058226":[201,126,232,232,169,56]},{"1058233":[159]},{"1058235":[201,126,232,232,164,10,152,10,168,185,92,166,159]},{"1058249":[201,126,232,232,169]},{"1058256":[159]},{"1058258":[201,126,232,232,165,14,24,105,8]},{"1058268":[133,14,100,10,165,12,201,1]},{"1058277":[144,8,56,233,1]},{"1058283":[230,10,128,243,133,12,192,255,208,10,160]},{"1058295":[165,14,24,121,112,166,133,14,165,14,159]},{"1058307":[201,126,232,232,169,56]},{"1058314":[159]},{"1058316":[201,126,232,232,164,10,152,10,168,185,92,166,159]},{"1058330":[201,126,232,232,169]},{"1058337":[159]},{"1058339":[201,126,232,232,165,14,24,105,8]},{"1058349":[133,14,226,32,138,74,74,74,133,6,10,10,72,165,34,207,34,80,127,144,13,207,35,80,127,176,7,104,34,132,186,13,128,5,104,34,128,186,13,138,74,74,74,40,122,250,96,48,2,49,2,2,2,3,2,18,2,19,2,34,2,35,2,50,2,51,2,4]},{"1058420":[252,255,248,255,218,90,8,194,48,162]},{"1058432":[191,1,200,48,197,160,208,66,191,5,200,48,41,64]},{"1058447":[208,13,175,153,80,127,41,255]},{"1058456":[223,3,200,48,208,44,226,32,191]},{"1058466":[200,48,143,80,80,127,191,5,200,48,143,81,80,127,41,3,10,10,143,96,80,127,191,6,200,48,143,99,80,127,191,7,200,48,143,98,80,127,128,33,191]},{"1058508":[200,48,41,255]},{"1058513":[201,255]},{"1058516":[240,10,232,232,232,232,232,232,232,232,128,160,226,32,169,255,143,81,80,127,130,200]},{"1058539":[226,32,162]},{"1058544":[160]},{"1058547":[152,207,96,80,127,144,3,130,172]},{"1058557":[191,1,201,48,201,255,208,3,130,161]},{"1058568":[191]},{"1058570":[201,48,207,80,80,127,240,3,130,137]},{"1058581":[191,1,201,48,218,187,159,82,80,127,250,191,2,201,48,218,187,159,83,80,127,250,191,3,201,48,218,187,159,84,80,127,250,90,218,169]},{"1058618":[235,152,74,74,24,111,98,80,127,170,191,2,243,126,187,159,85,80,127,168,250,191,4,201,48,240,43,152,223,4,201,48,144,36,122,191,5,201,48,218,187,159,82,80,127,250,191,6,201,48,218,187,159,83,80,127,250,191,7,201,48,218,187,159,84,80,127,250,128,1,122,218,90,218,187,191,82,80,127,250,168,194,32,163,1,170,191,36,168,160,170,32,67,168,122,250,200,200,200,200,232,232,232,232,232,232,232,232,130,74,255,169,1,143,70,80,127,143,68,80,127,175,81,80,127,137,32,240,14,169]},{"1058749":[235,175,98,80,127,170,191,2,243,126,128,2,169]},{"1058763":[143,95,80,127,175,82,80,127,201,255,208,12,175,95,80,127,15,126,173,160,143,95,80,127,175,86,80,127,201,255,208,12,175,95,80,127,15,127,173,160,143,95,80,127,175,90,80,127,201,255,208,12,175,95,80,127,15,128,173,160,143,95,80,127,40,122,250,175,81,80,127,201,255,208,13,104,104,104,254,160,11,189,64,14,92,241,139,6,107]},{"1058856":[128]},{"1058861":[1]},{"1058864":[169,90,143,68,80,127,169,168,143,69,80,127,169,160,143,70,80,127,96,138,24,105,128,17,143,66,80,127,226,48,152,34,53,145,160,34,45,213]},{"1058903":[194,16,96,32,94,168,107,173]},{"1058912":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,1,141]},{"1058942":[67,169,24,141,1,67,169,128,141,21,33,169,128,141,2,67,169,161,141,3,67,169,126,141,4,67,175,81,80,127,41,16,208,3,130,141]},{"1058979":[169,64,141,5,67,156,6,67,169,64,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,64,141,22,33,169,91,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,91,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,91,141,23,33,169,1,141,11,66,130,138]},{"1059120":[169,64,141,5,67,156,6,67,169,96,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,93,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,93,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,160,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,160,141,22,33,169,93,141,23,33,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1059285":[67,96,104,104,104,169,30,72,169,238,72,169,233,72,189,128,14,92,129,135]},{"1059306":[175,81,80,127,201,255,208,3,76,215,169,139,75,171,34,231,244,30,32,37,170,175,81,80,127,137,128,240,22,137,32,208,18,218,175,98,80,127,170,191,2,243,126,240,3,250,128,9,250,128]},{"1059357":[32,66,174,32,66,172,171,107,175,99,80,127,41,7,240,26,201,1,208,3,130,165]},{"1059380":[201,2,208,3,130,227]},{"1059387":[201,3,208,3,130,110,1,201,4,208,1,96,218,162]},{"1059402":[165,26,41,16,240,12,189,185,170,159]},{"1059413":[201,126,232,224,16,144,244,189,201,170,159]},{"1059425":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1059484":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1059515":[248,255]},{"1059520":[2]},{"1059525":[16]},{"1059528":[2]},{"1059531":[248,255]},{"1059536":[2]},{"1059541":[16,64]},{"1059544":[2,169,1,133,6,169,4,34,128,186,13,100,7,165,26,41,8,240,10,169,14,133,8,169,171,133,9,128,8,169,22,133,8,169,171,133,9,34,112,223,5,165,144,24,105,4,133,144,165,146,26,133,146,96]},{"1059602":[70,10]},{"1059605":[2]},{"1059610":[70,74]},{"1059613":[2,218,162]},{"1059617":[165,26,41,64,240,12,189,144,171,159]},{"1059628":[201,126,232,224,16,144,244,189,160,171,159]},{"1059640":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1059699":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1059730":[248,255,132]},{"1059735":[2]},{"1059740":[16]},{"1059743":[2]},{"1059746":[248,255,132]},{"1059751":[2]},{"1059756":[16,64]},{"1059759":[2,218,162]},{"1059763":[165,26,41,64,240,12,189,34,172,159]},{"1059774":[201,126,232,224,16,144,244,189,50,172,159]},{"1059786":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1059845":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1059876":[248,255,142]},{"1059881":[2]},{"1059886":[16]},{"1059889":[2]},{"1059892":[248,255,142]},{"1059897":[2]},{"1059902":[16,64]},{"1059905":[2,218,90,8,160]},{"1059911":[90,152,74,74,168,175,95,80,127,57,126,173,240,3,122,128,48,122,173,238]},{"1059932":[221,32,15,208,39,32,21,174,32,129,173,34,230,131,6,144,3,32,53,174,32,235,173,34,230,131,6,144,15,165,246,41,128,240,9,165,16,201,12,176,3,32,151,172,200,200,200,200,152,207,96,80,127,144,180,40,122,250,96,218,90,187,191,82,80,127,201,14,240,14,201,46,240,10,201,47,240,6,201,48,240,2,128,6,34,40,222,30,48,38,175,81,80,127,41,128,208,46,194,32,175,96,243,126,223,83,80,127,226,32,176,32,169,122,160,1,34,25,226,5,169,60,141,46,1,130,159]},{"1060060":[169,107,160,1,34,25,226,5,169,60,141,46,1,130,143]},{"1060076":[175,81,80,127,41,128,208,17,194,32,175,96,243,126,56,255,83,80,127,143,96,243,126,226,32,191,82,80,127,168,34,157,153,7,191,85,80,127,26,159,85,80,127,138,74,74,170,175,81,80,127,137,128,208,33,175,95,80,127,29,126,173,143,95,80,127,218,138,24,111,98,80,127,170,191,2,243,126,26,240,4,159,2,243,126,250,128,55,137,32,208,25,175,95,80,127,9,7,143,95,80,127,218,175,98,80,127,170,169,1,159,2,243,126,250,128,26,175,95,80,127,29,126,173,143,95,80,127,218,175,98,80,127,170,175,95,80,127,159,2,243,126,250,122,250,96,1,2,4,194,32,165]},{"1060229":[72,226,32,189,48,13,235,189,16,13,194,32,72,90,175,81,80,127,41,3]},{"1060250":[58,10,168,185,55,175,133]},{"1060258":[122,104,24,113]},{"1060263":[24,105,2]},{"1060267":[226,32,133,4,235,133,10,189,32,13,235,189]},{"1060280":[13,194,32,90,200,200,24,113]},{"1060289":[122,72,175,81,80,127,41,128]},{"1060298":[240,7,104,24,105,4]},{"1060305":[128,1,104,226,32,133,5,235,133,11,169,12,133,6,169,14,133,7,194,32,104,133]},{"1060328":[226,32,96,8,226,32,165,4,56,233,10,133,4,165,10,233]},{"1060345":[133,10,165,5,56,233,8,133,5,165,11,233]},{"1060358":[133,11,165,6,24,105,20,133,6,169,40,133,7,40,96,169,8,133,2,133,3,165,34,24,105,4,133]},{"1060386":[165,35,105]},{"1060390":[133,8,165,32,105,8,133,1,165,33,105]},{"1060402":[133,9,96,218,34]},{"1060408":[245,28,100,94,34,179,145,7,250,96,139,75,171,218,90,138,143,97,80,127,162]},{"1060430":[160]},{"1060432":[175,81,80,127,41,3,201,3,208,5,32,115,174,128,4,201,2,208,5,32,115,174,128,4,201,1,208,3,32,115,174,122,250,171,96,175,95,80,127,57,126,173,240,3,130,178]},{"1060479":[90,175,81,80,127,41,3,58,10,168,194,32,185,55,175,133]},{"1060496":[163,1,10,10,168,177]},{"1060503":[143,37,192,126,200,200,175,81,80,127,41,128]},{"1060516":[208,8,177]},{"1060520":[143,39,192,126,128,10,177]},{"1060528":[24,105,4]},{"1060532":[143,39,192,126,226,32,122,191,82,80,127,201,46,208,2,128,15,201,47,208,2,128,9,201,48,240,5,185,85,175,128,2,169,192,235,175,81,80,127,41,16,240,5,235,56,233,34,235,235,143,41,192,126,191,82,80,127,34,118,147,160,143,42,192,126,169]},{"1060599":[143,43,192,126,191,82,80,127,34,112,149,160,176,10,169,2,143,44,192,126,169,1,128,11,169]},{"1060625":[143,44,192,126,32,42,176,169,2,218,72,175,97,80,127,170,104,32,225,175,250,175,81,80,127,41,128,208,3,32,88,175,200,232,232,232,232,96,61,175,65,175,73,175,8]},{"1060671":[40]},{"1060673":[240,255,40]},{"1060677":[32]},{"1060679":[40]},{"1060681":[216,255,40]},{"1060685":[8]},{"1060687":[40]},{"1060689":[56]},{"1060691":[40]},{"1060693":[198,200,202,139,75,171,218,90,8,194,32,90,175,81,80,127,41,3]},{"1060712":[58,10,168,185,55,175,133]},{"1060720":[185,207,175,133,2,122,90,152,10,10,168,177]},{"1060733":[133,14,152,74,168,177,2,143,34,80,127,200,177,2,143,35,80,127,122,191,83,80,127,133,12,240,50,32,194,164,226,32,133,6,100,7,72,169]},{"1060772":[133,8,169,201,133,9,169,126,72,171,218,72,175,97,80,127,170,104,34,112,223,5,250,163,1,10,10,24,101,144,133,144,104,24,101,146,133,146,40,122,250,171,96,213,175,215,175,219,175]},{"1060822":[255]},{"1060824":[128,128,255]},{"1060828":[96,96,144,144,255,218,90,72,133,6,165,32,201,98,176,10,163,1,10,10,34,128,186,13,128,8,163,1,10,10,34,132,186,13,163,1,133,6,100,7,169,37,133,8,169,192,133,9,169,126,139,72,171,34,112,223,5,171,163,1,10,10,24,101,144,133,144,165,146,24,99,1,133,146,104,122,250,96,218,162]},{"1060909":[194,32,191,37,192,126,24,105,4]},{"1060919":[159,37,192,126,159,45,192,126,191,39,192,126,24,105,8]},{"1060935":[159,47,192,126,191,41,192,126,24,105,16]},{"1060947":[159,49,192,126,191,43,192,126,159,51,192,126,226,32,250,96,175,92,227,48,143,153,192,126,175,135,128,48,208,6,175,18,128,48,128,35,218,8,194,48,165]},{"1060989":[72,165,2,72,169,16,128,133]},{"1060998":[169,48]},{"1061001":[133,2,169,2]},{"1061006":[34,59,150,164,250,134,2,250,134,1,40,250,157,128,14,34,83,150,160,107,72,189,128,14,34,233,150,160,104,107,72,188,128,14,104,34,51,144,160,107,169,8,157,80,15,169]},{"1061053":[143]},{"1061055":[80,127,32,45,177,143,153,192,126,32,20,177,34,83,150,160,107,72,175]},{"1061075":[80,127,240,6,34,187,176,160,128,7,32,20,177,34,61,151,160,104,107,32,45,177,143,152,192,126,32,20,177,201,36,208,24,90,160,36,34,8,185,160,122,175,111,243,126,26,143,111,243,126,169,47,34,138,187,13,107,90,168,34,157,153,7,122,107,165,160,201,115,208,6,175,96,129,48,128,12,201,140,208,6,175,97,129,48,128,2,169,36,96,165,160,201,115,208,6,175,98,227,48,128,12,201,140,208,6,175,99,227,48,128,2,169]},{"1061189":[96,185,121,55,158,218,173,228,80,133,8,173,230,80,133,10,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,173,224,80,133,12,173,226,80,133,14,24,165,12,42,133,12,165,14,42,133,14,24,165,12,42,133,12,165,14,42,133,14,165,8,69,12,141,242,80,165,10,69,14,141,244,80,173,228,80,133,8,173,230,80,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,173,224,80,133,12,173,226,80,133,14,24,165,14,106,133,14,165,12,106,133,12,24,165,14,106,133,14,165,12,106,133,12,24,165,14,106,133,14,165,12,106,133,12,165,8,69,12,141,246,80,165,10,69,14,141,248,80,173,242,80,24,109,246,80,141,242,80,173,244,80,109,248,80,141,244,80,173,232,80,77,224,80,133,8,173,234,80,77,226,80,133,10,173,236,80,41,3]},{"1061458":[77,240,80,10,10,170,189,208,80,77,228,80,133,12,189,210,80,77,230,80,133,14,165,8,24,101,12,141,246,80,165,10,101,14,141,248,80,173,242,80,77,246,80,133,8,173,244,80,77,248,80,133,10,250,96,8,139,226,48,169,127,72,171,100,5,162]},{"1061525":[191,94,179,160,197,4,144,3,232,128,245,191,95,179,160,133,6,100,7,194,32,138,10,10,170,191,96,179,160,141,232,80,191,98,179,160,141,234,80,173]},{"1061566":[81,141,224,80,173,2,81,141,226,80,173,232,80,74,74,41,3]},{"1061584":[141,240,80,165,4,58,141,236,80,240,56,10,10,170,189,252,80,141,228,80,189,254,80,141,230,80,32,74,177,173,236,80,10,10,170,189]},{"1061621":[81,56,229,8,157]},{"1061627":[81,141,224,80,189,2,81,229,10,157,2,81,141,226,80,173,236,80,58,141,236,80,128,198,165,4,58,10,10,170,189]},{"1061659":[81,141,228,80,189,2,81,141,230,80,32,74,177,173]},{"1061674":[81,56,229,8,141]},{"1061680":[81,141,224,80,173,2,81,229,10,141,2,81,141,226,80,173,232,80,56,239,70,177,160,141,232,80,173,234,80,239,72,177,160,141,234,80,198,6,240,3,130,109,255,171,40,107,1,32,32,55,239,198,72,175,17,244,126,9,1,143,17,244,126,104,107,72,175,17,244,126,9,2,143,17,244,126,104,107,175,17,244,126,41,1,107,175,17,244,126,41,2,107,72,165,138,201,3,240,6,34,113,179,160,128,4,34,100,179,160,104,107,34,105,141,160,143,153,192,126,34,193,135,160,72,34,83,150,160,169,1,143,51,80,127,143,52,80,127,34,140,179,160,169,235,143]},{"1061826":[254,127,34,93,246,29,104,153,128,14,165,34,153,16,13,165,35,153,48,13,165,32,153]},{"1061850":[13,165,33,153,32,13,169]},{"1061858":[153,32,15,169,127,153,112,15,107,72,8,34,21,180,160,144,31,156,18,1,156,239,3,169]},{"1061883":[133,93,194,32,165,138,201,48]},{"1061892":[208,10,226,32,169,2,133,47,169,60,133,70,226,32,40,104,107,194,32,165,138,201,3]},{"1061916":[208,13,165,34,201,98,7,176,4,56,130,19]},{"1061929":[128,16,201,48]},{"1061934":[208,11,165,34,201]},{"1061940":[2,144,4,56,130,1]},{"1061947":[24,226,32,107,191,97,210,160,145,146,107,201,2,240,44,194,32,165,8,133]},{"1061968":[226,32,34,16,247,8,169,52,145,144,200,191,97,211,160,16,2,165,116,10,9,48,145,144,200,90,152,56,233,4,74,74,168,169]},{"1062003":[145,146,122,107,175,36,128,48,143,114,243,126,107,175,36,128,48,143,114,243,126,175,37,128,48,143,115,243,126,107,175,36,128,48,240,10,175,109,243,126,207,108,243,126,208,17,175,37,128,48,240,8,175,110,243,126,201,128,208,3,169]},{"1062065":[107,169,1,107,175,126,129,48,208,7,169,72,34,240,225,5,107,90,34,47,241,6,144,88,175,92,243,126,201,2,208,5,169,28,72,128,55,175,93,243,126,201,2,208,5,169,29,72,128,42,175,94,243,126,201,2,208,5,169,30,72,128,29,175,95,243,126,201,2,208,5,169,31,72,128,16,169,10,157,128,13,169,81,160,1,34,240,225,5,76,29,181,169,2,157,128,13,100,47,169,1,141,228,2,104,141,232,28,158,176,14,24,122,107,165,160,201,21,8,208,83,169,114,34,93,246,29,173,216,15,153,16,13,173,217,15,153,48,13,173,218,15,56,233,64,153]},{"1062212":[13,173,219,15,233]},{"1062218":[153,32,13,169,1,153,160,13,169,187,34,93,246,29,169,8,153,208,13,173,216,15,153,16,13,173,217,15,153,48,13,173,218,15,56,233,32,153]},{"1062257":[13,173,219,15,233]},{"1062263":[153,32,13,158,208,13,40,107,175,1,254,127,207,32,128,48,176,5,34,113,186,13,107,175]},{"1062288":[254,127,208,245,169,4,107,34,227,188,164,173,196,4,207,33,128,48,240,15,34,113,186,13,41,7,201,7,240,27,34,245,188,164,107,169,51,133,200,173,3,4,41,64,208,11,175,107,227,48,143,152,192,126,169,7,107,34,245,188,164,34,113,186,13,41,7,201,7,208,2,169]},{"1062361":[107,169]},{"1062364":[128,107,169,1,128,103,165,160,201,32,208,51,169,2,34,78,182,160,72,175,134,128,48,240,4,104,9,1,107,104,107,169,3,128,74,169,4,128,70,169,5,128,66,169,6,128,62,169,7,128,58,169,8,128,54,169,9,128,50,169,10,128,46,169,11,34,78,182,160,72,175,134,128,48,240,4,104,9,1,107,104,107,169,12,128,23,169,13,128,19,169,14,34,78,182,160,72,175,134,128,48,240,4,104,41,254,107,104,107,34,78,182,160,107,218,8,194,32,41,127]},{"1062485":[10,170,191]},{"1062489":[82,127,26,41,255,3,159]},{"1062497":[82,127,170,10,191]},{"1062503":[128,175,40,250,107,218,8,194,48,162]},{"1062515":[191,163,182,160,159]},{"1062521":[82,127,232,232,191,163,182,160,159]},{"1062531":[82,127,232,232,191,163,182,160,159]},{"1062541":[82,127,232,232,191,163,182,160,159]},{"1062551":[82,127,232,232,224,127]},{"1062558":[144,211,40,250,107]},{"1062565":[64]},{"1062567":[128]},{"1062569":[192]},{"1062572":[1,64,1,128,1,192,1]},{"1062580":[2,64,2,128,2,192,2]},{"1062588":[3,64,3,128,3,192,3,165,138,201,112,208,25,175,240,242,126,41,32,208,17,160,2,34,241,182,8,144,9,169,3,141,198,4,100,176,100,200,107,165,138,201,71,208,25,175,199,242,126,41,32,208,17,160,3,34,241,182,8,144,9,169,4,141,198,4,100,176,100,200,107,100,80,156,193,15,72,175,34,128,48,208,4,34,195,182,160,175,35,128,48,208,4,34,227,182,160,104,107,72,169]},{"1062690":[143,65,80,127,175,34,128,48,201,1,208,4,34,195,182,160,175,35,128,48,201,1,208,4,34,227,182,160,104,107,72,175,34,128,48,201,2,208,4,34,195,182,160,175,35,128,48,201,2,208,4,34,227,182,160,104,107,165,244,137,64,208,63,137,32,208,39,165,240,137,32,208,31,175,22,244,126,41,32,240,19,175,22,244,126,41,223,143,22,244,126,165,27,240,5,169,32,141,47,1,34,65,223,13,24,107,175,22,244,126,9,32,143,22,244,126,169,32,141,47,1,34,65,223,13,107,169,16,141,7,2,173,2,2,201,2,208,28,175,140,243,126,41,192,201,192,208,108,175,65,243,126,73,3,143,65,243,126,169,32,141,47,1,130,205]},{"1062856":[201,1,208,84,175,142,243,126,41,192,201,192,208,76,218,162]},{"1062873":[224,10,176,13,189,74,12,201,9,208,3,250,128,95,232,128,239,250,175,129,129,48,240,23,165,160,5,161,240,17,175,64,243,126,201,3,144,35,56,233,2,143,64,243,126,128,62,175,64,243,126,56,233,1,73,2,24,105,1,143,64,243,126,169,32,141,47,1,130,117]},{"1062944":[128,2,128,34,201,5,208,28,175,140,243,126,41,48,201,48,208,240,175,68,243,126,73,3,143,68,243,126,169,32,141,47,1,130,81]},{"1062980":[128,2,128,72,201,13,208,56,173,122,3,201,1,240,61,175,140,243,126,137,4,240,53,41,3,240,49,175,76,243,126,201,1,208,16,175,140,243,126,41,1,240,4,169,3,128,6,169,2,128,2,169,1,143,76,243,126,169,32,141,47,1,128,17,201,16,208,8,34,151,184,160,128,7,24,107,169,60,141,46,1,56,107,165,244,41,64,240,37,175,79,243,126,240,28,218,26,201,5,144,2,169,1,170,191,91,243,126,208,2,162,1,138,143,79,243,126,169,32,141,47,1,250,169]},{"1063105":[107,165,244,41,12,107,165,246,41,64,240,15,169,16,141,7,2,169,32,141,47,1,169,7,141]},{"1063131":[2,107,165,246,41,64,240,19,169,16,141,7,2,169,32,141,47,1,238]},{"1063151":[2,156,5,2,169]},{"1063157":[107,165,244,41,12,107,175,67,244,126,240,1,107,72,218,8,76,249,185,72,218,8,175,152,192,126,240,3,130,229]},{"1063188":[192,12,208,13,175,140,243,126,9,128,143,140,243,126,130,212]},{"1063205":[192,42,208,13,175,140,243,126,9,64,143,140,243,126,130,195]},{"1063222":[192,41,208,13,175,140,243,126,9,40,143,140,243,126,130,178]},{"1063239":[192,13,208,13,175,140,243,126,9,16,143,140,243,126,130,161]},{"1063256":[192,19,208,13,175,140,243,126,9,4,143,140,243,126,130,144]},{"1063273":[192,20,208,13,175,140,243,126,9,2,143,140,243,126,130,127]},{"1063290":[192,74,208,13,175,140,243,126,9,1,143,140,243,126,130,110]},{"1063307":[192,11,208,19,175,117,129,48,208,10,175,142,243,126,9,128,143,142,243,126,130,87]},{"1063330":[192,58,208,13,175,142,243,126,9,128,143,142,243,126,130,70]},{"1063347":[192,59,208,29,175,142,243,126,9,64,143,142,243,126,175,117,129,48,208,10,175,142,243,126,9,128,143,142,243,126,130,37]},{"1063380":[192,67,208,19,175,117,129,48,240,10,175,142,243,126,9,128,143,142,243,126,130,14]},{"1063403":[192,88,208,10,175,142,243,126,9,64,143,142,243,126,175,67,244,126,240,3,130,245,4,175,152,192,126,240,3,130,187]},{"1063435":[192,32,208,3,130,143,2,192,38,208,3,130,136,2,192,46,208,3,130,129,2,192,47,208,3,130,122,2,192,48,208,3,130,115,2,192,55,208,3,130,108,2,192,56,208,3,130,101,2,192,57,208,3,130,94,2,192]},{"1063493":[208,3,130,87,2,192,4,144,14,192,73,240,10,192,80,240,6,192,94,240,2,128,3,130,103]},{"1063519":[192,59,208,3,130,96]},{"1063526":[165,27,240,92,173,233,2,201,1,240,85,8,194,32,173,142,4,201,18,1,208,3,130,67]},{"1063551":[201,15,1,208,3,130,59]},{"1063559":[201,16,1,208,3,130,51]},{"1063567":[201,28,1,208,3,130,43]},{"1063575":[201,31,1,208,3,130,35]},{"1063583":[201,255]},{"1063586":[208,3,130,27]},{"1063591":[201,20,1,208,3,130,19]},{"1063599":[201,21,1,208,3,130,11]},{"1063607":[201,22,1,208,3,130,3]},{"1063615":[40,128,4,40,130,49,4,175,87,192,126,201,1,208,3,130,141,1,165,27,208,3,130,134,1,226,32,173,12,4,201]},{"1063647":[208,2,128,4,201,2,208,21,192,50,208,3,130,179,1,175,52,244,126,24,105,16,143,52,244,126,130,98,1,201,4,208,30,175,54,244,126,26,41,7,170,175,54,244,126,41,248,143,54,244,126,138,15,54,244,126,143,54,244,126,130,64,1,201,6,208,14,175,53,244,126,24,105,32,143,53,244,126,130,46,1,201,8,208,30,175,53,244,126,26,41,3,170,175,53,244,126,41,252,143,53,244,126,138,15,53,244,126,143,53,244,126,130,12,1,201,10,208,34,72,218,175,57,244,126,26,41,15,170,175,57,244,126,41,240,143,57,244,126,138,15,57,244,126,143,57,244,126,250,104,130,230]},{"1063800":[201,12,208,34,72,218,175,52,244,126,26,41,15,170,175,52,244,126,41,240,143,52,244,126,138,15,52,244,126,143,52,244,126,250,104,130,192]},{"1063838":[201,14,208,34,72,218,175,56,244,126,26,41,15,170,175,56,244,126,41,240,143,56,244,126,138,15,56,244,126,143,56,244,126,250,104,130,154]},{"1063876":[201,16,208,14,175,55,244,126,24,105,16,143,55,244,126,130,136]},{"1063894":[201,18,208,14,175,56,244,126,24,105,16,143,56,244,126,130,118]},{"1063912":[201,20,208,32,175,53,244,126,24,105,4,41,28,170,175,53,244,126,41,227,143,53,244,126,138,15,53,244,126,143,53,244,126,130,82]},{"1063948":[201,22,208,34,72,218,175,55,244,126,26,41,15,170,175,55,244,126,41,240,143,55,244,126,138,15,55,244,126,143,55,244,126,250,104,130,44]},{"1063986":[201,24,208,14,175,57,244,126,24,105,16,143,57,244,126,130,26]},{"1064004":[201,26,208,22,175,54,244,126,24,105,8,143,54,244,126,175,102,243,126,41,4,208,3,32,229,192,175,152,192,126,208,14,192,59,208,10,175,42,244,126,137,32,240,2,128,47,175,87,192,126,201,1,240,39,175,85,243,126,208,9,175,50,244,126,26,143,50,244,126,175,83,243,126,208,9,175,51,244,126,26,143,51,244,126,175,35,244,126,26,143,35,244,126,175,152,192,126,240,3,130,77,2,192]},{"1064108":[208,9,32,127,191,32,176,191,130,64,2,192,1,208,6,32,127,191,130,54,2,192,2,208,6,32,127,191,130,44,2,192,3,208,6,32,127,191,130,34,2,192,4,208,6,32,176,191,130,24,2,192,5,208,6,32,176,191,130,14,2,192,6,208,6,32,176,191,130,4,2,192,7,144,10,192,14,176,6,32,225,191,130,246,1,192,20,208,9,32,61,191,32,225,191,130,233,1,192,15,144,10,192,23,176,6,32,225,191,130,219,1,192,23,208,6,32,69,192,130,209,1,192,24,144,10,192,26,176,6,32,225,191,130,195,1,192,26,208,9,32,94,191,32,225,191,130,182,1,192,29,208,6,32,225,191,130,172,1,192,27,144,10,192,32,176,6,32,237,191,130,158,1,192,32,208,6,32,109,192,130,148,1,192,33,208,6,32,225,191,130,138,1,192,34,144,10,192,36,176,6,32,137,192,130,124,1,192,36,208,6,32,153,192,130,114,1,192,37,208,6,32,185,192,130,104,1,192,38,208,3,130,97,1,192,39,208,6,32,1,193,130,87,1,192,40,208,6,32,1,193,130,77,1,192,41,208,6,32,225,191,130,67,1,192,42,144,10,192,46,176,6,32,225,191,130,53,1,192,49,208,6,32,1,193,130,43,1,192,50,208,6,32,217,192,130,33,1,192,51,208,6,32,23,193,130,23,1,192,55,144,10,192,58,176,6,32,9,192,130,9,1,192,58,144,10,192,60,176,6,32,206,191,130,251]},{"1064444":[192,60,208,6,32,225,191,130,241]},{"1064454":[192,61,208,6,32,225,191,130,231]},{"1064464":[192,62,144,10,192,64,176,6,32,97,192,130,217]},{"1064478":[192,72,208,6,32,225,191,130,207]},{"1064488":[192,73,208,6,32,127,191,130,197]},{"1064498":[192,74,208,9,32,61,191,32,225,191,130,184]},{"1064511":[192,75,208,9,32,28,191,32,237,191,130,171]},{"1064524":[192,76,208,9,32,37,192,32,1,193,130,158]},{"1064537":[192,77,144,10,192,80,176,6,32,37,192,130,144]},{"1064551":[192,80,208,6,32,127,191,130,134]},{"1064561":[192,81,144,10,192,85,176,6,32,37,192,130,120]},{"1064575":[192,88,208,6,32,206,191,130,110]},{"1064585":[192,94,208,6,32,127,191,130,100]},{"1064595":[192,95,208,6,32,176,191,130,90]},{"1064605":[192,96,208,6,32,137,192,130,80]},{"1064615":[192,97,208,6,32,237,191,130,70]},{"1064625":[192,100,144,10,192,102,176,6,32,206,191,130,56]},{"1064639":[192,112,144,10,192,128,176,6,32,23,193,130,42]},{"1064653":[192,128,144,10,192,144,176,6,32,185,192,130,28]},{"1064667":[192,144,144,10,192,160,176,6,32,217,192,130,14]},{"1064681":[192,160,144,10,192,176,176,6,32,153,192,130]},{"1064695":[40,250,104,107,194,32,175,88,244,126,208,22,175,90,244,126,208,16,175,62,244,126,143,88,244,126,175,64,244,126,143,90,244,126,226,32,96,194,32,175,92,244,126,208,22,175,94,244,126,208,16,175,62,244,126,143,92,244,126,175,64,244,126,143,94,244,126,226,32,96,194,32,175,96,244,126,208,22,175,98,244,126,208,16,175,62,244,126,143,96,244,126,175,64,244,126,143,98,244,126,226,32,96,194,32,175,100,244,126,208,22,175,102,244,126,208,16,175,62,244,126,143,100,244,126,175,64,244,126,143,102,244,126,226,32,96,32,251,190,152,201,80,208,2,169,1,201,73,208,2,169]},{"1064847":[26,207,23,244,126,144,14,72,175,23,244,126,41,248,3,1,143,23,244,126,104,175,34,244,126,24,105,32,143,34,244,126,96,175,34,244,126,24,105,8,41,24,170,175,34,244,126,41,231,143,34,244,126,138,15,34,244,126,143,34,244,126,96,192,59,208,15,175,42,244,126,137,32,240,1,96,9,32,143,42,244,126,175,33,244,126,24,105,8,143,33,244,126,96,175,33,244,126,26,41,7,170,175,33,244,126,41,248,143,33,244,126,138,15,33,244,126,143,33,244,126,96,175,41,244,126,26,41,3,170,175,41,244,126,41,252,143,41,244,126,138,15,41,244,126,143,41,244,126,96,72,218,175,82,244,126,26,41,15,170,175,82,244,126,41,240,143,82,244,126,138,15,82,244,126,143,82,244,126,250,104,96,175,72,244,126,26,41,31,170,175,72,244,126,41,224,143,72,244,126,138,15,72,244,126,143,72,244,126,96,175,41,244,126,24,105,16,143,41,244,126,96,175,34,244,126,26,41,7,170,175,34,244,126,41,248,143,34,244,126,138,15,34,244,126,143,34,244,126,96,175,36,244,126,24,105,64,143,36,244,126,96,32,153,192,107,72,218,175,36,244,126,26,41,63,170,175,36,244,126,41,192,143,36,244,126,138,15,36,244,126,143,36,244,126,250,104,96,72,218,175,40,244,126,26,41,15,170,175,40,244,126,41,240,143,40,244,126,138,15,40,244,126,143,40,244,126,250,104,96,175,39,244,126,24,105,16,143,39,244,126,96,175,42,244,126,26,41,31,170,175,42,244,126,41,224,143,42,244,126,138,15,42,244,126,143,42,244,126,96,175,42,244,126,41,128,208,13,175,42,244,126,9,128,143,42,244,126,32,225,191,96,175,40,244,126,24,105,16,143,40,244,126,96,32,39,193,107,175,89,243,126,208,12,175,82,244,126,24,105,16,143,82,244,126,96,201,255,240,240,201,1,208,12,175,37,244,126,24,105,16,143,37,244,126,96,201,2,208,32,72,218,175,37,244,126,26,41,15,170,175,37,244,126,41,240,143,37,244,126,138,15,37,244,126,143,37,244,126,250,104,96,201,3,208,12,175,38,244,126,24,105,16,143,38,244,126,96,201,4,208,31,72,218,175,38,244,126,26,41,15,170,175,38,244,126,41,240,143,38,244,126,138,15,38,244,126,143,38,244,126,250,104,96,175,67,243,126,208,17,175,117,243,126,240,11,58,143,117,243,126,169,1,143,67,243,126,34,127,219,13,34,10,240,160,107,143,117,243,126,173,3,3,208,14,169,4,141,2,2,169,1,141,3,3,34,120,250,13,107,173,2,2,41,255]},{"1065443":[201,2]},{"1065446":[208,14,175,140,243,126,41,192]},{"1065455":[201,192]},{"1065458":[240,79,128,64,201,1]},{"1065465":[208,14,175,142,243,126,41,192]},{"1065474":[201,192]},{"1065477":[240,60,128,45,201,5]},{"1065484":[208,14,175,140,243,126,41,48]},{"1065493":[201,48]},{"1065496":[240,41,128,26,201,13]},{"1065503":[208,16,175,140,243,126,137,4]},{"1065512":[240,12,41,3]},{"1065517":[208,20,128,5,201,16]},{"1065524":[240,5,169,96,124,128,19,173,7,2,41,32]},{"1065537":[208,5,169,79,61,128,6,32,82,194,169,62,45,153,196,255,107,185,192,255,41,255,239,153,192,255,185,194,255,41,255,239,153,194,255,185,254,255,41,255,239,153,254,255,185,4]},{"1065584":[41,255,239,153,4]},{"1065590":[185,62]},{"1065593":[41,255,239,153,62]},{"1065599":[185,68]},{"1065602":[41,255,239,153,68]},{"1065608":[185,128]},{"1065611":[41,255,239,153,128]},{"1065617":[185,130]},{"1065620":[41,255,239,153,130]},{"1065626":[185,190,255,41,255,239,153,190,255,185,196,255,41,255,239,153,196,255,185,132]},{"1065647":[41,255,239,153,132]},{"1065653":[185,126]},{"1065656":[41,255,239,153,126]},{"1065662":[96,175,140,243,126,41,252,9,1,143,140,243,126,169,3,143,76,243,126,107,175,114,129,48,240,1,107,173,12,4,201,255,107,165,4,41,255]},{"1065700":[201,144]},{"1065703":[208,3,169,127]},{"1065708":[9]},{"1065710":[36,143,100,199,126,165,5,41,255]},{"1065720":[9]},{"1065722":[36,143,102,199,126,107,175,114,129,48,240,5,175,139,243,126,107,191,124,243,126,107,72,175,114,129,48,240,6,104,143,139,243,126,107,104,159,124,243,126,107,72,34,127,242,160,34,189,130,160,32,222,128,175,114,129,48,240,10,104,175,139,243,126,143,111,243,126,107,104,143,111,243,126,107,100,2,100,3,194,48,107,34,93,246,29,175,93,227,48,143,153,192,126,175,135,128,48,208,6,175,20,128,48,128,35,218,8,194,48,165]},{"1065834":[72,165,2,72,169,16,128,133]},{"1065843":[169,48]},{"1065846":[133,2,169,4]},{"1065851":[34,59,150,164,250,134,2,250,134,1,40,250,153,160,13,34,83,150,160,107,159,92,243,126,72,175,79,243,126,208,6,138,26,143,79,243,126,104,107,173,218,2,208,36,175]},{"1065897":[80,127,240,23,175,93,227,48,143,153,192,126,189,160,13,34,83,150,160,169]},{"1065918":[143]},{"1065920":[80,127,128,7,189,160,13,34,233,150,160,107,169]},{"1065934":[157,192,13,72,169,1,143]},{"1065942":[80,127,165,93,201,20,240,68,169]},{"1065952":[143]},{"1065954":[80,127,175,56,227,48,143,153,192,126,175,135,128,48,208,6,175,19,128,48,128,35,218,8,194,48,165]},{"1065982":[72,165,2,72,169,16,128,133]},{"1065991":[169,48]},{"1065994":[133,2,169,3]},{"1065999":[34,59,150,164,250,134,2,250,134,1,40,250,157,128,14,34,83,150,160,104,107,72,90,175]},{"1066024":[80,127,240,6,34,209,195,160,128,7,189,128,14,34,233,150,160,122,104,107,188,160,13,208,48,175,135,128,48,208,6,175,20,128,48,128,35,218,8,194,48,165]},{"1066067":[72,165,2,72,169,16,128,133]},{"1066076":[169,48]},{"1066079":[133,2,169,4]},{"1066084":[34,59,150,164,250,134,2,250,134,1,40,250,168,72,175,93,227,48,143,152,192,126,104,156,233,2,34,157,153,7,34,155,144,160,107,175,140,243,126,41,223,143,140,243,126,41,16,240,7,169,2,143,68,243,126,107,169]},{"1066142":[143,68,243,126,107,175,123,243,126,41,255]},{"1066154":[201,2]},{"1066157":[240,22,169,247,40,143,4,199,126,169,81,40,143,6,199,126,169,250,40,143,8,199,126,107,169,247,40,143,4,199,126,169]},{"1066190":[40,143,6,199,126,169,1,40,143,8,199,126,107,143]},{"1066205":[254,127,72,169,27,141,47,1,104,107,224,7,208,12,165,160,201,6,208,6,169,27,141,47,1,107,169,14,141,47,1,107,169,1,143]},{"1066241":[80,127,173,252,3,240,7,34,75,253,29,130,144]},{"1066255":[173,91,3,41,1,208,3,130,134]},{"1066265":[90,8,139,75,171,226,48,165,27,240,3,76,156,197,165,138,201,42,240,111,201,104,240,107,34,113,186,13,137,3,208,99,74,74,170,191]},{"1066302":[129,48,143]},{"1066306":[254,127,34,93,246,29,162]},{"1066314":[165,47,201,4,240,1,232,191,160,197,160,153,80,13,169]},{"1066330":[153,64,13,169,24,153,128,15,169,255,153,88,11,169,48,153,16,15,165,34,24,127,162,197,160,41,240,153,16,13,165,35,105]},{"1066364":[153,48,13,165,32,24,105,22,41,240,153]},{"1066376":[13,165,33,105]},{"1066381":[153,32,13,169]},{"1066386":[153,32,15,187,169,48,34,138,187,13,171,40,122,107,240,16]},{"1066403":[19,175,204,243,126,201,8,240,10,201,7,240,6,201,12,240,2,24,107,56,107,175,197,243,126,201,2,176,20,169]},{"1066434":[143,200,80,127,143,201,80,127,143,202,80,127,169,2,143,197,243,126,107,169]},{"1066455":[143,145,80,127,156,216,2,156,218,2,100,46,169,2,133,47,175,122,243,126,41,127,201,127,208,6,169,8,143,199,243,126,34,206,153,160,92,53,207,30,175,96,227,48,143,153,192,126,175,195,225,29,34,83,150,160,107,189,144,13,201,255,208,4,92,78,223,29,201]},{"1066525":[92,82,223,29,175,97,227,48,143,153,192,126,175,133,225,29,34,83,150,160,107,165,138,201,129,208,12,169,1,143]},{"1066556":[80,127,175,195,225,29,128,4,175,133,225,29,34,233,150,160,107,72,165,138,201,129,208,14,34,200,143,160,175,96,227,48,143,152,192,126,128,12,34,38,144,160,175,97,227,48,143,152,192,126,104,34,157,153,7,107,165,138,201,42,240,1,107,165,27,240,1,107,175,61,227,48,143,153,192,126,175,135,128,48,208,6,175,74,129,48,128,35,218,8,194,48,165]},{"1066650":[72,165,2,72,169,64,129,133]},{"1066659":[169,48]},{"1066662":[133,2,169,10]},{"1066667":[34,59,150,164,250,134,2,250,134,1,40,250,34,83,150,160,169,235,143]},{"1066687":[254,127,34,93,246,29,162]},{"1066695":[165,47,201,4,240,1,232,191,36,199,160,153,80,13,169]},{"1066711":[153,64,13,169,24,153,128,15,169,255,153,88,11,169,48,153,16,15,165,34,24,127,38,199,160,41,240,153,16,13,165,35,105]},{"1066745":[153,48,13,165,32,24,105,22,41,240,153]},{"1066757":[13,165,33,105]},{"1066762":[153,32,13,169]},{"1066767":[153,32,15,187,166,138,191,128,242,126,41,64,208,6,169,27,34,138,187,13,107,240,16]},{"1066791":[19,165,16,201,26,240,9,169,1,141,221,15,92,93,175,6,189,128,13,201,3,92,94,175,6,175,74,128,48,240,56,175,76,243,126,201,3,240,48,165,138,201,24,208,42,194,32,165,32,201,96,7,144,33,201,224,7,176,28,165,34,201,207,1,144,21,201,48,2,176,16,226,32,169,45,133,17,160]},{"1066870":[169,55,34,253,140,9,128,10,226,32,169,128,141,240,3,169,19,107,226,32,169,128,141,240,3,169]},{"1066897":[107,173,12,4,201,8,240,8,191,252,198,1,34,29,165,5,107,34,160,143,160,175,135,128,48,208,6,175,21,128,48,128,35,218,8,194,48,165]},{"1066936":[72,165,2,72,169,16,128,133]},{"1066945":[169,48]},{"1066948":[133,2,169,5]},{"1066953":[34,59,150,164,250,134,2,250,134,1,40,250,201,255,240,19,168,72,175,94,227,48,143,152,192,126,104,156,233,2,34,157,153,7,107,175,210,251,5,143,123,243,126,107,201,12,208,6,160,92,92,71,213]},{"1067007":[201,35,208,6,160,93,92,71,213]},{"1067017":[201,72,208,6,160,96,92,71,213]},{"1067027":[201,36,176,6,160,91,92,71,213]},{"1067037":[201,55,176,6,160,92,92,71,213]},{"1067047":[201,57,176,6,160,93,92,71,213]},{"1067057":[160,50,92,71,213]},{"1067063":[192,9,48]},{"1067067":[96]},{"1067069":[144]},{"1067071":[192]},{"1067074":[3,24,3,48,3,72,3,96,3,120,3,144,3,48,9,240,3,32,4,80,4,104,4]},{"1067098":[6,48,6,96,6,144,6,192,6,240,6,32,7,80,7,104,7]},{"1067116":[9,48,9,96,9,144,9,240,9]},{"1067127":[240]},{"1067129":[32,10,80,10,96,6]},{"1067136":[6,24,6,48,6,72,6,120,6,216,6,168,6,8,7,56,7,104,7,96,9]},{"1067158":[9,192,3,144,9,168,9,192,9,216,9,8,10,56,10]},{"1067174":[6,48,6]},{"1067178":[6,48,6,96,6,144,6,192,6,240,6,32,7,80,7]},{"1067194":[9,216,9,48,9,96,9,144,9,192,9,240,9,192,9,32,10,80,10,165]},{"1067215":[127,55,200,160,107,165]},{"1067222":[72,165,1,72,165,2,72,90,8,139,169,175,72,171,173,216,2,201,224,208,74,194,48,175,80,244,126,10,170,191]},{"1067253":[132,175,24,105]},{"1067258":[136,133]},{"1067261":[226,32,169,175,133,2,34,45,228,160,175,80,244,126,26,143,80,244,126,226,16,175,103,129,48,240,25,175,24,244,126,26,143,24,244,126,207,103,129,48,144,10,175,148,129,48,208,4,34,131,219,160,162,1,128,2,162]},{"1067319":[171,40,122,104,133,2,104,133,1,104,133]},{"1067331":[96,218,173,216,2,34,99,228,160,72,175,152,192,126,240,4,104,130,229,3,104,201,11,208,23,175,142,243,126,41,64,240,12,175,129,129,48,208,6,169,3,143,64,243,126,130,201,3,201,59,208,29,175,118,243,126,208,4,169,3,128,2,169,4,143,64,243,126,175,142,243,126,9,64,143,142,243,126,130,168,3,201,76,208,20,169,50,56,239,52,128,48,143,112,243,126,169,50,143,117,243,126,130,144,3,201,77,208,20,169,70,56,239,53,128,48,143,113,243,126,169,70,143,118,243,126,130,120,3,201,78,208,22,175,123,243,126,201,2,176,5,26,143,123,243,126,169,128,143,115,243,126,130,94,3,201,79,208,15,169,2,143,123,243,126,169,128,143,115,243,126,130,75,3,201,80,208,17,175,89,243,126,201,2,176,9,169,2,143,89,243,126,130,54,3,201,81,208,22,175,112,243,126,24,105,5,143,112,243,126,175,128,128,48,143,117,243,126,130,28,3,201,82,208,22,175,112,243,126,24,105,10,143,112,243,126,175,129,128,48,143,117,243,126,130,2,3,201,83,208,22,175,113,243,126,24,105,5,143,113,243,126,175,130,128,48,143,118,243,126,130,232,2,201,84,208,22,175,113,243,126,24,105,10,143,113,243,126,175,131,128,48,143,118,243,126,130,206,2,201,85,208,27,175,97,128,48,208,14,175,98,128,48,208,8,175,99,128,48,208,2,128,4,34,96,128,48,130,175,2,201,86,208,27,175,102,128,48,208,14,175,103,128,48,208,8,175,104,128,48,208,2,128,4,34,101,128,48,130,144,2,201,87,208,27,175,107,128,48,208,14,175,108,128,48,208,8,175,109,128,48,208,2,128,4,34,106,128,48,130,113,2,201,88,208,43,175,129,129,48,208,25,175,130,129,48,41,1,240,17,175,64,243,126,240,11,201,3,176,7,24,105,2,143,64,243,126,175,117,129,48,240,6,169,1,143,118,243,126,201,89,208,20,194,32,175,96,243,126,56,239,54,128,48,143,96,243,126,226,32,130,42,2,201,90,208,3,130,35,2,201,91,208,32,194,32,175,84,244,126,24,111]},{"1067814":[130,48,143,84,244,126,175,86,244,126,111,2,130,48,143,86,244,126,226,32,130,255,1,201,92,208,32,194,32,175,84,244,126,24,111,4,130,48,143,84,244,126,175,86,244,126,111,6,130,48,143,86,244,126,226,32,130,219,1,201,93,208,32,194,32,175,84,244,126,24,111,8,130,48,143,84,244,126,175,86,244,126,111,10,130,48,143,86,244,126,226,32,130,183,1,201,94,208,3,130,176,1,201,95,208,3,130,169,1,201,96,208,3,130,162,1,201,97,208,3,130,155,1,201,98,208,3,130,148,1,201,99,208,3,130,141,1,201,100,208,3,130,134,1,201,101,208,3,130,127,1,201,106,208,7,34,131,219,160,130,116,1,201,107,208,2,128,4,201,108,208,34,175,103,129,48,240,25,175,24,244,126,26,143,24,244,126,207,103,129,48,144,10,175,148,129,48,208,4,34,131,219,160,130,72,1,201,109,208,7,34,225,190,164,130,61,1,201,110,208,7,34,225,190,164,130,50,1,201,112,144,63,201,128,176,59,41,15,201,8,176,22,170,169,1,224]},{"1068061":[240,4,10,202,128,248,15,104,243,126,143,104,243,126,130,14,1,56,233,8,170,169,1,224]},{"1068086":[240,4,10,202,128,248,137,192,240,2,169,192,15,105,243,126,143,105,243,126,130,239]},{"1068109":[201,128,144,63,201,144,176,59,41,15,201,8,176,22,170,169,1,224]},{"1068128":[240,4,10,202,128,248,15,100,243,126,143,100,243,126,130,203]},{"1068145":[56,233,8,170,169,1,224]},{"1068153":[240,4,10,202,128,248,137,192,240,2,169,192,15,101,243,126,143,101,243,126,130,172]},{"1068176":[201,144,144,63,201,160,176,59,41,15,201,8,176,22,170,169,1,224]},{"1068195":[240,4,10,202,128,248,15,102,243,126,143,102,243,126,130,136]},{"1068212":[56,233,8,170,169,1,224]},{"1068220":[240,4,10,202,128,248,137,192,240,2,169,192,15,103,243,126,143,103,243,126,130,105]},{"1068243":[201,160,144,69,201,176,176,65,41,15,170,191,124,243,126,26,159,124,243,126,224]},{"1068265":[208,4,143,125,243,126,224,1,208,4,143,124,243,126,175,114,129,48,240,31,175,111,243,126,26,143,111,243,126,130,51]},{"1068297":[138,10,205,12,4,208,9,175,111,243,126,26,143,111,243,126,130,32]},{"1068316":[201,176,208,28,169,121,34,93,246,29,48,20,165,34,153,16,13,165,35,153,48,13,165,32,153]},{"1068342":[13,165,33,153,32,13,250,173,233,2,201,1,107,72,218,175,108,227,48,240,58,175,152,192,126,240,52,173,233,2,240,4,201,3,208,23,173,69,3,240,2,169,4,133,93,156,218,2,156,123,3,156,228,2,169,14,141,47,1,156,216,2,156,217,2,156,233,2,90,160]},{"1068413":[34,8,185,160,122,250,104,107,34,3,240,160,175,152,192,126,208,12,173,216,2,32,50,219,141,216,2,32,8,219,173,216,2,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,25,32,99,219,207,150,128,48,144,13,175,152,192,126,208,7,175,151,128,48,141,216,2,130,180,1,201,78,208,14,175,123,243,126,240,5,169,79,141,216,2,130,162,1,201,94,208,86,175,152,192,126,208,20,175,89,243,126,207,144,128,48,144,10,175,145,128,48,141,216,2,130,132,1,175,89,243,126,201,255,208,8,169,73,141,216,2,130,116,1,201]},{"1068567":[208,8,169,73,141,216,2,130,104,1,201,1,208,8,169,80,141,216,2,130,92,1,201,2,208,8,169,2,141,216,2,130,80,1,169,3,141,216,2,130,72,1,201,95,208,107,175,152,192,126,240,36,175,22,244,126,41,192,208,8,169,4,141,216,2,130,46,1,201,64,208,8,169,5,141,216,2,130,34,1,169,6,141,216,2,130,26,1,175,22,244,126,74,74,74,74,74,74,207,146,128,48,144,10,175,147,128,48,141,216,2,130]},{"1068680":[1,175,22,244,126,41,192,208,4,169,4,128,10,201,64,208,4,169,5,128,2,169,6,141,216,2,175,22,244,126,24,105,64,143,22,244,126,130,217]},{"1068720":[201,96,208,50,175,152,192,126,208,20,175,91,243,126,207,148,128,48,144,10,175,149,128,48,141,216,2,130,187]},{"1068750":[175,91,243,126,201]},{"1068756":[208,8,169,34,141,216,2,130,171]},{"1068766":[169,35,141,216,2,130,163]},{"1068774":[201,97,208,22,175,84,243,126,208,8,169,27,141,216,2,130,145]},{"1068792":[169,28,141,216,2,130,137]},{"1068800":[201,100,208,52,175,152,192,126,208,22,175,64,243,126,26,74,207,152,128,48,144,10,175,153,128,48,141,216,2,130,105]},{"1068832":[175,64,243,126,26,74,201]},{"1068840":[208,7,169,58,141,216,2,128,88,169,59,141,216,2,128,81,201,101,208,18,175,152,192,126,208,10,175,142,243,126,9,32,143,142,243,126,128,182,201,98,208,19,34,27,218,160,141,216,2,235,32,166,218,169,255,143,144,80,127,128,36,201,99,208,15,34,215,218,160,141,216,2,169,255,143,144,80,127,128,17,201,176,208,13,175,152,192,126,240,7,169,14,141,216,2,128]},{"1068937":[250,104,139,75,92,228,133,9,251,251,251,251,251,252,252,251,251,252,252,252,254,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,251,252,252,252,252,252,252,254,252,252,252,252,252,252,252,252,252,254,254,254,252,252,252,252,252,252,252,252,252,252,252,254,254,252,254,252,252,252,251,252,252,252,252,252,252,251,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,4,4,4,4,4]},{"1069192":[4,4,4,4,4,5]},{"1069204":[4]},{"1069206":[4]},{"1069209":[4]},{"1069221":[4]},{"1069227":[5]},{"1069237":[4,4,4]},{"1069251":[4,4]},{"1069254":[4]},{"1069258":[4]},{"1069265":[4]},{"1069274":[4]},{"1069345":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]},{"1069425":[6,24,24,24,45,32,46,9,9,10,8,5,16,11,44,27,26,28,20,25,12,7,29,47,7,21,18,13,13,14,17,23,40,39,4,4,15,22,3,19,1,30,16]},{"1069474":[48,34,33,36,36,36,35,35,35,41,42,44,43,3,3,52,53,49,51,2,50,54,55,44,6,12,56,57,58,59,60,24,61,62,63,64]},{"1069513":[65,36,71,72,72,72,255,255,4,13,255,255,255,255,255,255,255,255,73,74,73,255,255,255,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,71,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73]},{"1069670":[2,2]},{"1069678":[2,2,2,2,2,2]},{"1069685":[2]},{"1069687":[2,2]},{"1069690":[2,2,2,2,2,2,2,2,2,2,2]},{"1069702":[2,2,2,2,2]},{"1069708":[2,2,2,2,2,2,2,2,2]},{"1069720":[2,2,2,2,2,2,2,2,2,2,2]},{"1069733":[2]},{"1069735":[2,2,2]},{"1069739":[2,2,2,2,2,2]},{"1069746":[2,2,2,2,2,2,2,2]},{"1069755":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]},{"1069841":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,255,5,5,5,5,5,1,2,1,1,1,2,2,2,4,4,4,1,1,2,1,1,1,2,1,2,1,4,4,2,1,6,1,2,1,2,2,1,2,2,4,1,1,4,2,1,4,2,2,4,4,4,2,1,4,1,2,2,1,2,2,1,1,4,4,1,2,2,4,4,4,2,5,2,1,4,4,4,4,5,4,4,4,4,4,4,4,1,3,1,1,2,4,255,255,255,255,255,255]},{"1070027":[4,4,4]},{"1070033":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,89,243,89,243,89,243,89,243,90,243,90,243,90,243,69,243,70,243,75,243,66,243,64,243,65,243,68,243,92,243,71,243,72,243,73,243,74,243,76,243,76,243,80,243,92,243,107,243,81,243,82,243,83,243,84,243,84,243,78,243,86,243,87,243,122,243,77,243,91,243,91,243,111,243,100,243,108,243,117,243,117,243,68,243,65,243,92,243,92,243,92,243,109,243,110,243,110,243,117,243,102,243,104,243,96,243,96,243,96,243,116,243,116,243,116,243,64,243,64,243,92,243,92,243,108,243,108,243,96,243,96,243,114,243,118,243,118,243,115,243,96,243,96,243,92,243,89,243,76,243,85,243,117,243,118,243,115,243,115,243,89,243,117,243,117,243,118,243,118,243,26,244,28,244,30,244,64,243,96,243,106,243,84,244,84,244,84,244,89,243,90,243,91,243,84,243,106,243,106,243,64,243,64,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,1,2,3,4,1,2,3,1,1,1,1,1,1,2,255,1,1,1,1,1,2,1,255,255,1,1,2,1,2,1,1,1,255,1,255,2,255,255,255,255,255,255,2,255,255,255,255,255,255,255,255,255,255,251,236,255,255,255,1,3,255,255,255,255,156,206,255,1,10,255,255,255,255,1,3,1,50,70,128,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1070946":[128]},{"1070948":[64]},{"1070950":[32]},{"1070952":[16]},{"1070954":[8]},{"1070956":[4]},{"1070958":[2]},{"1070960":[1,128]},{"1070963":[64]},{"1070965":[32]},{"1070967":[16]},{"1070969":[8]},{"1070971":[4]},{"1071202":[22,43,44,45,61,60,72,46,47,48,255,14,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,53,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,139,75,171,175,152,192,126,208,6,152,32,50,219,128,1,152,133,3,196,3,208,4,169,255,133,3,171,107,175,117,129,48,240,9,34,176,217,160,175,64,243,126,107,175,64,243,126,208,16,175,142,243,126,41,64,240,4,34,176,217,160,175,64,243,126,107,175,117,129,48,240,51,175,119,243,126,240,70,175,64,243,126,208,10,175,142,243,126,41,64,208,31,128,4,201,3,176,25,169,167,143,32,199,126,169,32,143,33,199,126,169,169,143,34,199,126,169,32,143,35,199,126,107,169,134,143,32,199,126,169,36,143,33,199,126,169,135,143,34,199,126,169,36,143,35,199,126,107,169,127,143,32,199,126,169,36,143,33,199,126,169,127,143,34,199,126,169,36,143,35,199,126,107,90,175,144,80,127,201,255,240,7,170,235,191]},{"1071656":[160,48,107,162]},{"1071661":[34,113,186,13,41,127,232,224,127,144,4,169]},{"1071674":[128,6,207,127,160,48,176,235,143,32,80,127,162]},{"1071688":[168,152,32,130,218,240,30,175,32,80,127,26,207,127,160,48,144,2,169]},{"1071708":[143,32,80,127,232,168,138,207,127,160,48,144,224,169,90,128,4,175,32,80,127,170,191]},{"1071732":[160,48,235,175,32,80,127,143,144,80,127,235,122,107,74,74,74,170,191,80,244,126,143,34,80,127,218,175,32,80,127,41,7,170,175,34,80,127,224]},{"1071772":[240,4,74,202,128,248,250,41,1,96,74,74,74,143,33,80,127,170,191,80,244,126,143,34,80,127,175,32,80,127,41,7,170,169,1,224]},{"1071809":[240,4,10,202,128,248,72,175,33,80,127,170,104,15,34,80,127,159,80,244,126,96,175,144,80,127,201,255,240,7,170,235,191,128,160,48,107,162]},{"1071848":[34,113,186,13,41,127,232,224,127,144,4,165]},{"1071861":[128,6,207,255,160,48,176,235,143,144,80,127,170,235,191,128,160,48,107,218,72,162]},{"1071884":[191]},{"1071886":[192,48,201,255,240,27,195,1,208,17,218,138,74,74,170,191,144,243,126,26,159,144,243,126,250,240,6,232,232,232,232,128,221,104,250,96,218,72,162]},{"1071926":[191]},{"1071928":[192,48,201,255,240,34,195,1,208,24,218,138,74,74,170,191,144,243,126,250,223,1,192,48,144,6,191,2,192,48,131,1,240,6,232,232,232,232,128,214,104,250,96,162]},{"1071973":[175,92,243,126,240,1,232,175,93,243,126,240,1,232,175,94,243,126,240,1,232,175,95,243,126,240,1,232,138,96,100,17,100,176,92,167,189,164,175,198,243,126,41,4,240,15,169,10,157,16,13,169,3,157,48,13,169,144,157,208,14,189]},{"1072036":[13,24,105,3,107,189,32,14,201,136,208,9,32,225,219,201,4,144,1,58,107,32,225,219,107,224,24,9,208,5,175,157,80,127,107,8,194,32,138,74,170,176,10,40,191]},{"1072082":[200,49,74,74,74,74,107,40,191]},{"1072092":[200,49,41,15,107,175,192,80,127,240,18,24,111,89,243,126,208,3,169,1,96,201,5,144,3,169,4,96,96,175,89,243,126,96,72,175,91,243,126,24,111,194,80,127,201,255,208,2,169]},{"1072142":[201,3,144,2,169,2,143,32,80,127,104,24,111,32,80,127,107,175,195,80,127,240,19,24,111,123,243,126,201,255,208,3,169]},{"1072176":[107,201,3,144,2,169,2,107,175,123,243,126,107,165,160,201,145,240,42,201,146,240,38,201,147,240,34,165,93,201,1,240,28,201,23,240,24,201,28,240,20,165,94,201,2,240,14,165,91,208,10,173,72,3,15,199,80,127,41,17,107,173,72,3,41,17,107,165,160,201,145,240,42,201,146,240,38,201,147,240,34,165,93,201,1,240,28,201,23,240,24,201,28,240,20,165,94,201,2,240,14,165,91,208,10,173,72,3,15,199,80,127,41,1,107,173,72,3,41,1,107,175,68,128,48,240,9,175,75,243,126,240,3,169,2,107,175,89,243,126,107,175,93,128,48,240,3,169,255,107,175,89,243,126,107,175,63,128,48,240,6,189,32,14,201,216,107,189,32,14,201,214,107,34,24,143,160,240,4,92,157,180,6,175,41,128,48,208,4,92,145,180,6,194,32,175,96,243,126,201,10]},{"1072378":[226,32,176,19,194,16,169,122,160,1,34,25,226,5,169,60,141,46,1,226,16,128,42,175,102,227,48,143,152,192,126,175,42,128,48,168,156,233,2,218,34,157,153,7,250,194,32,175,96,243,126,56,233,10]},{"1072433":[143,96,243,126,226,32,34,147,143,160,92,157,180,6,139,218,90,175,65,128,48,208,3,130,205]},{"1072459":[165,27,240,121,194,32,165,160,201,14]},{"1072470":[208,33,165,34,41,255,1,201,104,1,144,98,201,136,1,176,93,165,32,41,255,1,201,122,1,144,83,201,154,1,176,78,130,167]},{"1072505":[201,126]},{"1072508":[208,33,165,34,41,255,1,201,104]},{"1072518":[144,60,201,136]},{"1072523":[176,55,165,32,41,255,1,201,122,1,144,45,201,154,1,176,40,130,129]},{"1072543":[201,222]},{"1072546":[208,32,165,34,41,255,1,201,104,1,144,22,201,136,1,176,17,165,32,41,255,1,201,122]},{"1072571":[144,7,201,154]},{"1072576":[176,2,128,92,226,32,128,80,165,138,201,112,208,36,175,34,128,48,170,191,40,222,160,205,3,3,208,60,175,240,242,126,41,32,208,52,169,8,72,171,160,2,34,241,182,8,176,48,128,38,201,71,208,34,175,35,128,48,170,191,40,222,160,205,3,3,208,20,175,199,242,126,41,32,208,12,169,8,72,171,160,3,34,241,182,8,176,8,122,250,171,175,89,243,126,107,226,32,122,250,171,169,2,107,15,16,17,8,194,16,72,218,90,173,44,1,240,28,48,26,205,51,1,208,32,201,22,208,14,173,11,1,201,59,208,7,169]},{"1072714":[141,51,1,128,14,173,44,1,141,43,1,156,44,1,122,250,104,40,107,175,19,130,48,208,57,175,172,80,127,207,171,80,127,240,47,207,170,80,127,144,33,201,254,144,21,143,171,80,127,226,16,169]},{"1072767":[162,7,159,160,80,127,202,16,249,194,16,128,16,175,171,80,127,143,172,80,127,143,171,80,127,34,60,225,160,173,44,1,201,8,240,17,175,26,130,48,208,8,175,171,80,127,201,254,208,3,130,186]},{"1072820":[174,2,32,224,83,45,240,3,130,253]},{"1072831":[174,4,32,224,77,83,208,245,174,6,32,224,85,49,208,237,226,16,173,44,1,201,2,240,37,201,9,240,50,201,13,240,60,201,15,240,56,201,16,240,78,201,17,240,81,201,22,240,77,201,21,208,83,173,12,4,74,24,105,45,128,71,72,175]},{"1072896":[243,126,41,64,240,5,104,169,60,128,57,104,128,54,72,175,122,243,126,201,127,208,244,104,169,61,128,40,72,175,122,243,126,201,127,240,242,175,202,243,126,240,224,165,138,201,64,208,218,104,169,15,128,14,173,12,4,201,8,208,10,173,12,4,74,24,105,33,141,44,1,174,44,1,191,191,216,48,58,72,41,7,168,104,74,74,74,170,191,160,80,127,240,20,201,255,240,12,192]},{"1072996":[240,4,74,136,128,248,41,1,240,4,169,250,128,76,174,44,1,191,127,216,48,218,170,191,191,216,48,250,205,44,1,240,55,224,35,144,4,224,47,144,5,141,44,1,128,181,139,194,16,174,12,4,169,2,72,171,164]},{"1073054":[90,194,32,191]},{"1073059":[217,48,133]},{"1073063":[226,32,178]},{"1073067":[122,132]},{"1073070":[226,16,171,170,191,191,216,48,141,44,1,130,139,255,169,251,194,16,156]},{"1073090":[66,141,64,33,205,64,33,208,251,156,64,33,173,64,33,208,251,169,129,141]},{"1073111":[66,173,44,1,201,8,240,64,165,16,201,7,240,69,201,14,240,65,201,9,208,47,226,16,162,9,165,138,201,67,240,10,201,69,240,6,201,71,240,2,162,5,201,112,208,8,175,240,242,126,41,32,240,8,175,197,243,126,201,2,176,2,162,1,142,45,1,194,16,173,44,1,141,43,1,156,44,1,122,250,104,40,107,173,44,1,141,43,1,156,44,1,122,250,104,40,169,5,141,45,1,92,150,130,2,194,32,165,160,201,12]},{"1073223":[208,13,173,11,1,41,255]},{"1073231":[201,59]},{"1073234":[208,63,128,56,201,107]},{"1073241":[208,58,175,19,130,48,201,1]},{"1073250":[240,24,173,2,32,201,83,45,208,39,173,4,32,201,77,83,208,31,173,6,32,201,85,49,208,23,175,102,243,126,41,4]},{"1073283":[240,14,175,167,80,127,41,4]},{"1073292":[240,5,162,241,142,44,1,165,160,107,165,160,201,12]},{"1073307":[208,14,174,48,1,224,241,208,24,162,22,142,44,1,128,17,201,107]},{"1073326":[208,12,174,48,1,224,241,208,5,162,59,142,44,1,162,28,165,160,107,143,39,194,126,173]},{"1073351":[32,137,16,240,7,173,11,1,143,39,194,126,107,8,156]},{"1073367":[66,169,255,141,64,33,169,219,133]},{"1073377":[169,248,133,1,169,160,34,29,137]},{"1073387":[169,129,141]},{"1073391":[66,175,26,130,48,208,124,194,32,173,2,32,201,83,45,208,114,173,4,32,201,77,83,208,106,173,6,32,201,85,49,208,98,169]},{"1073427":[162,255,160,1,226,32,152,194,32,141,4,32,24,105,100]},{"1073443":[232,226,32,168,173]},{"1073449":[32,137,64,208,249,173]},{"1073456":[32,137,8,240,228,138,143,170,80,127,128,9,8,226,16,175,26,130,48,208,45,169,64,162,7,160,7,141,4,32,156,5,32,72,24,173]},{"1073493":[32,137,64,208,249,173]},{"1073500":[32,137,8,208,1,56,191,160,80,127,42,159,160,80,127,136,16,8,202,16,3,104,40,107,160,7,104,58,128,209,226,32,173,16,66,194,32,173,2,32,201,83,45,240,6,226,48,92,220,128]},{"1073551":[173,4,32,201,77,83,208,242,173,6,32,201,85,49,208,234,226,48,174,43,1,240,3,130,133]},{"1073577":[175,169,80,127,240,85,173]},{"1073585":[32,137,64,240,4,92,220,128]},{"1073594":[173]},{"1073596":[32,137,8,240,4,92,220,128]},{"1073605":[169,255,141,41,1,141,39,1,141,6,32,173,11,1,58,72,41,7,168,104,74,74,74,170,191,160,80,127,240,20,201,255,240,12,192]},{"1073641":[240,4,74,136,128,248,41,1,240,4,175,169,80,127,141,7,32,169]},{"1073660":[143,169,80,127,92,220,128]},{"1073668":[173,39,1,205,41,1,208,4,92,220,128]},{"1073680":[144,12,233,2,176,14,156,39,1,156,7,32,128,6,105,16,144,2,169,255,141,39,1,141,6,32,92,220,128]},{"1073710":[224,255,208,4,92,220,128]},{"1073718":[224,243,208,12,142,64,33,169,255,141,41,1,92,220,128]},{"1073734":[224,242,208,12,142,64,33,169,128,141,41,1,92,220,128]},{"1073750":[224,241,208,13,142,64,33,156,41,1,156,11,1,92,220,128]},{"1073767":[224,240,144,17,224,250,240,4,224,251,208,5,169]},{"1073781":[141,43,1,92,220,128]},{"1073788":[236,11,1,208,7,224,27,240,3,138,128,126,236,51,1,240,244,169]},{"1073807":[235,175,171,80,127,240,13,207,170,80,127,144,7,56,239,170,80,127,128,243,218,72,138,250,194,32,240,7,24,105,100]},{"1073839":[202,208,249,141,4,32,226,32,156,7,32,250,142,11,1,175,171,80,127,201,254,144,4,169]},{"1073864":[128,4,191,63,216,48,143,169,80,127,191,127,216,48,201,17,240,12,201,22,240,8,201,35,144,35,201,47,176,31,139,194,16,174,12,4,169,2,72,171,164]},{"1073906":[90,194,32,191]},{"1073911":[217,48,133]},{"1073915":[226,32,178]},{"1073919":[122,132]},{"1073922":[226,16,171,170,223,127,216,48,240,6,191,127,216,48,128,243,141,43,1,92,220,128]},{"1073945":[141,44,1,72,34,43,222,160,203,104,205,64,33,208,251,92,174,136,9,175,19,130,48,208,66,175,27,130,48,208,67,194,32,173,2,32,201,83,45,208,50,173,4,32,201,77,83,208,42,173,6,32,201,85,49,208,34,226,32,175,171,80,127,201,254,176,24,173]},{"1074014":[32,137,8,208,17,175,169,80,127,208,7,173]},{"1074027":[32,137,16,240,11,92,38,196,8,226,32,173,64,33,208,245,92,43,196,8,175,19,130,48,208,66,175,27,130,48,208,67,194,32,173,2,32,201,83,45,208,50,173,4,32,201,77,83,208,42,173,6,32,201,85,49,208,34,226,32,175,171,80,127,201,254,176,24,173]},{"1074097":[32,137,8,208,17,175,169,80,127,208,7,173]},{"1074110":[32,137,16,240,11,92,55,198,8,226,32,173,64,33,208,245,92,47,198,8,165,17,201,4,144,10,173,64,33,240,4,201,1,240,1,24,107,194,32,173,2,32,201,83,45,208,25,173,4,32,201,77,83,208,17,173,6,32,201,85,49,208,9,226,32,173]},{"1074177":[32,137,16,208,249,226,32,169,34,107,175,53,80,127,240,5,191]},{"1074195":[87,127,107,191]},{"1074200":[18,127,107,156,240,28,156,241,28,169]},{"1074211":[143,53,80,127,169,28,141,233,28,107,156,240,28,156,241,28,169,1,143,53,80,127,194,32,175,148,80,127,170,160]},{"1074243":[226,32,183]},{"1074247":[159]},{"1074249":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074268":[143,148,80,127,226,32,107,143,64,80,127,72,218,90,8,139,75,171,226,32,194,16,165]},{"1074292":[72,165,1,72,165,2,72,175,106,129,48,208,3,130,74,7,169]},{"1074310":[143,16,80,127,175,106,129,48,41,1,201,1,208,127,175,64,80,127,201,36,208,119,169,170,133]},{"1074336":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074354":[226,32,183]},{"1074358":[159]},{"1074360":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074379":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1074399":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074417":[226,32,183]},{"1074421":[159]},{"1074423":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074442":[143,148,80,127,226,32,130,154,6,175,106,129,48,41,2,201,2,208,127,175,64,80,127,201,37,208,119,169,52,133]},{"1074473":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074491":[226,32,183]},{"1074495":[159]},{"1074497":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074516":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1074536":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074554":[226,32,183]},{"1074558":[159]},{"1074560":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074579":[143,148,80,127,226,32,130,17,6,175,106,129,48,41,4,201,4,208,127,175,64,80,127,201,51,208,119,169]},{"1074608":[133]},{"1074610":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074628":[226,32,183]},{"1074632":[159]},{"1074634":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074653":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1074673":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074691":[226,32,183]},{"1074695":[159]},{"1074697":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074716":[143,148,80,127,226,32,130,136,5,175,106,129,48,41,8,201,8,208,127,175,64,80,127,201,50,208,119,169,112,133]},{"1074747":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074765":[226,32,183]},{"1074769":[159]},{"1074771":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074790":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1074810":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074828":[226,32,183]},{"1074832":[159]},{"1074834":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074853":[143,148,80,127,226,32,130,255,4,175,64,80,127,41,240,201,112,208,56,169]},{"1074874":[133]},{"1074876":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074894":[226,32,183]},{"1074898":[159]},{"1074900":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074919":[143,148,80,127,226,32,130,213]},{"1074928":[201,128,208,56,169,52,133]},{"1074936":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074954":[226,32,183]},{"1074958":[159]},{"1074960":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074979":[143,148,80,127,226,32,130,153]},{"1074988":[201,144,208,55,169,112,133]},{"1074996":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075014":[226,32,183]},{"1075018":[159]},{"1075020":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075039":[143,148,80,127,226,32,128,94,201,160,208,87,175,64,80,127,201,175,208,3,130,88,4,169,170,133]},{"1075066":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075084":[226,32,183]},{"1075088":[159]},{"1075090":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075109":[143,148,80,127,226,32,104,41,15,143,32,80,127,169,15,56,239,32,80,127,72,169,1,143,16,80,127,128,3,130,9,4,175,150,80,127,58,58,143,148,80,127,175,64,80,127,41,15,143,17,80,127,175,16,80,127,240,15,175,16,80,127,169,15,56,239,17,80,127,143,17,80,127,175,17,80,127,201]},{"1075188":[208,56,169,216,133]},{"1075194":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075212":[226,32,183]},{"1075216":[159]},{"1075218":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075237":[143,148,80,127,226,32,130,127,3,201,1,208,56,169,241,133]},{"1075254":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075272":[226,32,183]},{"1075276":[159]},{"1075278":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075297":[143,148,80,127,226,32,130,67,3,201,2,208,56,169,8,133]},{"1075314":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075332":[226,32,183]},{"1075336":[159]},{"1075338":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075357":[143,148,80,127,226,32,130,7,3,201,3,208,56,169,35,133]},{"1075374":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075392":[226,32,183]},{"1075396":[159]},{"1075398":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075417":[143,148,80,127,226,32,130,203,2,201,4,208,56,169,60,133]},{"1075434":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075452":[226,32,183]},{"1075456":[159]},{"1075458":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075477":[143,148,80,127,226,32,130,143,2,201,5,208,56,169,87,133]},{"1075494":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075512":[226,32,183]},{"1075516":[159]},{"1075518":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075537":[143,148,80,127,226,32,130,83,2,201,6,208,56,169,116,133]},{"1075554":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075572":[226,32,183]},{"1075576":[159]},{"1075578":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075597":[143,148,80,127,226,32,130,23,2,201,7,208,56,169,139,133]},{"1075614":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075632":[226,32,183]},{"1075636":[159]},{"1075638":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075657":[143,148,80,127,226,32,130,219,1,201,8,208,56,169,164,133]},{"1075674":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075692":[226,32,183]},{"1075696":[159]},{"1075698":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075717":[143,148,80,127,226,32,130,159,1,201,9,208,56,169,189,133]},{"1075734":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075752":[226,32,183]},{"1075756":[159]},{"1075758":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075777":[143,148,80,127,226,32,130,99,1,201,10,208,56,169,214,133]},{"1075794":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075812":[226,32,183]},{"1075816":[159]},{"1075818":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075837":[143,148,80,127,226,32,130,39,1,201,11,208,56,169,241,133]},{"1075854":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075872":[226,32,183]},{"1075876":[159]},{"1075878":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075897":[143,148,80,127,226,32,130,235]},{"1075906":[201,12,208,56,169,12,133]},{"1075914":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075932":[226,32,183]},{"1075936":[159]},{"1075938":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075957":[143,148,80,127,226,32,130,175]},{"1075966":[201,13,208,55,169,41,133]},{"1075974":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075992":[226,32,183]},{"1075996":[159]},{"1075998":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1076017":[143,148,80,127,226,32,128,116,201,14,208,55,169,72,133]},{"1076033":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1076051":[226,32,183]},{"1076055":[159]},{"1076057":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1076076":[143,148,80,127,226,32,128,57,201,15,208,53,169,101,133]},{"1076092":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1076110":[226,32,183]},{"1076114":[159]},{"1076116":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1076135":[143,148,80,127,226,32,156,240,28,156,241,28,169,1,143,53,80,127,169,1,143,159,80,127,104,133,2,104,133,1,104,133]},{"1076168":[171,40,122,250,104,107,104,133,2,104,133,1,104,133]},{"1076183":[171,40,122,250,104,107,34,78,216]},{"1076193":[156,232,28,107,176,4,192,152,144,5,169,255,255,128,3,185,1,195,201,255,255,107,175,126,129,48,240,32,175,92,243,126,15,93,243,126,15,94,243,126,15,95,243,126,208,14,189,128,13,24,105,8,157,128,13,169,81,160,1,107,169,136,160]},{"1076257":[107,34,182,129,164,176,12,194,32,169,140,1,141,240,28,226,32,128,10,194,32,169,109,1,141,240,28,226,32,34,87,237,160,107,34,182,129,164,176,12,194,32,169,141,1,141,240,28,226,32,128,90,175,142,243,126,41,128,208,12,194,32,169,146,1,141,240,28,226,32,128,70,175,142,243,126,41,64,240,12,194,32,169,149,1,141,240,28,226,32,128,50,175,142,243,126,41,32,208,12,194,32,169,148,1,141,240,28,226,32,128,30,175,142,243,126,41,128,240,12,194,32,169,147,1,141,240,28,226,32,128,10,194,32,169,110,1,141,240,28,226,32,34,87,237,160,107,72,173,2,2,201,15,240,6,104,34,25,226,5,107,36,244,80,246,175,68,128,48,240,8,175,75,243,126,240,14,128,22,175,89,243,126,201,255,240,4,201,2,176,10,104,169,12,160,1,34,25,226,5,107,104,107,72,173,2,2,201,15,240,6,104,34,25,226,5,107,36,244,80,246,175,68,128,48,240,8,175,75,243,126,240,14,128,22,175,89,243,126,201,255,240,4,201,2,176,10,104,169,13,160,1,34,25,226,5,107,104,107,175,116,243,126,41,4,240,8,169,47,160]},{"1076528":[34,25,226,5,107,175,122,243,126,41,5,201,5,240,9,169,21,160,1,34,25,226,5,107,169,22,160,1,34,25,226,5,107,165,16,201,14,240,109,100,17,218,90,165]},{"1076573":[72,165,1,72,165,2,72,169,28,133,2,194,48,173,240,28,10,170,191,192,113,127,133]},{"1076597":[226,48,160]},{"1076601":[183]},{"1076603":[201,254,208,39,200,183]},{"1076610":[201,110,208,32,200,183]},{"1076617":[208,27,200,183]},{"1076622":[201,254,208,20,200,183]},{"1076629":[201,107,208,13,200,183]},{"1076636":[201,4,208,6,156,232,28,130,19]},{"1076646":[156,35,2,156,216,28,169,2,133,17,165,16,141,12,1,169,14,133,16,104,133,2,104,133,1,104,133]},{"1076674":[122,250,107,165,138,10,168,173,18,7,240,42,165,33,41,2]},{"1076691":[10,10,69,138,41,8]},{"1076698":[240,6,152,24,105,16]},{"1076705":[168,165,35,41,2]},{"1076711":[74,69,138,41,1]},{"1076717":[240,4,152,26,26,168,152,41,255]},{"1076727":[168,107,165,17,201,3,208,5,169,6,133,20,107,34,9,151,164,34,255,147,164,107,34,159,245,160,34,158,173,164,34]},{"1076759":[128,191,92,21,253,13,72,34,23,130,160,34,221,131,160,34,231,130,160,104,107,72,8,226,32,34,74,129,160,40,104,141,12,4,156,172,4,72,8,34,120,250,13,34,109,132,160,34,221,131,160,40,104,107,34,74,129,160,169,16,133,28,107,72,175,77,128,48,137,4,240,4,143,202,80,127,137,2,240,4,143,201,80,127,137,1,240,4,143,200,80,127,175,95,227,48,143,152,192,126,104,34,157,153,7,175,78,128,48,137,4,240,6,169,128,143,115,243,126,175,78,128,48,137,2,240,6,169,50,143,117,243,126,175,78,128,48,137,1,240,39,169,70,143,118,243,126,175,117,129,48,240,27,175,142,243,126,9,128,143,142,243,126,194,32,175,96,243,126,24,111,131,129,48,143,96,243,126,226,32,107,34,190,160,2,34,145,188,164,107,194,16,34,61,137]},{"1076955":[169,7,141,12,33,175,240,244,126,208,10,34,60,239,160,169,255,143,240,244,126,173,10,1,208,10,175,17,192,126,208,4,34,227,129,160,34,204,130,160,34,157,130,164,169,255,143,144,80,127,169]},{"1077007":[143,1,80,127,175,114,129,48,240,8,175,139,243,126,143,111,243,126,34,221,131,160,34,231,130,160,34,140,131,160,175,135,128,48,201,1,208,4,34,34,150,164,226,16,107,218,8,194,32,175,70,128,48,143,98,243,126,143,96,243,126,175,12,130,48,143,84,244,126,175,14,130,48,143,86,244,126,162,78]},{"1077087":[191]},{"1077089":[176,48,159,64,243,126,202,202,16,244,226,32,175,64,128,48,240,12,169,128,143,97,240,126,169,128,143,147,240,126,175,139,128,48,240,6,169,32,143,219,242,126,175,140,128,48,240,6,169,32,143,195,242,126,175,67,128,48,143,89,243,126,40,250,107,169,81,141,162,10,34,61,137]},{"1077163":[107,34,68,153,160,34,164,246,160,107,34,183,153,160,34,192,153,160,162,4,107,34,164,246,160,169,20,133,17,107,34,164,246,160,107,34,63,132,160,34,156,153,160,34,4,188,164,8,226,32,169,255,143,144,80,127,40,107,175,156,80,127,208,13,26,143,156,80,127,34,79,186,10,206]},{"1077238":[2,107,169]},{"1077242":[143,156,80,127,34,153,186,10,107,169,1,143,145,80,127,107,34,206,153,160,107,169]},{"1077265":[143,145,80,127,175,159,80,127,240,16,156,240,28,156,241,28,34,81,237,160,169]},{"1077287":[143,159,80,127,165,27,240,17,194,32,165,160,143,212,244,126,226,32,173,3,4,143,214,244,126,175,152,192,126,240,13,156,233,2,169]},{"1077323":[143,152,192,126,92,5,197,8,156,233,2,189,94,12,92,101,196,8,175,105,129,48,41,255]},{"1077348":[208,4,169]},{"1077353":[107,201,1]},{"1077357":[208,16,175,197,243,126,41,15]},{"1077366":[201,2]},{"1077369":[176,84,32,211,240,107,201,2]},{"1077378":[208,75,32,211,240,240,70,218,90,226,48,34,126,130,164,194,48,122,250,176,4,169,1]},{"1077402":[107,175,74,128,48,41,255]},{"1077410":[240,43,175,195,242,126,41,32]},{"1077419":[208,34,173,8,3,41,128]},{"1077427":[240,4,169,1]},{"1077432":[107,226,48,34,111,155,9,175,195,242,126,9,32,143,195,242,126,194,48,169,1]},{"1077454":[107,169]},{"1077458":[107,165,34,201,200,7,144,16,201,40,8,176,11,165,32,201,184,6,176,4,169,1]},{"1077481":[96,169]},{"1077485":[96,175,76,128,48,41,255]},{"1077493":[240,4,92,90,189,27,224,118]},{"1077502":[176,4,92,240,188,27,92,90,189,27,175,200,243,126,41,255]},{"1077519":[72,170,191,64,130,48,208,3,130,175]},{"1077530":[58,133]},{"1077533":[10,10,24,101]},{"1077538":[10,10,170,169,22]},{"1077544":[143,66,193,126,191,85,130,48,143,68,193,126,191,87,130,48,143,70,193,126,191,89,130,48,24,105,16]},{"1077572":[143,72,193,126,191,91,130,48,143,74,193,126,191,93,130,48,143,80,193,126,191,95,130,48,143,82,193,126,191,83,130,48,143,78,193,126,191,97,130,48,41,255]},{"1077615":[137,128]},{"1077618":[240,3,9]},{"1077622":[255,143,106,193,126,191,98,130,48,41,255]},{"1077634":[137,128]},{"1077637":[240,3,9]},{"1077641":[255,143,110,193,126,169]},{"1077649":[56,239,106,193,126,143,108,193,126,169]},{"1077661":[56,239,110,193,126,143,112,193,126,191,82,130,48,41,255]},{"1077677":[143,76,193,126,143,64,193,126,156,152,6,156,153,6,226,32,166]},{"1077695":[191,71,130,48,143,153,80,127,194,32,104,107,174,232,28,191,80,131,48,208,8,175,200,243,126,92,154,132,2,191,129,132,2,10,170,191,210,216,2,133,160,191,211,216,2,133,161,169,8,133,16,100,17,100,176,156,10,1,156,170,4,34,149,227,13,34,136,250,13,34,50,221,13,107,162,36]},{"1077772":[165]},{"1077774":[223]},{"1077776":[184,27,208,9,173,10,4,223,38,184,27,240,32,202,202,16,235,162,30]},{"1077796":[165]},{"1077798":[223]},{"1077800":[131,48,208,9,173,10,4,223,32,131,48,240,12,202,202,16,235,92,164,184,27,92,175,184,27,226,48,138,74,170,191,64,131,48,141,14,1,156,15,1,92,189,184,27,133]},{"1077846":[175,74,128,48,41,255]},{"1077853":[240,25,175,93]},{"1077859":[41,255]},{"1077862":[201,20]},{"1077865":[208,13,165,138,41,64]},{"1077872":[197,123,240,4,92,119,189,27,162,2,1,92,10,189,27,175,137,128,48,240,16,165,138,201,71,208,10,175,199,242,126,9,32,143,199,242,126,107,72,175,74,128,48,240,13,165,138,41,64,208,7,104,156,198,4,169]},{"1077929":[107,104,141,228,2,141,193,15,141,16,7,107,165,12,201,56,208,4,9,64,133,12,165,13,157,2,8,165,12,157,3,8,107,175,127,129,48,208,6,173,29,3,201,11,107,175,65,80,127,26,143,65,80,127,175,127,129,48,207,65,80,127,208,8,169]},{"1077995":[143,65,80,127,128,10,74,207,65,80,127,144,3,226,2,107,194,2,107,175,127,129,48,208,7,34,182,233,29,165,95,107,169]},{"1078029":[107,175,51,128,48,240,9,141,202,4,169,43,141,46,1,107,169,255,141,202,4,107,175,112,243,126,24,111,52,128,48,58,207,67,243,126,144,13,175,67,243,126,201,99,176,5,26,143,67,243,126,107,175,113,243,126,24,111,53,128,48,58,207,119,243,126,144,13,175,119,243,126,201,99,176,5,26,143,119,243,126,107,175,112,243,126,24,111,52,128,48,207,67,243,126,107,169]},{"1078128":[143,128,80,127,143,130,80,127,143,132,80,127,143,134,80,127,143,136,80,127,143,138,80,127,175,144,129,48,41,255]},{"1078159":[201,2]},{"1078162":[208,27,175,62,244,126,56,239,84,244,126,143,140,80,127,175,64,244,126,239,86,244,126,143,142,80,127,128,30,201,1]},{"1078194":[208,25,175,84,244,126,56,239,62,244,126,143,140,80,127,175,86,244,126,239,64,244,126,143,142,80,127,175,142,80,127,207,157,245,160,144,10,208,8,175,140,80,127,207,155,245,160,144,114,175,145,129,48,41,255]},{"1078250":[208,24,169,2]},{"1078255":[143,126,80,127,175,62,244,126,143,84,244,126,175,64,244,126,143,86,244,126,96,201,1]},{"1078279":[208,38,175,140,80,127,73,255,255,24,105,1]},{"1078292":[143,140,80,127,175,142,80,127,73,255,255,105]},{"1078306":[143,142,80,127,169,1]},{"1078313":[143,126,80,127,128,54,201,2]},{"1078322":[208,24,169,2]},{"1078327":[143,126,80,127,175,62,244,126,143,84,244,126,175,64,244,126,143,86,244,126,96,226,48,34,131,219,160,194,48,96,175,146,129,48,41,255]},{"1078364":[240,7,169]},{"1078369":[143,126,80,127,175,142,80,127,207,145,245,160,144,10,208,8,175,140,80,127,207,143,245,160,144,53,175,128,80,127,26,201,10]},{"1078403":[144,12,175,130,80,127,26,143,130,80,127,169]},{"1078417":[143,128,80,127,175,140,80,127,56,239,143,245,160,143,140,80,127,175,142,80,127,239,145,245,160,143,142,80,127,128,181,175,142,80,127,207,149,245,160,144,10,208,8,175,140,80,127,207,147,245,160,144,53,175,132,80,127,26,201,10]},{"1078478":[144,12,175,134,80,127,26,143,134,80,127,169]},{"1078492":[143,132,80,127,175,140,80,127,56,239,147,245,160,143,140,80,127,175,142,80,127,239,149,245,160,143,142,80,127,128,181,175,142,80,127,207,153,245,160,144,10,208,8,175,140,80,127,207,151,245,160,144,53,175,136,80,127,26,201,10]},{"1078553":[144,12,175,138,80,127,26,143,138,80,127,169]},{"1078567":[143,136,80,127,175,140,80,127,56,239,151,245,160,143,140,80,127,175,142,80,127,239,153,245,160,143,142,80,127,128,181,175,128,80,127,24,105,144,36,143,128,80,127,175,130,80,127,24,105,144,36,143,130,80,127,175,132,80,127,24,105,144,36,143,132,80,127,175,134,80,127,24,105,144,36,143,134,80,127,175,136,80,127,24,105,144,36,143,136,80,127,175,138,80,127,24,105,144,36,143,138,80,127,96,192,75,3]},{"1078675":[16,14]},{"1078679":[60]},{"1078683":[255,255,255,127,175,204,80,127,41,255]},{"1078694":[240,29,169,7,40,143,144,199,126,169,10,40,143,146,199,126,169,11,40,143,148,199,126,169,12,40,143,150,199,126,107,169,127,36,143,144,199,126,143,146,199,126,143,148,199,126,143,150,199,126,175,144,129,48,208,1,107,169,7,40,143,146,199,126,175,126,80,127,41,2]},{"1078765":[240,93,175,145,129,48,41,255]},{"1078774":[208,27,169,8,40,143,148,199,126,169,9,40,143,150,199,126,169,127,36,143,152,199,126,143,154,199,126,128,28,169,10,40,143,148,199,126,169,11,40,143,150,199,126,169,12,40,143,152,199,126,169,127,36,143,154,199,126,143,156,199,126,143,158,199,126,143,160,199,126,143,162,199,126,143,164,199,126,175,146,129,48,208,1,107,128,77,175,126,80,127,41,1]},{"1078867":[24,105,4,40,143,148,199,126,175,130,80,127,143,150,199,126,175,128,80,127,143,152,199,126,169,6,40,143,154,199,126,175,134,80,127,143,156,199,126,175,132,80,127,143,158,199,126,169,6,40,143,160,199,126,175,138,80,127,143,162,199,126,175,136,80,127,143,164,199,126,165,26,41,31]},{"1078942":[208,3,32,109,243,107,175,204,80,127,208,16,175,145,129,48,201,2,208,14,175,126,80,127,41,2,240,6,169]},{"1078972":[143,109,243,126,175,109,243,126,107,138,26,143,153,80,127,191,115,187,27,141,14,1,107,175,153,80,127,240,19,58,10,170,191]},{"1079006":[161,48,141,150,6,191,2,162,48,141,152,6,128,9,189,36,215,141,150,6,156,152,6,107,175,153,80,127,201,67,107,32,33,129,160,88,162,2,165,138,9,64,201,67,240,52,201,69,240,48,201,71,240,44,160,90,165,138,201,64,176,24,162,7,165,138,201,24,240,28,162,5,175]},{"1079080":[243,126,41,64,240,2,162,2,165,138,240,12,162,2,175,197,243,126,201,2,176,2,162,3,175,202,243,126,240,28,162,15,165,138,201,64,240,16,162,13,201,67,240,10,201,69,240,6,201,71,240,2,162,9,175,202,243,126,24,42,42,42,207,74,128,48,240,8,175,87,243,126,208,2,162,4,173,50,1,201,242,208,7,236,48,1,208,2,162,243,92,137,131,2,194,32,169,65,38,141,112,67,162,62,169]},{"1079186":[255,157]},{"1079189":[27,157,64,27,157,128,27,157,192,27,157]},{"1079201":[28,157,64,28,157,128,28,202,202,16,231,169]},{"1079215":[143,7,192,126,143,9,192,126,226,32,34,200,215]},{"1079229":[169,128,133,155,162,4,175,202,243,126,24,42,42,42,207,74,128,48,240,6,175,87,243,126,240,32,162,9,165,138,201,64,176,24,162,2,201]},{"1079267":[208,12,175]},{"1079271":[243,126,41,64,208,10,162,5,128,6,201,24,208,2,162,7,142,44,1,165,138,201,64,208,4,162,15,128,19,201,67,240,8,201,69,240,4,201,71,208,22,169,9,141,45,1,162,13,175,87,243,126,15,74,128,48,208,2,162,4,142,44,1,165,17,141,12,1,100,17,100,176,156]},{"1079345":[2,156,16,7,107,165,138,201,64,176,24,162,7,165,138,201,24,240,28,162,5,175]},{"1079368":[243,126,41,64,240,2,162,2,165,138,240,12,162,2,175,197,243,126,201,2,176,2,162,3,175,202,243,126,240,58,162,9,165,138,201,112,208,20,175,240,242,126,41,32,208,12,169,1,205,49,1,240,3,141,45,1,128,26,201,67,240,15,201,69,240,11,201,71,240,7,169,5,141,45,1,128,7,162,13,169,9,141,45,1,175,202,243,126,24,42,42,42,207,74,128,48,240,8,175,87,243,126,208,2,162,4,107,173,10,4,201,24,208,2,165,27,107,201,64,240,12,201,66,240,8,201,80,240,4,201,81,208,8,175,122,243,126,201,127,240,5,169,241,141,44,1,107,89]},{"1079518":[7,104,240,208,3,95,129,10,104,250,208,28,196,244,232]},{"1079534":[197,74,10,197,243,10,197,50,12,197,51,12,232,196,197,25,13,232,88,197,26,13,47,35,104,251,240,3,95,157,10,196,244,232,112,197,74,10,232,192,197,243,10,232,218,197,50,12,197,25,13,232,88,197,51,12,197,26,13,63,129,10,228,244,208,252,100,244,208,248,250]},{"1079606":[244,111,4]},{"1079610":[115,10,95]},{"1079614":[7]},{"1079620":[34,149,189,164,34,58,135,1,194,16,166,160,191,232,251,160,226,16,34,156,135]},{"1079642":[108,249,160,109,249,160,250,249,160,135,250,160,20,251,160,126,251,160,107,175,65,128,48,208,1,107,194,48,162,92,25,169,208,8,159]},{"1079678":[32,126,232,232,159]},{"1079684":[32,126,232,232,159]},{"1079690":[32,126,232,232,159]},{"1079696":[32,126,232,232,162,220,25,159]},{"1079705":[32,126,232,232,169,202,12,159]},{"1079714":[32,126,232,232,169,203,12,159]},{"1079723":[32,126,232,232,169,208,8,159]},{"1079732":[32,126,232,232,162,92,26,159]},{"1079741":[32,126,232,232,169,218,12,159]},{"1079750":[32,126,232,232,169,219,12,159]},{"1079759":[32,126,232,232,169,208,8,159]},{"1079768":[32,126,232,232,162,220,26,159]},{"1079777":[32,126,232,232,159]},{"1079783":[32,126,232,232,159]},{"1079789":[32,126,232,232,159]},{"1079795":[32,126,232,232,226,48,107,175,65,128,48,208,1,107,194,48,162,28,25,169,208,8,159]},{"1079819":[32,126,232,232,159]},{"1079825":[32,126,232,232,159]},{"1079831":[32,126,232,232,159]},{"1079837":[32,126,232,232,162,156,25,159]},{"1079846":[32,126,232,232,169,202,12,159]},{"1079855":[32,126,232,232,169,203,12,159]},{"1079864":[32,126,232,232,169,208,8,159]},{"1079873":[32,126,232,232,162,28,26,159]},{"1079882":[32,126,232,232,169,218,12,159]},{"1079891":[32,126,232,232,169,219,12,159]},{"1079900":[32,126,232,232,169,208,8,159]},{"1079909":[32,126,232,232,162,156,26,159]},{"1079918":[32,126,232,232,159]},{"1079924":[32,126,232,232,159]},{"1079930":[32,126,232,232,159]},{"1079936":[32,126,232,232,226,48,107,175,65,128,48,208,1,107,194,48,162,92,9,169,208,8,159]},{"1079960":[32,126,232,232,159]},{"1079966":[32,126,232,232,159]},{"1079972":[32,126,232,232,159]},{"1079978":[32,126,232,232,162,220,9,159]},{"1079987":[32,126,232,232,169,202,12,159]},{"1079996":[32,126,232,232,169,203,12,159]},{"1080005":[32,126,232,232,169,208,8,159]},{"1080014":[32,126,232,232,162,92,10,159]},{"1080023":[32,126,232,232,169,218,12,159]},{"1080032":[32,126,232,232,169,219,12,159]},{"1080041":[32,126,232,232,169,208,8,159]},{"1080050":[32,126,232,232,162,220,10,159]},{"1080059":[32,126,232,232,159]},{"1080065":[32,126,232,232,159]},{"1080071":[32,126,232,232,159]},{"1080077":[32,126,232,232,226,48,107,175,197,243,126,201,2,144,1,107,175,138,128,48,208,1,107,194,32,169,225,8,143,150,58,126,143,22,61,126,143,168,58,126,143,40,61,126,26,143,152,58,126,143,154,58,126,143,156,58,126,143,158,58,126,143,160,58,126,143,162,58,126,143,164,58,126,143,166,58,126,26,143,22,59,126,143,150,59,126,143,22,60,126,143,150,60,126,143,40,59,126,143,168,59,126,143,40,60,126,143,168,60,126,226,32,107,175,197,243,126,201,2,144,1,107,175,138,128,48,208,1,107,194,32,169,225,8,143,214,58,126,143,86,61,126,143,232,58,126,143,104,61,126,26,143,216,58,126,143,218,58,126,143,220,58,126,143,222,58,126,143,224,58,126,143,226,58,126,143,228,58,126,143,230,58,126,26,143,86,59,126,143,214,59,126,143,86,60,126,143,214,60,126,143,104,59,126,143,232,59,126,143,104,60,126,143,232,60,126,226,32,107]},{"1080310":[1]},{"1080392":[5]},{"1080394":[4]},{"1080422":[2]},{"1080518":[3]},{"1080616":[192,10,208,7,173,12,4,201,18,240,2,24,96,56,96,100]},{"1080633":[134,1,133,2,32,40,253,176,4,92,83,230]},{"1080646":[169,49,133,2,194,32,169]},{"1080654":[192,133]},{"1080657":[162,128,167]},{"1080661":[141,24,33,230]},{"1080666":[230]},{"1080668":[167]},{"1080670":[141,24,33,230]},{"1080675":[230]},{"1080677":[167]},{"1080679":[141,24,33,230]},{"1080684":[230]},{"1080686":[167]},{"1080688":[141,24,33,230]},{"1080693":[230]},{"1080695":[167]},{"1080697":[141,24,33,230]},{"1080702":[230]},{"1080704":[167]},{"1080706":[141,24,33,230]},{"1080711":[230]},{"1080713":[167]},{"1080715":[141,24,33,230]},{"1080720":[230]},{"1080722":[167]},{"1080724":[141,24,33,230]},{"1080729":[230]},{"1080731":[202,208,181,226,32,92,81,230]},{"1080740":[226,48,175,248,194,126,168,32,40,253,194,48,176,10,162]},{"1080757":[160,64]},{"1080760":[92,104,223]},{"1080764":[162]},{"1080766":[192,160]},{"1080770":[169]},{"1080772":[8,139,84,127,177,171,162]},{"1080780":[8,169]},{"1080783":[102,133,3,92,110,223]},{"1081344":[34,181,128]},{"1081348":[34,43,222,160,72,8,175,67,244,126,208,51,194,32,175,46,244,126,26,143,46,244,126,208,9,175,48,244,126,26,143,48,244,126,165,16,201,14,1,208,20,175,68,244,126,26,143,68,244,126,208,9,175,70,244,126,26,143,70,244,126,226,32,40,104,107,72,218,90,11,175,68,80,127,240,42,8,226,48,169]},{"1081429":[143,68,80,127,175,69,80,127,240,10,169]},{"1081441":[143,69,80,127,34,230,191,164,175,70,80,127,240,10,169]},{"1081457":[143,70,80,127,34,90,168,160,40,175,67,244,126,41,255]},{"1081473":[208,20,175,62,244,126,26,143,62,244,126,208,9,175,64,244,126,26,143,64,244,126,92,208,128]},{"1083056":[127,32,127,32,80,40,86,168,82,40,91,40,91,40,92,40,127,32,2,60,3,60,127,32,127,32,136,44,137,44,127,32,167,32,169,32,127,32,113,40,127,32,127,32,139,40,143,40,171,36,172,36,143,104,139,104,127,32,127,32,127,32,127,32,127,32,127,32,84,40,113,40,88,40,127,32,127,32,93,40,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,78,48,88,40,127,32,127,32,93,40,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,94,48,89,40,91,168,91,168,92,168,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,94,48,84,104,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,80,168,86,40,80,232]},{"1083392":[226,40,169,255,24,105,255,201,100,216,240,10,194,32,169,255,1,27,92,39,128]},{"1083414":[226,48,169,128,141]},{"1083420":[33,169,3,141,5,33,156,6,33,169,1,141,11,33,156,13,33,156,13,33,169,1,141,44,33,169,255,141,14,33,141,14,33,156,46,33,156,47,33,169,48,141,48,33,156,49,33,169,224,141,50,33,156,51,33,156]},{"1083477":[66,194,16,156,22,33,169,12,141,7,33,141,23,33,169,128,141,21,33,162,1,24,142]},{"1083501":[67,162,64,224,142,2,67,169,56,141,4,67,162]},{"1083515":[8,142,5,67,169,1,141,11,66,162]},{"1083526":[128,142,2,67,169,55,141,4,67,162]},{"1083537":[128,142,5,67,169,1,141,11,66,162]},{"1083548":[128,142,2,67,169,56,141,4,67,162,64,96,142,5,67,169,1,141,11,66,156,33,33,162]},{"1083573":[34,142]},{"1083576":[67,162,64,232,142,2,67,169,56,141,4,67,162]},{"1083590":[2,142,5,67,169,1,141,11,66,169,15,141]},{"1083603":[33,219]},{"1089536":[226,32,165,138,201,71,240,8,191,148,253,15,92,114,136]},{"1089552":[191,77,154,164,92,114,136]},{"1113856":[169]},{"1113858":[162]},{"1113860":[159,37,192,126,159]},{"1113866":[80,127,232,224,16,144,243,162,16,159]},{"1113877":[80,127,232,224,255,144,247,162]},{"1113886":[191]},{"1113888":[32,112,223,192,255]},{"1113894":[208,7,232,224,21,144,241,128,32,194,48,169]},{"1113908":[159]},{"1113911":[112,232,224]},{"1113915":[32,144,246,226,48,162]},{"1113922":[191,192,255]},{"1113926":[159]},{"1113928":[32,112,232,224,21,144,243,169,1,141,13,66,169,16,133,188,169,129,141]},{"1113948":[66,107,34,212,224,160,92,99,212]},{"1114112":[141,240,28,140,241,28,34,47,241,6,144,107,34,170,244,7,176,101,165,246,16,97,189,16,15,208,92,165,77,201,2,240,86,34,166,234,6,218,187,191,163,225,5,250,197,47,208,71,90,173,240,28,172,241,28,165,160,201,5,240,6,201,28,240,24,128,42,194,32,175,122,129,48,15,20,244,126,143,20,244,126,226,32,34,36,237,160,128,20,194,32,175,124,129,48,15,20,244,126,143,20,244,126,226,32,34,53,237,160,169,64,157,16,15,104,73,3,56,107,189,224,13,24,107,90,72,34,47,241,6,144,56,34,170,244,7,176,50,165,246,16,46,189,16,15,208,41,165,77,201,2,240,35,34,166,234,6,218,187,191,163,225,5,250,197,47,208,20,104,235,104,90,168,235,34,25,226,5,169,64,157,16,15,104,73,3,56,107,122,104,189,224,13,24,107]},{"1146881":[1,159,6,37,40,43,34,32,34,39,26,37,159,32,26,38,30,159,44,45,26,31,31,7,35,60,79,60,58,76,75,64,77,60,159,71,73,70,59,76,58,60,73,8,31,100,101,110,107,111,100,101,159,117,93,105,93,113,95,100,101,8,31,138,139,148,145,149,138,139,159,155,131,143,131,151,133,138,139,12,15,41,43,40,29,46,28,30,43,8,31,111,100,101,99,97,110,113,159,105,101,117,93,105,107,112,107,8,31,149,138,139,137,135,148,151,159,143,139,155,131,143,145,150,145,12,15,3,8,17,4,2,19,14,17,9,27,112,93,103,93,111,100,101,159,112,97,118,113,103,93,9,27,150,131,141,131,149,138,139,159,150,135,156,151,141,131,9,25,74,58,73,64,71,75,159,78,73,64,75,60,73,9,27,103,97,106,111,113,103,97,159,112,93,106,93,94,97,9,27,141,135,144,149,151,141,135,159,150,131,144,131,132,135,6,37,26,44,44,34,44,45,26,39,45,159,29,34,43,30,28,45,40,43,44,7,33,117,93,111,113,100,101,111,93,159,117,93,105,93,105,113,110,93,7,33,155,131,149,151,138,139,149,131,159,155,131,143,131,143,151,148,131,9,25,117,107,101,95,100,101,159,117,93,105,93,96,93,9,25,155,145,139,133,138,139,159,155,131,143,131,134,131,3,49,74,58,73,60,60,69,159,62,73,56,71,63,64,58,74,159,59,60,74,64,62,69,60,73,74,8,31,40,27,35,30,28,45,159,29,30,44,34,32,39,30,43,44,8,29,111,107,101,95,100,101,110,107,159,112,107,105,101,112,93,8,29,149,145,139,133,138,139,148,145,159,150,145,143,139,150,131,9,27,112,93,103,93,117,93,159,101,105,93,105,113,110,93,9,27,150,131,141,131,155,131,159,139,143,131,143,151,148,131,5,41,27,26,28,36,159,32,43,40,46,39,29,159,29,30,44,34,32,39,30,43,44,8,29,105,93,111,93,106,93,107,159,93,110,101,105,107,112,107,8,29,143,131,149,131,144,131,145,159,131,148,139,143,145,150,145,7,33,112,111,113,117,107,111,100,101,159,115,93,112,93,106,93,94,97,7,33,150,149,151,155,145,149,138,139,159,153,131,150,131,144,131,132,135,8,31,15,17,14,6,17]},{"1147398":[12,159,3,8,17,4,2,19,14,17,8,31,112,107,111,100,101,100,101,103,107,159,106,93,103,93,99,107,8,31,150,145,149,138,139,138,139,141,145,159,144,131,141,131,137,145,8,29,68,56,64,69,159,71,73,70,62,73,56,68,68,60,73,8,31,117,93,111,113,106,93,110,101,159,111,107,97,102,101,105,93,8,31,155,131,149,151,144,131,148,139,159,149,145,135,140,139,143,131,7,33,70,57,65,60,58,75,159,71,73,70,62,73,56,68,68,60,73,9,27,103,93,118,113,93,103,101,159,105,107,110,101,112,93,9,27,141,131,156,151,131,141,139,159,143,145,148,139,150,131,10,21,41,43,40,32,43,26,38,38,30,43,44,8,31,112,93,112,111,113,107,159,106,101,111,100,101,117,93,105,93,8,31,150,131,150,149,151,145,159,144,139,149,138,139,155,131,143,131,8,29,117,113,101,95,100,101,159,117,93,105,93,105,107,112,107,8,29,155,151,139,133,138,139,159,155,131,143,131,143,145,150,145,8,31,117,107,111,100,101,100,101,110,107,159,106,107,105,107,112,107,8,31,155,145,149,138,139,138,139,148,145,159,144,145,143,145,150,145,11,17,97,101,102,101,159,106,107,112,107,11,17,135,139,140,139,159,144,145,150,145,8,29,111,93,112,107,110,113,159,112,93,103,93,100,93,112,93,8,29,149,131,150,145,148,151,159,150,131,141,131,138,131,150,131,9,27,112,107,111,100,101,107,159,101,115,93,115,93,103,101,9,27,150,145,149,138,139,145,159,139,153,131,153,131,141,139,6,37,111,100,101,99,97,100,101,110,107,159,103,93,111,93,105,93,112,111,113,6,37,149,138,139,137,135,138,139,148,145,159,141,131,149,131,143,131,150,149,151,8,31,117,93,111,113,106,93,110,101,159,106,101,111,100,101,96,93,8,31,155,131,149,151,144,131,148,139,159,144,139,149,138,139,134,131,9,27,18,14,20,13,3,159,2,14,12,15,14,18,4,17,11,19,103,107,102,101,159,103,107,106,96,107,11,19,141,145,140,139,159,141,145,144,134,145,10,23,58,70,70,73,59,64,69,56,75,70,73,74,11,19,103,97,101,118,107,159,103,93,112,107,11,19,141,135,139,156,145,159,141,131,150,145,9,25,112,93,103,93,107,159,111,100,101,105,101,118,113,9,25,150,131,141,131,145,159,149,138,139,143,139,156,151,8,31,41,43,34,39,45,30,29,159,26,43,45,159,48,40,43,36,9,25,117,107,101,95,100,101,159,103,107,112,93,94,97,9,25,155,145,139,133,138,139,159,141,145,150,131,132,135,10,23,100,101,96,97,103,101,159,98,113,102,101,101,10,23,138,139,134,135,141,139,159,136,151,140,139,139,8,31,117,107,111,100,101,93,103,101,159,103,107,101,118,113,105,101,8,31,155,145,149,138,139,131,141,139,159,141,145,139,156,151,143,139,9,27,117,93,111,113,100,101,110,107,159,111,93,103,93,101,9,27,155,131,149,151,138,139,148,145,159,149,131,141,131,139,8,29,112,107,105,107,93,103,101,159,103,113,110,107,113,105,97,8,29,150,145,143,145,131,141,139,159,141,151,148,145,151,143,135,7,33,18,15,4,2,8]},{"1148127":[11,159,19,7]},{"1148132":[13,10,18,159,19,14,9,25,106,107,94,113,107,159,107,103,93,102,101,105,93,9,25,144,145,132,151,145,159,145,141,131,140,139,143,131,7,33,117,93,111,113,106,107,110,101,159,112,93,103,97,112,93,106,101,7,33,155,131,149,151,144,145,148,139,159,150,131,141,135,150,131,144,139,10,23,103,101,117,107,111,100,101,159,103,107,96,93,10,23,141,139,155,145,149,138,139,159,141,145,134,131,7,35,112,93,103,93,105,101,112,111,113,159,103,113,118,113,100,93,110,93,7,35,150,131,141,131,143,139,150,149,151,159,141,151,156,151,138,131,148,131,9,27,100,101,110,107,106,107,94,113,159,103,93,103,113,101,9,27,138,139,148,145,144,145,132,151,159,141,131,141,151,139,7,33,111,100,101,99,97,103,101,159,117,93,105,93,111,100,101,110,107,7,33,149,138,139,137,135,141,139,159,155,131,143,131,149,138,139,148,145,4,45,17]},{"1148348":[13,3,14,12,8,25,4,17,159,2,14,13,19,17,8,1,20,19,14,17,18,8,29,34,45,30,38,159,43,26,39,29,40,38,34,51,30,43,2,55,103,93,112,96,97,114,111,99,93,105,97,111,159,159,159,159,159,159,159,159,159,114,97,97,112,107,110,108,2,55,141,131,150,134,135,152,149,137,131,143,135,149,159,159,159,159,159,159,159,159,159,152,135,135,150,145,148,146,2,55,95,100,110,101,111,112,107,111,107,115,97,106,159,159,159,159,159,159,159,96,97,111,111,117,110,97,109,112,2,55,133,138,148,139,149,150,145,149,145,153,135,144,159,159,159,159,159,159,159,134,135,149,149,155,148,135,147,150,10,21,111,105,93,104,104,100,93,95,103,97,110,10,21,149,143,131,142,142,138,131,133,141,135,148,6,37,60,69,75,73,56,69,58,60,159,73,56,69,59,70,68,64,81,60,73,2,55,93,105,93,118,101,106,99,93,105,108,100,93,110,107,111,159,159,159,104,104,95,107,107,104,96,93,114,97,2,55,131,143,131,156,139,144,137,131,143,146,138,131,148,145,149,159,159,159,142,142,133,145,145,142,134,131,152,135,9,25,103,97,114,101,106,95,93,112,100,95,93,110,112,9,25,141,135,152,139,144,133,131,150,138,133,131,148,150,8,31,30,39,30,38,50,159,43,26,39,29,40,38,34,51,30,43,2,55,118,93,110,94,117,91,92,159,159,159,159,159,159,159,159,159,159,159,159,159,159,111,107,111,113,103,97,86,2,55,156,131,148,132,155,129,130,159,159,159,159,159,159,159,159,159,159,159,159,159,159,149,145,149,151,141,135,124,10,23,97,106,96,97,110,107,98,99,93,105,97,111,10,23,135,144,134,135,148,145,136,137,131,143,135,149,7,35,74,71,73,64,75,60,159,59,60,77,60,67,70,71,68,60,69,75,2,55,105,101,103,97,112,110,97,112,100,97,115,97,117,159,159,159,159,159,159,159,159,159,101,94,93,118,104,117,2,55,143,139,141,135,150,148,135,150,138,135,153,135,155,159,159,159,159,159,159,159,159,159,139,132,131,156,142,155,2,55,98,101,111,100,166,115,93,98,98,104,97,89,87,159,159,159,98,93,112,105,93,106,111,108,93,106,96,93,2,55,136,139,149,138,198,153,131,136,136,142,135,127,125,159,159,159,136,131,150,143,131,144,149,146,131,144,134,131,2,55,103,110,97,104,94,97,104,159,159,159,159,159,159,159,159,159,159,159,159,159,159,112,115,110,107,116,93,111,2,55,141,148,135,142,132,135,142,159,159,159,159,159,159,159,159,159,159,159,159,159,159,150,153,148,145,154,131,149,14,7,99,104,93,106,14,7,137,142,131,144,9,27,18,15,4,2,8]},{"1148969":[11,159,19,7]},{"1148974":[13,10,18,2,55,111,113,108,97,110,111,103,113,102,159,159,159,159,159,159,159,159,159,159,97,114,101,104,93,111,100,85,88,2,55,149,151,146,135,148,149,141,151,140,159,159,159,159,159,159,159,159,159,159,135,152,139,142,131,149,138,123,126,2,55,105,117,110,93,105,107,106,99,159,159,159,159,159,159,159,159,159,159,159,159,159,102,107,111,100,110,112,93,2,55,143,155,148,131,143,145,144,137,159,159,159,159,159,159,159,159,159,159,159,159,159,140,145,149,138,148,150,131,2,55,115,93,104,103,101,106,99,97,117,97,159,159,159,159,159,105,93,112,100,107,106,106,93,108,103,101,106,111,2,55,153,131,142,141,139,144,137,135,155,135,159,159,159,159,159,143,131,150,138,145,144,144,131,146,141,139,144,149,9,25,111,93,103,113,110,93,112,111,113,94,93,111,93,9,25,149,131,141,151,148,131,150,149,151,132,131,149,131,13,11,93,106,96,160,160,160,13,11,131,144,134,192,192,192,1,59,112,100,97,159,93,104,112,112,108,159,110,93,106,96,107,105,101,118,97,110,159,95,107,105,105,113,106,101,112,117,1,59,150,138,135,159,131,142,150,150,146,159,148,131,144,134,145,143,139,156,135,148,159,133,145,143,143,151,144,139,150,155,7,33,58,70,68,68,76,69,64,75,80,159,59,64,74,58,70,73,59,3,51,100,112,112,108,111,163,162,162,96,101,111,95,107,110,96,160,99,99,162,112,95,95,89,117,87,85,3,51,138,150,150,146,149,195,194,194,134,139,149,133,145,148,134,192,137,137,194,150,133,133,127,155,125,123,6,37,45,33,30,159,34,38,41,40,43,45,26,39,45,159,44,45,46,31,31,11,19,75,64,68,60,159,61,70,76,69,59,2,21,98,101,110,111,112,159,111,115,107,110,96,2,21,136,139,148,149,150,159,149,153,145,148,134,2,25,108,97,99,93,111,113,111,159,94,107,107,112,111,2,25,146,135,137,131,149,151,149,159,132,145,145,150,149,2,9,98,104,113,112,97,2,9,136,142,151,150,135,2,11,105,101,110,110,107,110,2,11,143,139,148,148,145,148,11,19,27,40,44,44,159,36,34,37,37,44,2,55,111,115,107,110,96,104,97,111,111,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,149,153,145,148,134,142,135,149,149,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,98,101,99,100,112,97,110,119,111,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,136,139,137,138,150,135,148,157,149,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,105,93,111,112,97,110,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,143,131,149,150,135,148,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,112,97,105,108,97,110,97,96,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,150,135,143,146,135,148,135,134,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,99,107,104,96,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,137,145,142,134,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,11,19,6]},{"1149777":[12,4,159,18,19]},{"1149783":[19,18,2,55,99,112,159,94,101,99,159,103,97,117,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,85,85,2,55,137,150,159,132,139,137,159,141,135,155,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,123,123,2,9,94,107,106,103,111,2,9,132,145,144,141,149,2,27,111,93,114,97,159,93,106,96,159,109,113,101,112,111,2,27,149,131,152,135,159,131,144,134,159,147,151,139,150,149,2,11,96,97,93,112,100,111,2,11,134,135,131,150,138,149,2,29,98,93,97,110,101,97,159,110,97,114,101,114,93,104,111,2,29,136,131,135,148,139,135,159,148,135,152,139,152,131,142,149,2,29,112,107,112,93,104,159,105,97,106,113,159,112,101,105,97,2,29,150,145,150,131,142,159,143,135,144,151,159,150,139,143,135,2,27,112,107,112,93,104,159,104,93,99,159,112,101,105,97,2,27,150,145,150,131,142,159,142,131,137,159,150,139,143,135,2,55,95,107,104,104,97,95,112,101,107,106,159,110,93,112,97,159,159,159,159,159,159,159,159,159,162,85,84,89,2,55,133,145,142,142,135,133,150,139,145,144,159,148,131,150,135,159,159,159,159,159,159,159,159,159,194,123,122,127,2,19,112,107,112,93,104,159,112,101,105,97,2,19,150,145,150,131,142,159,150,139,143,135,255]},{"1150093":[128,3,128,139,140,139,140]},{"1150101":[128,24,128,139,140,139,140,44,128,62,128,139,140,139,140]},{"1150117":[128,80,128,139,140,139,140,90,128,108,128,139,140,139,140,126,128,139,140,139,140,136,128,152,128,139,140,139,140,168,128,139,140,139,140,183,128,199,128,139,140,139,140]},{"1150161":[128,215,128,139,140,139,140,236,128,255,128,139,140,18,129,33,129,139,140,139,140,48,129,139,140,139,140]},{"1150189":[128]},{"1150191":[128,75,129,139,140,139,140,93,129,110,129,139,140,127,129,143,129,139,140,139,140]},{"1150213":[128,159,129,139,140,139,140,182,129,199,129,139,140,216,129,235,129,139,140,139,140,254,129,139,140,139,140,16,130,34,130,139,140,139,140,52,130,139,140,139,140,69,130,87,130,139,140,139,140,105,130,139,140,139,140,124,130,140,130,139,140,139,140]},{"1150277":[128,156,130,139,140,139,140,169,130,187,130,139,140,205,130,222,130,139,140,239,130,1,131,139,140,19,131,30,131,139,140,41,131,58,131,139,140,75,131,91,131,139,140,107,131,128,131,139,140,149,131,167,131,139,140,139,140,185,131,139,140,139,140,201,131,213,131,139,140,139,140,225,131,139,140,139,140,239,131,251,131,139,140,7,132,22,132,139,140,139,140]},{"1150369":[128,37,132,139,140,139,140,55,132,70,132,139,140,85,132,99,132,139,140,113,132,131,132,139,140,149,132,165,132,139,140,181,132,198,132,139,140,139,140,215,132,139,140,139,140,234,132,249,132,139,140,8,133,27,133,139,140,46,133,60,133,139,140,74,133,94,133,139,140,114,133,130,133,139,140,146,133,165,133,139,140]},{"1150451":[128]},{"1150453":[128]},{"1150455":[128]},{"1150457":[128]},{"1150459":[128]},{"1150461":[128]},{"1150463":[128]},{"1150465":[128]},{"1150467":[128]},{"1150469":[128]},{"1150471":[128]},{"1150473":[128]},{"1150475":[128]},{"1150477":[128]},{"1150479":[128]},{"1150481":[128]},{"1150483":[128]},{"1150485":[128]},{"1150487":[128]},{"1150489":[128,184,133,139,140,139,140]},{"1150497":[128]},{"1150499":[128,209,133,139,140,139,140,226,133]},{"1150509":[134,139,140,30,134,60,134,139,140,90,134,103,134,139,140,139,140,116,134,139,140,139,140,137,134,167,134,139,140,197,134,212,134,139,140,139,140]},{"1150547":[128,227,134,139,140,139,140,245,134,19,135,139,140,49,135,63,135,139,140,139,140,77,135,139,140,139,140,97,135,127,135,139,140,157,135,187,135,139,140,217,135,247,135,139,140,21,136,27,136,139,140,139,140,33,136,139,140,139,140,49,136,79,136,139,140,109,136,139,136,139,140,169,136,199,136,139,140,229,136,244,136,139,140,3,137,11,137,139,140,19,137,51,137,139,140,139,140,83,137,139,140,139,140,102,137,130,137,139,140]},{"1150657":[128]},{"1150659":[128]},{"1150661":[128]},{"1150663":[128]},{"1150665":[128]},{"1150667":[128]},{"1150669":[128]},{"1150671":[128]},{"1150673":[128]},{"1150675":[128]},{"1150677":[128]},{"1150679":[128]},{"1150681":[128]},{"1150683":[128]},{"1150685":[128]},{"1150687":[128]},{"1150689":[128]},{"1150691":[128]},{"1150693":[128]},{"1150695":[128]},{"1150697":[128,158,137,139,140,139,140]},{"1150705":[128,179,137,139,140,139,140,191,137,204,137,139,140,217,137,232,137,139,140,247,137,254,137,139,140,5,138,13,138,139,140,139,140]},{"1150739":[128,21,138,139,140,139,140,33,138,63,138,139,140,93,138,123,138,139,140,153,138,183,138,139,140,213,138,243,138,139,140,17,139,47,139,139,140,139,140,77,139,139,140,139,140,89,139,119,139,139,140,149,139,156,139,139,140,163,139,179,139,139,140,195,139,203,139,139,140,211,139,228,139,139,140,245,139,6,140,139,140,23,140,39,140,139,140,139,140,139,140,139,140,139,140,139,140,139,140,139,140,139,140]},{"1150843":[128]},{"1150845":[128]},{"1150847":[128]},{"1150849":[128]},{"1150851":[128,55,140,85,140,139,140,115,140,127,140,139,140]},{"1150865":[128]},{"1150867":[128]},{"1150869":[128]},{"1150871":[128]},{"1150873":[128]},{"1150875":[128]},{"1150884":[56]},{"1150886":[239,16,129,126,239,16]},{"1150902":[192]},{"1150904":[71,128,69,130]},{"1150916":[120]},{"1150918":[76,48,118,8,126]},{"1150932":[120]},{"1150934":[78,48,114,12,255]},{"1150948":[127]},{"1150950":[89,38,222,33,3,252]},{"1150964":[248]},{"1150966":[108,144,119,136,185,70]},{"1150980":[14]},{"1150982":[202,4,123,132,97,158]},{"1150996":[28]},{"1150998":[20,8,23,8,16,15]},{"1151012":[56]},{"1151014":[111,16,109,18,238,17]},{"1151028":[56]},{"1151030":[239,16,128,127,247,8]},{"1151044":[14]},{"1151046":[26,4,54,8,108,16]},{"1151058":[7]},{"1151060":[197,2,69,130,125,130,96,159]},{"1151078":[126]},{"1151080":[67,60,125,2]},{"1151092":[224]},{"1151094":[160,64,191,64,17,238]},{"1151106":[56]},{"1151108":[40,16,239,16,1,254,223,32]},{"1151124":[56]},{"1151126":[40,16,40,16,104,16,109,18,193,62,172,83,106,149,102,153,110,145,157,98,247]},{"1151148":[70,129,66,129,66,129,66,129,123,128,104,144,152,96,240]},{"1151164":[195,60,61,194,253,2,13,2,27,4,118,8,76,48,120]},{"1151180":[1,254,251,4,54,8,100,24,214,40,187,68,104,135,207]},{"1151196":[223,32,193,62,158,97,94,161,94,161,94,161,153,102,255]},{"1151212":[166,89,30,225,222,33,217,38,95,32,110,16,40,16,56]},{"1151228":[90,165,58,197,58,197,106,149,241,14,59,4,38,24,60]},{"1151244":[23,8,22,8,246,8,131,124,116,139,119,136,140,112,248]},{"1151260":[6,249,218,37,219,36,219,36,186,68,186,68,102,152,252]},{"1151276":[128,127,251,4,195,60,189,66,191,64,190,64,194,60,126]},{"1151292":[216,32,176,64,176,64,216,32,108,16,54,8,26,4,14]},{"1151308":[125,130,69,130,69,130,69,130,69,130,125,130,179,76,254]},{"1151324":[11,4,14]},{"1151332":[227]},{"1151334":[190,65,193,62,127]},{"1151340":[174,81,154,97,178,65,34,193,166,65,189,66,179,76,254]},{"1151356":[191,64,140,115,99,156,215,40,183,72,191,64,192,63,127]},{"1151372":[88,32,216,32,175,80,150,105,182,73,118,137,89,134,207]},{"1151396":[112]},{"1151398":[88,32,239,16]},{"1151403":[255]},{"1151412":[224]},{"1151414":[160,64,160,64,160,64]},{"1151426":[14]},{"1151428":[10,4,10,4,251,4]},{"1151435":[255]},{"1151444":[14]},{"1151446":[234,4,187,68,187,68]},{"1151460":[255]},{"1151462":[129,126,251,4,246,8]},{"1151472":[15]},{"1151474":[26,5,58,5,47,16,45,18,238,17]},{"1151488":[15]},{"1151490":[10,5,58,5,239,16,128,127,247,8]},{"1151504":[15]},{"1151506":[10,5,10,5,31]},{"1151512":[54,8,108,16]},{"1151524":[248]},{"1151526":[216,32,223,32,1,254]},{"1151540":[56]},{"1151542":[40,16,239,16]},{"1151547":[255]},{"1151560":[254]},{"1151562":[3,252]},{"1151574":[31]},{"1151576":[240,15,13,242]},{"1151588":[112]},{"1151590":[80,32,80,32,95,32]},{"1151600":[15]},{"1151602":[10,5,202,5,77,130,125,130,96,159]},{"1151616":[15]},{"1151618":[10,5,10,5,127]},{"1151624":[67,60,125,2]},{"1151632":[15]},{"1151634":[10,5,122,5,95,32,239,16]},{"1151643":[255,247,8,250,4,131,124,125,130,127,128,126,128,130,124,254]},{"1151660":[160,64,160,64,163,64,162,65,166,65,189,66,195,60,126]},{"1151676":[251,4,98,28,90,36,90,36,98,28,122,4,70,56,124]},{"1151692":[176,79,11,244,186,68,178,76,190,64,191,64,193,62,127]},{"1151708":[207,48]},{"1151711":[255,247,8,108,16,108,16,111,16,49,14,31]},{"1151724":[6,249,218,37,219,36,219,36,186,68,186,68,102,152,252]},{"1151740":[128,127,251,4,195,60,189,66,191,64,191,64,194,60,126]},{"1151756":[216,32,176,64,176,64,216,32,108,16,54,8,26,4,14]},{"1151772":[223,32,223,32,176,79,191,64,183,72,111,144,112,143,223]},{"1151788":[239,16,223,32,193,62,190,65,254,1,125,2,67,60,126]},{"1151804":[253,2,62,1,30,1,30,1,62,1,125,2,67,60,126]},{"1151820":[251,4,118,8,108,16,108,16,108,16,55,8,25,6,15]},{"1151836":[89,38,71,56,220,32,176,64,96,128,127,128,129,126,255]},{"1151852":[125,130,69,130,69,130,69,130,69,130,125,130,179,76,254]},{"1151868":[59,4,14]},{"1151876":[227]},{"1151878":[190,65,193,62,127]},{"1151884":[247,8,250,4,131,124,125,130,127,128,126,128,130,124,254]},{"1151908":[119]},{"1151910":[93,34,222,33,7,248]},{"1151924":[192]},{"1151926":[95,128,112,143,111,144]},{"1151940":[238]},{"1151942":[186,68,186,68,163,92]},{"1151956":[224]},{"1151958":[160,64,176,64,31,224]},{"1151974":[126]},{"1151976":[195,60,173,82]},{"1151984":[15]},{"1151986":[10,5,234,5,175,64,160,64,160,64]},{"1152000":[15]},{"1152002":[10,5,10,5,15]},{"1152008":[251,4]},{"1152011":[255]},{"1152016":[15]},{"1152018":[10,5,10,5,239]},{"1152024":[187,68,187,68]},{"1152036":[206]},{"1152038":[74,132,123,132,64,191]},{"1152052":[248]},{"1152054":[14,240,218,36,187,68]},{"1152068":[120]},{"1152070":[78,48,114,12,118,8]},{"1152086":[24]},{"1152088":[44,16,68,56]},{"1152100":[255]},{"1152102":[64,191,123,132,123,132]},{"1152112":[15]},{"1152114":[10,5,250,5,129,126,251,4,247,8]},{"1152128":[15]},{"1152130":[10,5,122,5,95,32,223,32,1,254]},{"1152144":[15]},{"1152146":[26,5,58,5,47,16,239,16]},{"1152155":[255,223,32,187,68,187,68,97,158,218,37,91,36,102,24,60]},{"1152172":[120,128,96,128,96,128,120,128,111,144,112,143,223]},{"1152188":[153,102,186,69,86,169,86,169,104,151,102,153,153,102,255]},{"1152204":[177,78,174,81,158,97,190,65,50,205,173,82,178,77,255]},{"1152220":[174,81,110,145,110,145,110,145,94,161,189,66,242,12,28]},{"1152236":[160,64,160,64,163,64,162,65,166,65,189,66,195,60,126]},{"1152252":[251,4,98,28,90,36,90,36,98,28,122,4,70,56,124]},{"1152268":[176,79,11,244,186,68,178,76,190,64,191,64,193,62,127]},{"1152284":[123,132,122,132,122,132,99,156,89,166,90,165,167,88,252]},{"1152300":[185,70,122,133,123,132,122,132,122,132,182,72,204,48,120]},{"1152316":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1152332":[214,40,186,68,59,196,109,130,197,2,6,1,2,1,3]},{"1152348":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1152364":[207,48]},{"1152367":[255,247,8,111,16,110,16,111,16,49,14,31]},{"1152380":[223,32,223,32,176,79,191,64,183,72,111,144,112,143,223]},{"1152396":[239,16,223,32,193,62,190,65,254,1,125,2,67,60,126]},{"1152420":[28]},{"1152422":[20,8,247,8,1,254]},{"1152436":[254]},{"1152438":[134,120,246,8,55,8]},{"1152452":[112]},{"1152454":[223,32,221,34,6,249]},{"1152468":[238]},{"1152470":[186,68,186,68,163,92]},{"1152484":[56]},{"1152486":[44,16,238,16,2,252]},{"1152496":[15]},{"1152498":[10,5,10,5,15]},{"1152504":[255]},{"1152506":[3,252]},{"1152512":[15]},{"1152514":[10,5,10,5,31]},{"1152520":[240,15,13,242]},{"1152528":[15]},{"1152530":[10,5,122,5,95,32,94,32,95,32]},{"1152548":[56]},{"1152550":[46,16,242,12,190,64]},{"1152564":[206]},{"1152566":[122,132,122,132,122,132]},{"1152580":[255]},{"1152582":[129,126,251,4,54,8]},{"1152596":[224]},{"1152598":[160,64,191,64,25,230]},{"1152612":[255]},{"1152614":[129,126,251,4,118,8]},{"1152624":[15]},{"1152626":[10,5,234,5,127,128,123,132,64,191]},{"1152640":[15]},{"1152642":[10,5,250,5,15,240,219,36,187,68]},{"1152656":[15]},{"1152658":[122,5,122,5,79,48,115,12,119,8,247,8,129,126,247,8,134,120,115,140,117,138,143,112,254]},{"1152684":[53,10,237,18,133,122,105,150,108,147,93,162,187,68,238]},{"1152700":[222,33,159,96,95,160,95,160,30,225,222,33,97,30,63]},{"1152716":[153,102,186,69,90,165,86,169,102,153,110,145,157,98,255]},{"1152732":[238,16,238,16,3,252,222,33,222,33,222,33,97,30,63]},{"1152748":[253,2,6,1,6,1,6,1,6,1,125,2,67,60,126]},{"1152764":[251,4,54,8,44,16,44,16,44,16,55,8,25,6,15]},{"1152780":[89,38,71,56,220,32,176,64,112,128,127,128,129,126,255]},{"1152796":[191,64,177,78,174,81,158,97,190,65,253,2,67,60,126]},{"1152812":[122,132,58,196,122,132,250,4,118,8,118,8,76,48,120]},{"1152828":[110,16,195,60,189,66,254,1,206,49,181,74,195,60,126]},{"1152844":[181,74,173,82,157,98,189,66,61,194,188,67,189,66,231]},{"1152860":[110,16,195,60,189,66,230,1,6,1,61,2,35,28,62]},{"1152876":[123,132,123,132,123,132,99,156,89,166,90,165,167,88,252]},{"1152892":[185,70,122,133,123,132,123,132,123,132,182,72,204,48,120]},{"1152908":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1152928":[15]},{"1152930":[10,5,10,5,63]},{"1152936":[108,16,68,56]},{"1152944":[15]},{"1152946":[10,5,250,5,64,191,123,132,123,132]},{"1152960":[15]},{"1152962":[8,7,202,5,124,131,123,132,64,191]},{"1152976":[15]},{"1152978":[8,7,250,5,12,243,219,36,187,68]},{"1152992":[15]},{"1152994":[8,7,122,5,76,51,115,12,55,8]},{"1153008":[15]},{"1153010":[8,7,10,5,60,3,111,16,70,56]},{"1153024":[15]},{"1153026":[8,7,250,5,64,191,123,132,123,132]},{"1153048":[252]},{"1153050":[182,72]},{"1153064":[28]},{"1153066":[246,8]},{"1153080":[28]},{"1153082":[23,8]},{"1153098":[126]},{"1153112":[112]},{"1153114":[220,32]},{"1153130":[220]},{"1153144":[240]},{"1153146":[152,96]},{"1153158":[112]},{"1153160":[92,32,100,24]},{"1153176":[124]},{"1153178":[214,40,214,40,186,68,59,196,109,130,197,2,2,1,2,1,3]},{"1153196":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153212":[123,132,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153228":[185,70,122,133,123,132,123,132,123,132,182,72,204,48,120]},{"1153244":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1153260":[214,40,186,68,59,196,125,130,205,2,6,1,2,1,3]},{"1153276":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153292":[163,92,21,234,189,66,218,36,94,32,104,16,56]},{"1153308":[99,156,85,170,53,202,101,154,243,12,46,16,56]},{"1153324":[17,14,247,8,135,120,115,140,117,138,143,112,248]},{"1153340":[195,60,61,194,253,2,29,2,59,4,38,24,60]},{"1153356":[132,120,220,32,134,120,90,164,82,172,106,148,150,104,252]},{"1153372":[118,136,122,132,122,132,122,132,126,128,188,64,200,48,120]},{"1153388":[236,16,198,56,58,196,250,4,250,4,230,24,156,96,112]},{"1153404":[254]},{"1153406":[98,156,154,100,246,8,238,16,215,40,57,198,239]},{"1153420":[10,244,222,32,195,60,157,98,93,162,93,162,147,108,254]},{"1153444":[255]},{"1153447":[255,254,1,62,1]},{"1153458":[3]},{"1153460":[6,1,13,2,27,4,118,8]},{"1153474":[28]},{"1153476":[20,8,247,8]},{"1153481":[255,126,129]},{"1153492":[255]},{"1153494":[1,254,239,16,40,16]},{"1153506":[14]},{"1153508":[10,4,10,4,251,4]},{"1153515":[255]},{"1153522":[56]},{"1153524":[40,16,40,16,239,16]},{"1153531":[255]},{"1153542":[254]},{"1153544":[130,124,250,4]},{"1153558":[255]},{"1153561":[255,254,1]},{"1153570":[28]},{"1153572":[20,8,20,8,247,8]},{"1153579":[255]},{"1153586":[56]},{"1153588":[40,16,40,16,239,16,1,254]},{"1153602":[56]},{"1153604":[40,16,111,16,64,63,222,33]},{"1153618":[224]},{"1153620":[160,64,191,64,128,127,187,68]},{"1153638":[255]},{"1153641":[255,254,1]},{"1153652":[255]},{"1153655":[255,126,129,66,129]},{"1153668":[255]},{"1153671":[255,254,1,2,1]},{"1153684":[224]},{"1153686":[48,192,208,32,115]},{"1153692":[45,18,43,20,46,16,108,16,88,32,208,32,176,64,224]},{"1153708":[202,52,58,196,234,4,10,4,10,4,10,4,10,4,14]},{"1153724":[126,129,70,129,198,1,5,2,13,2,59,4,38,24,60]},{"1153740":[40,16,40,16,40,16,40,16,40,16,239,16,1,254,255]},{"1153756":[251,4,18,12,50,12,42,20,218,36,58,196,234,4,14]},{"1153772":[238,17,45,18,43,20,46,16,40,16,40,16,40,16,56]},{"1153788":[26,4,26,4,26,4,26,4,26,4,251,4]},{"1153801":[255,255]},{"1153804":[6,1,254,1,128,127,254,1,6,1,254,1]},{"1153817":[255,255]},{"1153820":[238,17,110,17,110,17,94,33,222,33,189,66,105,134,207]},{"1153836":[239,16,239,16]},{"1153841":[255,247,8,20,8,20,8,20,8,28]},{"1153852":[190,65,102,129,197,2,13,2,59,4,230,24,156,96,120]},{"1153868":[122,132,74,132,202,4,26,4,22,8,116,8,76,48,120]},{"1153884":[2,1,2,1,2,1,2,1,2,1,254,1]},{"1153897":[255,255]},{"1153900":[66,129,194,1,6,1,5,2,13,2,59,4,38,24,60]},{"1153916":[254,1,128,127,126,1,5,2,13,2,123,4,70,56,124]},{"1153932":[2,1,2,1,6,1,13,2,25,6,243,12,14,240,248]},{"1153954":[119]},{"1153956":[93,34,93,34,221,34]},{"1153963":[255]},{"1153972":[224]},{"1153974":[48,192,208,32,243]},{"1153988":[255]},{"1153990":[1,254,253,2,13,2]},{"1154004":[112]},{"1154006":[80,32,80,32,223,32]},{"1154022":[195]},{"1154024":[98,129,162,65]},{"1154032":[15]},{"1154034":[10,5,26,5,23,8,247,8]},{"1154043":[255]},{"1154048":[15]},{"1154050":[58,5,42,21,47,16,239,16,1,254]},{"1154064":[15]},{"1154066":[58,5,42,21,111,16,64,63,222,33]},{"1154082":[56]},{"1154084":[40,16,111,16,64,63,222,33]},{"1154100":[15]},{"1154102":[249,6,135,120,247,8]},{"1154116":[251]},{"1154118":[110,145,110,145,182,73]},{"1154132":[255]},{"1154134":[129,126,255]},{"1154138":[255]},{"1154146":[56]},{"1154148":[40,16,40,16,40,16,40,16]},{"1154160":[15]},{"1154162":[234,5,186,69,191,64,128,127,187,68]},{"1154176":[15]},{"1154178":[10,5,10,5,255]},{"1154185":[255,254,1]},{"1154192":[15]},{"1154194":[122,5,90,37,93,34,221,34]},{"1154203":[255,221,34,93,34,93,34,125,2,61,2,59,4,38,24,60]},{"1154220":[54,193,214,33,253,2,29,2,251,4,230,24,28,224,248]},{"1154236":[11,4,26,4,22,8,51,12,109,18,222,33,50,193,227]},{"1154253":[255,222,33,93,34,91,36,95,32,95,32,96,31,63]},{"1154268":[178,65,214,33,117,2,13,2,59,4,230,24,156,96,240]},{"1154284":[238,17,110,17,110,17,94,33,222,33,189,66,121,134,207]},{"1154300":[239,16,239,16]},{"1154305":[255,247,8,54,8,54,8,54,8,28]},{"1154316":[190,65,102,129,197,2,13,2,59,4,230,24,156,96,240]},{"1154332":[190,65,102,153,249,6,13,2,59,4,230,24,156,96,248]},{"1154348":[247,8]},{"1154351":[255,247,8,54,8,54,8,236,16,152,96,240]},{"1154364":[182,73,126,1,5,2,13,2,27,4,118,8,76,48,120]},{"1154381":[255,247,8,54,8,52,8,44,16,104,16,88,32,112]},{"1154396":[46,16,35,28,44,19,47,16,40,16,40,16,40,16,56]},{"1154412":[122,132,74,132,202,4,26,4,22,8,116,8,76,48,120]},{"1154428":[2,1,2,1,2,1,2,1,2,1,254,1]},{"1154441":[255,255]},{"1154444":[221,34,93,34,93,34,125,2,13,2,59,4,38,24,60]},{"1154466":[28]},{"1154468":[20,8,20,8,247,8]},{"1154475":[255]},{"1154484":[255]},{"1154486":[129,126,255]},{"1154500":[255]},{"1154503":[255,254,1,126,1]},{"1154514":[28]},{"1154516":[20,8,247,8]},{"1154521":[255,254,1]},{"1154532":[7]},{"1154534":[5,2,5,2,5,2]},{"1154544":[15]},{"1154546":[10,5,234,5,63,192,208,32,243]},{"1154560":[15]},{"1154562":[10,5,250,5,1,254,253,2,29,2]},{"1154576":[15]},{"1154578":[10,5,122,5,95,32,95,32,223,32]},{"1154596":[126]},{"1154598":[90,36,91,36,93,34]},{"1154612":[192]},{"1154614":[67,128,78,129,121,134]},{"1154628":[255]},{"1154631":[255,254,1,2,1]},{"1154646":[56]},{"1154648":[108,16,68,56]},{"1154658":[28]},{"1154660":[20,8,247,8]},{"1154665":[255,247,8]},{"1154672":[15]},{"1154674":[10,5,10,5,207]},{"1154680":[102,129,166,65]},{"1154688":[15]},{"1154690":[58,5,42,21,111,16,64,63,222,33]},{"1154704":[15]},{"1154706":[10,5,10,5,251,4,134,120,246,8,247,8,54,8,54,8,54,8,108,16,236,16,152,96,240]},{"1154740":[255]},{"1154743":[255,255]},{"1154748":[126,1,77,50,117,10,123,4,245,10,206,49,63,192,240]},{"1154764":[61,2,59,4,243,12,197,58,54,201,247,8,20,8,28]},{"1154780":[5,2,13,2,11,4,26,4,54,8,236,16,152,96,240]},{"1154796":[50,193,214,33,53,2,13,2,59,4,230,24,28,224,248]},{"1154812":[27,4,27,4,55,8,51,12,109,18,222,33,50,193,227]},{"1154829":[255,222,33,221,34,219,36,223,32,223,32,96,31,63]},{"1154844":[213,34,181,66,165,66,166,65,162,65,98,129,66,129,195]},{"1154860":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1154876":[2,1,6,1,5,2,13,2,59,4,230,24,156,96,240]},{"1154892":[214,40,186,68,43,196,109,130,197,2,2,1,2,1,3]},{"1154908":[247,8,181,74,182,73,182,73,118,137,247,8,20,8,28]},{"1154924":[182,65,214,33,125,2,29,2,59,4,230,24,156,96,248]},{"1154940":[190,65,102,153,249,6,61,2,59,4,230,24,156,96,240]},{"1154956":[247,8]},{"1154959":[255,247,8,52,8,52,8,236,16,152,96,240]},{"1154982":[255]},{"1154985":[255,254,1]},{"1154996":[248]},{"1154998":[30,224,227,28,124,3]},{"1155012":[28]},{"1155014":[20,8,52,8,44,16]},{"1155028":[7]},{"1155030":[5,2,5,2,125,2]},{"1155044":[255]},{"1155046":[129,126,239,16,110,16]},{"1155056":[15]},{"1155058":[10,5,250,5,111,144,110,145,182,73]},{"1155072":[15]},{"1155074":[10,5,250,5,129,126,255]},{"1155082":[255]},{"1155088":[15]},{"1155090":[58,5,42,21,47,16,44,16,44,16]},{"1155106":[255]},{"1155108":[129,126,255]},{"1155112":[255]},{"1155115":[255]},{"1155122":[227]},{"1155124":[162,65,162,65,162,65,162,65]},{"1155140":[124]},{"1155142":[84,40,84,40,84,40]},{"1155156":[224]},{"1155158":[160,64,160,64,160,64]},{"1155174":[255]},{"1155177":[255,126,129]},{"1155184":[15]},{"1155186":[10,5,122,5,95,32,91,36,93,34]},{"1155200":[15]},{"1155202":[10,5,202,5,79,128,78,129,121,134]},{"1155216":[15]},{"1155218":[10,5,10,5,255]},{"1155225":[255,254,1,6,1,5,2,125,2,75,52,118,8,27,4,13,2,7]},{"1155244":[255]},{"1155246":[143,112,241,14,255]},{"1155252":[31,224,227,28,60,3,7]},{"1155260":[104,16,88,32,215,32,181,66,189,66]},{"1155271":[255,254,1,3]},{"1155276":[77,50,115,12,25,6,26,5,55,8,236,16,152,96,240]},{"1155292":[239,16]},{"1155295":[255,239,16,108,16,108,16,111,16,48,15,31]},{"1155308":[182,73,254,1,13,2,13,2,59,4,118,8,76,48,120]},{"1155325":[255,247,8,20,8,52,8,44,16,104,16,88,32,112]},{"1155340":[46,16,35,28,44,19,47,16,40,16,40,16,40,16,56]},{"1155356":[254,1,6,1,5,2,29,2,115,12,78,48,124]},{"1155372":[162,65,162,65,166,65,229,2,13,2,59,4,38,24,28]},{"1155388":[84,40,87,40,86,41,214,41,181,74,181,74,115,140,222]},{"1155404":[163,64,162,65,166,65,165,66,189,66,179,76,142,112,252]},{"1155420":[66,129,66,129,66,129,66,129,66,129,126,129]},{"1155433":[255,255]},{"1155436":[213,34,181,66,165,66,166,65,162,65,98,129,66,129,195]},{"1155452":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1155468":[2,1,6,1,5,2,13,2,59,4,230,24,156,96,240]},{"1155488":[15]},{"1155490":[10,5,10,5,63]},{"1155496":[108,16,68,56]},{"1155504":[15]},{"1155506":[10,5,26,5,247,8]},{"1155513":[255,247,8]},{"1155520":[15]},{"1155522":[8,7,122,5,92,35,91,36,93,34]},{"1155536":[15]},{"1155538":[8,7,202,5,72,135,79,128,121,134]},{"1155552":[15]},{"1155554":[8,7,250,5]},{"1155559":[255,254,1,6,1]},{"1155568":[15]},{"1155570":[8,7,26,5,56,7,111,16,68,56]},{"1155584":[15]},{"1155586":[8,7,26,5,244,11]},{"1155593":[255,247,8]},{"1155606":[112]},{"1155608":[80,32,94,32]},{"1155624":[252]},{"1155626":[132,120]},{"1155640":[252]},{"1155642":[4,248]},{"1155656":[254]},{"1155658":[90,164]},{"1155672":[254]},{"1155674":[2,252]},{"1155686":[14]},{"1155688":[10,4,26,4]},{"1155702":[56]},{"1155704":[40,16,238,16]},{"1155720":[254]},{"1155722":[2,252]},{"1155734":[28]},{"1155736":[246,8,2,252,214,40,186,68,43,196,109,130,197,2,6,1,2,1,3]},{"1155756":[247,8,181,74,182,73,182,73,118,137,215,8,21,8,28]},{"1155772":[221,34,189,66,189,66,190,65,166,65,102,129,102,129,195]},{"1155788":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1155804":[6,1,6,1,5,2,13,2,59,4,230,24,156,96,248]},{"1155820":[214,40,186,68,43,196,109,130,197,2,6,1,2,1,3]},{"1155836":[247,8,181,74,182,73,182,73,118,137,215,8,20,8,28]},{"1155852":[194,60,26,228,214,40,92,32,88,32,80,32,112]},{"1155868":[244,8,20,8,20,8,20,8,247,8,1,254,255]},{"1155884":[244,8,244,8,4,248,244,8,244,8,4,248,252]},{"1155900":[90,164,90,164,246,8,244,8,236,16,152,96,240]},{"1155916":[250,4,250,4,218,36,214,40,220,32,56,192,224]},{"1155932":[118,8,204,48,40,208,232,16,40,16,40,16,56]},{"1155948":[2,252,122,132,122,132,250,4,118,8,76,48,120]},{"1155964":[238,16,108,16,108,16,108,16,238,16,2,252,254]},{"1155980":[246,8,52,8,100,24,212,40,180,72,116,136,220]},{"1156002":[126]},{"1156004":[195,60,153,102,153,102,153,102]},{"1156018":[60]},{"1156020":[100,24,68,56,68,56,100,24]},{"1156034":[124]},{"1156036":[194,60,153,102,153,102,153,102]},{"1156050":[126]},{"1156052":[195,60,153,102,153,102,153,102]},{"1156066":[30]},{"1156068":[18,12,34,28,98,28,66,60]},{"1156082":[255]},{"1156084":[129,126,159,96,152,96,158,96]},{"1156098":[126]},{"1156100":[195,60,153,102,153,102,159,96]},{"1156114":[255]},{"1156116":[129,126,153,102,153,102,249,6]},{"1156130":[126]},{"1156132":[195,60,153,102,153,102,153,102]},{"1156146":[126]},{"1156148":[195,60,153,102,153,102,153,102]},{"1156162":[60]},{"1156164":[66,60,153,102,153,102,153,102]},{"1156178":[252]},{"1156180":[130,124,153,102,153,102,153,102]},{"1156194":[126]},{"1156196":[195,60,153,102,153,102,153,102]},{"1156210":[254]},{"1156212":[131,124,153,102,153,102,153,102]},{"1156226":[255]},{"1156228":[129,126,159,96,144,96,144,96]},{"1156242":[255]},{"1156244":[129,126,159,96,144,96,144,96,153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156268":[36,24,36,24,36,24,36,24,36,24,102,24,66,60,126]},{"1156284":[233,6,25,6,51,12,102,24,204,48,159,96,129,126,255]},{"1156300":[249,6,35,28,249,6,153,102,153,102,153,102,195,60,126]},{"1156316":[210,44,146,108,146,108,147,108,129,126,115,12,18,12,30]},{"1156332":[131,124,153,102,249,6,249,6,153,102,153,102,195,60,126]},{"1156348":[131,124,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156364":[51,12,38,24,36,24,36,24,36,24,36,24,36,24,60]},{"1156380":[153,102,195,60,153,102,153,102,153,102,153,102,195,60,126]},{"1156396":[153,102,153,102,193,62,249,6,153,102,153,102,195,60,126]},{"1156412":[153,102,129,126,153,102,153,102,153,102,153,102,153,102,255]},{"1156428":[153,102,131,124,153,102,153,102,153,102,153,102,130,124,252]},{"1156444":[159,96,156,96,159,96,153,102,153,102,153,102,195,60,126]},{"1156460":[153,102,153,102,153,102,153,102,153,102,153,102,131,124,254]},{"1156476":[158,96,130,124,158,96,144,96,144,96,159,96,129,126,255]},{"1156492":[158,96,130,124,158,96,144,96,144,96,144,96,144,96,240]},{"1156514":[126]},{"1156516":[195,60,153,102,153,102,153,102]},{"1156530":[255]},{"1156532":[153,102,153,102,153,102,153,102]},{"1156546":[126]},{"1156548":[66,60,102,24,36,24,36,24]},{"1156562":[15]},{"1156564":[9,6,9,6,9,6,9,6]},{"1156578":[255]},{"1156580":[153,102,153,102,147,108,146,108]},{"1156594":[240]},{"1156596":[144,96,144,96,144,96,144,96]},{"1156610":[247]},{"1156612":[157,98,137,118,129,126,149,106]},{"1156626":[255]},{"1156628":[153,102,153,102,153,102,137,118]},{"1156642":[126]},{"1156644":[195,60,153,102,153,102,153,102]},{"1156658":[254]},{"1156660":[131,124,153,102,153,102,153,102]},{"1156674":[126]},{"1156676":[195,60,153,102,153,102,153,102]},{"1156690":[254]},{"1156692":[131,124,153,102,153,102,153,102]},{"1156706":[126]},{"1156708":[195,60,153,102,153,102,159,96]},{"1156722":[255]},{"1156724":[129,126,231,24,36,24,36,24]},{"1156738":[255]},{"1156740":[153,102,153,102,153,102,153,102]},{"1156754":[247]},{"1156756":[149,98,149,98,149,98,149,98,159,96,159,96,145,110,153,102,153,102,153,102,193,62,127]},{"1156780":[153,102,129,126,153,102,153,102,153,102,153,102,153,102,255]},{"1156796":[36,24,36,24,36,24,36,24,36,24,102,24,66,60,126]},{"1156812":[9,6,9,6,9,6,249,6,153,102,153,102,195,60,124]},{"1156828":[134,120,134,120,134,120,146,108,147,108,153,102,153,102,255]},{"1156844":[144,96,144,96,144,96,144,96,144,96,159,96,129,126,255]},{"1156860":[149,106,149,106,157,98,157,98,157,98,157,98,157,98,255]},{"1156876":[137,118,129,126,145,110,145,110,153,102,153,102,153,102,255]},{"1156892":[153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156908":[153,102,131,124,158,96,144,96,144,96,144,96,144,96,240]},{"1156924":[153,102,153,102,153,102,157,98,155,100,157,98,194,61,127]},{"1156940":[153,102,131,124,153,102,153,102,153,102,153,102,153,102,255]},{"1156956":[158,96,195,60,121,6,249,6,153,102,153,102,195,60,126]},{"1156972":[36,24,36,24,36,24,36,24,36,24,36,24,36,24,60]},{"1156988":[153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1157004":[157,98,203,52,74,52,74,52,74,52,36,24,36,24,60]},{"1157026":[255]},{"1157028":[149,106,149,106,149,106,149,106]},{"1157042":[247]},{"1157044":[149,98,157,98,203,52,74,52]},{"1157058":[247]},{"1157060":[149,98,149,98,157,98,203,52]},{"1157074":[255]},{"1157076":[129,126,249,6,19,12,18,12]},{"1157088":[255]},{"1157091":[255,126,129,64,191,95,160,80,160]},{"1157112":[15]},{"1157114":[8,7]},{"1157120":[255]},{"1157122":[129,126,60,195,60,195,60,195,249,6]},{"1157136":[30]},{"1157138":[18,12,18,12,18,12,18,12,18,12]},{"1157184":[3]},{"1157186":[6,1,12,3,24,7,49,14,97,30]},{"1157200":[192]},{"1157202":[96,128,48,192,24,224,140,112,134,120]},{"1157258":[248]},{"1157276":[149,106,149,106,149,106,149,106,129,126,195,60,106,20,126]},{"1157292":[102,24,36,24,38,24,82,44,211,44,185,70,185,70,239]},{"1157308":[74,52,102,24,36,24,36,24,36,24,36,24,36,24,60]},{"1157324":[50,12,38,24,36,24,100,24,76,48,207,48,129,126,255]},{"1157340":[80,160,80,160,16,224,240]},{"1157356":[10,5,10,5,10,5,250,5,2,253,126,129]},{"1157369":[255,255]},{"1157372":[51,12,38,24,36,24,36,24,60]},{"1157382":[36,24,36,24,60]},{"1157388":[18,12,18,12,18,12,30]},{"1157396":[30]},{"1157398":[18,12,18,12,30]},{"1157410":[192]},{"1157412":[96,128,32,192,160,64,224]},{"1157422":[255]},{"1157425":[255,255]},{"1157436":[192,63,192,63,97,30,49,14,24,7,12,3,6,1,3]},{"1157452":[3,252,3,252,134,120,140,112,24,224,48,192,96,128,192]},{"1157488":[240]},{"1157490":[152,96,104,144,104,144,152,96,240]},{"1157500":[143,112,102,153,241,14,31]},{"1157516":[60,60,102,126,219,255,153,255,153,255,129,255,153,255,255,255]},{"1157568":[7]},{"1157570":[25,6,34,29,68,59,72,55,185,70]},{"1157584":[192]},{"1157586":[32,192,16,224,240]},{"1157592":[248]},{"1157594":[248]},{"1157664":[120]},{"1157666":[72,48,72,48,104,16,88,32,112]},{"1157686":[120,120,72,120,72,120]},{"1157744":[247]},{"1157746":[24,231,151,96,151,96,168,87,183,72]},{"1157760":[60]},{"1157762":[102,24,90,36,90,36,90,36,231,24]},{"1157776":[3]},{"1157778":[118,1,220,35,137,118,35,220,118,136,254,254,131,255,153,255,131,255,153,255,153,255,131,255,254,254,126,126,195,255,153,255,159,255,159,255,153,255,195,255,126,126,171,84,171,84,167,88,54,201,18,237,248,7,30,1,7]},{"1157836":[120,128,80,160,120,128,8,240,120,128,32,192,192]},{"1157850":[128]},{"1157852":[252,252,134,254,155,255,153,255,153,255,155,255,134,254,252,252,255,255,129,255,159,255,130,254,158,254,159,255,129,255,255,255,255,255,129,255,159,255,130,254,158,254,144,240,144,240,240,240,126,126,195,255,153,255,159,255,145,255,153,255,193,255,127,127]},{"1157932":[104,120,88,120,112,112]},{"1157954":[255,255,129,255,255,255]},{"1157972":[120,120,72,120,72,120,120,120]},{"1157984":[30,30,18,30,18,30,30,30]},{"1157996":[194,60,109,18,54,9,40,23,43,20,42,20,66,60,60]},{"1158012":[126,129,129,126,126,129,229,24,36,24,36,24,36,24,60]},{"1158028":[207]},{"1158030":[118,1,220,35,137,118,35,220,118,136,220]},{"1158068":[126]},{"1158070":[90,36,219,36,129,126]},{"1158082":[15]},{"1158084":[9,6,25,6,17,14,51,12]},{"1158102":[60]},{"1158104":[36,24,36,24]},{"1158112":[127]},{"1158114":[73,54,73,54,109,18,91,36,118]},{"1158136":[60]},{"1158138":[102,24]},{"1158146":[3]},{"1158148":[2,1,6,1,4,3,12,3]},{"1158162":[128]},{"1158164":[128]},{"1158166":[192]},{"1158168":[64,128,96,128]},{"1158176":[56]},{"1158178":[68,56,187,124,124,255,127,255,127,255]},{"1158192":[128]},{"1158194":[64,128,160,192,208,224,208,224,208,224]},{"1158208":[56]},{"1158210":[68,56,187,124,124,255,127,255,127,255]},{"1158224":[128]},{"1158226":[64,128,160,192,208,224,208,224,208,224]},{"1158308":[60]},{"1158310":[36,24,36,24,60]},{"1158316":[219,36,90,36,219,36,129,126,219,36,90,36,126]},{"1158332":[34,28,102,24,68,56,204,48,136,112,152,96,144,96,240]},{"1158348":[60]},{"1158352":[60]},{"1158354":[36,24,36,24,60]},{"1158380":[66,60,66,60,102,24,60]},{"1158396":[8,7,24,7,16,15,48,15,32,31,96,31,64,63,127]},{"1158412":[32,192,48,192,16,224,24,224,8,240,12,240,4,248,252]},{"1158428":[126,255,190,127,94,63,46,31,22,15,10,7,4,3,3]},{"1158444":[16,224,160,64,64,128,128]},{"1158460":[127,255,191,127,95,63,47,31,23,15,11,7,4,3,3]},{"1158476":[208,224,160,192,64,128,128]},{"1158492":[255,255,153,255,153,255,129,255,153,255,153,255,153,255,255,255,126,126,66,126,102,126,36,60,36,60,102,126,66,126,126,126,63,63,33,63,51,63,18,30,242,254,146,254,198,254,124,124,255,255,153,255,147,255,134,254,134,254,147,255,153,255,255,255]},{"1158812":[240,240,144,240,144,240,144,240,144,240,159,255,129,255,255,255,247,247,157,255,137,255,129,255,149,255,157,255,149,247,247,247,247,247,157,255,141,255,133,255,145,255,153,255,157,255,247,247,126,126,195,255,153,255,153,255,153,255,153,255,195,255,126,126,254,254,131,255,153,255,153,255,131,255,158,254,144,240,240,240,126,126,195,255,153,255,153,255,129,255,155,255,193,255,127,127,254,254,131,255,153,255,153,255,131,255,147,255,153,255,255,255,126,126,194,254,158,254,195,255,249,255,153,255,195,255,126,126,255,255,129,255,231,255,36,60,36,60,36,60,36,60,60,60,255,255,153,255,153,255,153,255,153,255,153,255,195,255,126,126,255,255,153,255,153,255,153,255,219,255,66,126,102,126,60,60,255,255,149,255,149,255,149,255,149,255,129,255,235,255,60,60,247,247,157,255,139,255,198,254,99,127,209,255,185,255,239,239,255,255,153,255,153,255,195,255,102,126,36,60,36,60,60,60,255,255,129,255,241,255,99,127,198,254,143,255,129,255,255,255]},{"1159068":[169]},{"1159070":[35,133,125,169,140,140,133,124,183,124,133,124,160]},{"1159085":[107]},{"1159088":[9]},{"1159090":[99]},{"1159092":[231,3,15,39,255,255,1]},{"1159100":[3]},{"1159102":[7]},{"1159104":[15]},{"1159106":[31]},{"1159108":[63]},{"1159110":[127]},{"1159112":[255]},{"1159114":[255,1,255,3,255,7,255,15,255,31,255,63,255,127,72,72,169]},{"1159133":[143,3,80,127,143,5,80,127,143,6,80,127,104,201,16,39,144,21,72,226,32,175,3,80,127,26,143,3,80,127,194,32,104,56,233,16,39,128,230,201,232,3,144,21,72,226,32,175,4,80,127,26,143,4,80,127,194,32,104,56,233,232,3,128,230,201,100]},{"1159201":[144,21,72,226,32,175,5,80,127,26,143,5,80,127,194,32,104,56,233,100]},{"1159222":[128,230,201,10]},{"1159227":[144,21,72,226,32,175,6,80,127,26,143,6,80,127,194,32,104,56,233,10]},{"1159248":[128,230,201,1]},{"1159253":[144,21,72,226,32,175,7,80,127,26,143,7,80,127,194,32,104,56,233,1]},{"1159274":[128,230,104,107,152,41,15]},{"1159282":[72,152,74,74,74,74,168,24,165,181,208,5,104,105,64,61,96,104,105,80,61,96,160]},{"1159307":[185,217,181,100,181,201,255,255,240,27,235,41,255,1,197,202,240,17,26,230,181,197,202,240,10,200,200,200,200,200,200,200,200,128,221,56,96,24,96,139,75,171,32,136,176,176,3,130,233]},{"1159357":[185,217,181,74,41,3]},{"1159364":[201]},{"1159367":[240,3,130,220]},{"1159372":[185,217,181,74,74,74,41,31]},{"1159381":[24,101,200,235,157,2,16,169,7]},{"1159391":[235,157,4,16,218,165,181,208,5,169,64,61,128,3,169,80,61,133,179,185,222,181,133,183,185,223,181,133,184,167,183,133,186,185,219,181,41,15]},{"1159430":[240,9,170,165,186,74,202,208,252,133,186,185,219,181,74,74,74,41,30]},{"1159450":[170,191,184,175,35,37,186,133,186,185,220,181,74,74,74,74,74,41,7]},{"1159470":[240,12,10,170,191,174,175,35,197,186,176,2,133,186,165,186,34,216,175,35,250,100,120,175,4,80,127,41,255]},{"1159500":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,5,80,127,41,255]},{"1159526":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,6,80,127,41,255]},{"1159552":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159578":[24,101,179,157,6,16,232,232,232,232,232,232,171,107,185,217,181,74,74,74,41,31]},{"1159601":[24,101,200,235,157,2,16,169,21]},{"1159611":[235,157,4,16,218,185,222,181,133,183,185,223,181,133,184,167,183,133,186,230,183,230,183,167,183,133,188,201,198]},{"1159641":[176,88,100,114,165,186,56,233,192,75,133,179,165,188,233,3]},{"1159658":[144,10,133,188,165,179,133,186,230,114,128,231,100,116,165,186,56,233,16,14,133,179,165,188,233]},{"1159685":[144,10,133,188,165,179,133,186,230,116,128,231,100,118,165,186,56,233,60]},{"1159705":[133,179,165,188,233]},{"1159712":[144,10,133,188,165,179,133,186,230,118,128,231,165,114,201,100]},{"1159729":[144,14,169,99]},{"1159734":[133,114,169,59]},{"1159739":[133,116,133,118,133,186,165,181,208,5,169,64,61,128,3,169,80,61,133,179,250,165,114,34,216,175,35,175,6,80,127,41,255]},{"1159773":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159788":[24,101,179,157,6,16,232,232,169,131]},{"1159799":[24,101,179,157,6,16,232,232,165,116,34,216,175,35,175,6,80,127,41,255]},{"1159820":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159835":[24,101,179,157,6,16,232,232,169,131]},{"1159846":[24,101,179,157,6,16,232,232,165,118,34,216,175,35,175,6,80,127,41,255]},{"1159867":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159882":[24,101,179,157,6,16,232,232,169,128]},{"1159893":[24,101,179,157,6,16,232,232,165,186,34,216,175,35,175,6,80,127,41,255]},{"1159914":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159929":[24,101,179,157,6,16,232,232,232,232,232,232,130,158,254,165,200,24,105]},{"1159950":[235,157,2,16,169,5]},{"1159957":[235,169]},{"1159960":[5,157,4,16,100,181,165,202,168,41,1]},{"1159972":[240,3,136,230,181,32,110,176,72,32,110,176,72,32,110,176,157,6,16,232,232,104,157,6,16,232,232,104,157,6,16,232,232,232,232,232,232,96,169,2,141,1,33,169,128,141,21,33,169,35,133,2,194,48,169]},{"1160028":[112,141,22,33,169,156,143,133]},{"1160037":[162,255,15,167]},{"1160042":[141,24,33,230]},{"1160047":[230]},{"1160049":[202,16,244,226,48,34,123,179,35,107,169,128,141,21,33,169,49,133,2,194,48,169]},{"1160072":[128,141,22,33,169]},{"1160078":[208,133]},{"1160081":[162,255,7,167]},{"1160086":[141,24,33,230]},{"1160091":[230]},{"1160093":[202,16,244,226,48,107,168,139,75,171,185,217,179,171,107,156,42,1,34,151,148,164,194,16,34,179,146,164,32,202,179,92,3,236]},{"1160128":[194,16,32,202,179,194,32,162,14,107,34,176,148,164,34,28,147,164,226,48,169,1,133,20,96,159,57,176,57,177,57,180,57,181,57,182,57,183,57,220,57,221,57,222,57,223,57,240,57,241,57,242,57,243,57,244,57,245,57,246,57,247,57,248,57,249,57,250,57,251,57,252,57,253,57,254,57,159,45,176,45,177,45,180,45,181,45,182,45,183,45,220,45,221,45,222,45,223,45,240,45,241,45,242,45,243,45,244,45,245,45,246,45,247,45,248,45,249,45,250,45,251,45,252,45,253,45,254,45,169,45,185,45,186,45,187,45,159,41,176,41,177,41,180,41,181,41,182,41,183,41,220,41,221,41,222,41,223,41,240,41,241,41,242,41,243,41,244,41,245,41,246,41,247,41,248,41,249,41,250,41,251,41,252,41,253,41,254,41,188,41,64,61,65,61,66,61,67,61,68,61,69,61,70,61,71,61,72,61,73,61,74,61,75,61,76,61,77,61,78,61,79,61,96,61,97,61,98,61,99,61,100,61,101,61,102,61,103,61,104,61,105,61,106,61,107,61,108,61,109,61,110,61,111,61,128,61,129,61,130,61,131,61,168,61,135,61,80,61,81,61,82,61,83,61,84,61,85,61,86,61,87,61,88,61,89,61,90,61,91,61,92,61,93,61,94,61,95,61,112,61,113,61,114,61,115,61,116,61,117,61,118,61,119,61,120,61,121,61,122,61,123,61,124,61,125,61,126,61,127,61,144,61,145,61,146,61,147,61,184,61,151,61,136,61,192,61,193,61,194,61,195,61,136,61,134,61,137,61,196,61,137,61,197,61,198,61,199,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,61,209,61,210,61,211,61,152,61,150,61,153,189,212,61,153,61,213,61,214,61,215,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,54]},{"1160668":[128]},{"1160670":[88,244,126,155,57]},{"1160676":[128]},{"1160678":[92,244,126,155,60]},{"1160684":[128]},{"1160686":[96,244,126,155,63]},{"1160692":[128]},{"1160694":[100,244,126,185,71,68,64]},{"1160702":[82,244,126,185,74,68,64]},{"1160710":[37,244,126,185,77,64,64]},{"1160718":[37,244,126,185,80,68,64]},{"1160726":[38,244,126,185,83,64,64]},{"1160734":[38,244,126,185,90,80,64]},{"1160742":[42,244,126,209,93,128,96]},{"1160750":[32,244,126,209,96,128,64]},{"1160758":[45,244,126,209,99,128,64]},{"1160766":[73,244,126,209,102,128,96]},{"1160774":[83,244,126,155,105,8,128]},{"1160782":[68,244,126,155,108]},{"1160788":[128]},{"1160790":[56,80,127,177,124,128,96]},{"1160798":[35,244,126,155,127]},{"1160804":[128]},{"1160806":[62,244,126,255,255]},{"1179648":[165,160,201,13,208,3,169,7,107,169,11,107,157,160,11,165,160,201,13,208,29,175,163,128,48,240,20,175,74,128,48,240,8,169]},{"1179683":[143,202,243,126,128,6,169,64,143,202,243,126,169,1,107,175,163,128,48,240,20,175,74,128,48,240,8,169,64,143,202,243,126,128,6,169]},{"1179720":[143,202,243,126,169]},{"1179726":[107,165,160,201,13,208,4,169,6,128,2,169,1,107,218,165,160,201,13,208,6,169,1,92,123,213,30,169]},{"1179755":[92,123,213,30,254,48,14,165,160,201,13,208,3,169,1,107,169]},{"1179773":[107,175,66,128,48,240,14,173,3,4,41,128,240,7,173,18,1,13,228,2,107,173,18,1,13,228,2,13,252,15,107,194,32,165,160,201,23,1,226,32,208,8,175,104,129,48,141,115,3,107,185,85,208,141,115,3,107,165,27,240,44,194,32,165,160,201,95]},{"1179841":[240,24,201,172]},{"1179846":[240,19,201,179]},{"1179851":[240,14,201,213]},{"1179856":[240,9,201,23,1,240,4,226,32,128,11,226,32,218,187,191,107,129,48,133]},{"1179877":[250,175,110,243,126,107,165,27,240,39,194,32,165,160,201,95]},{"1179894":[240,19,201,179]},{"1179899":[240,14,201,213]},{"1179904":[240,9,201,23,1,240,4,226,32,128,11,226,32,218,187,191,110,129,48,133,76,250,175,110,243,126,107,165,27,240,36,194,32,165,160,201,95]},{"1179942":[240,19,201,179]},{"1179947":[240,14,201,213]},{"1179952":[240,9,201,23,1,240,4,226,32,128,8,226,32,169,1,141,123,3,107,175,79,128,48,141,123,3,107,224,3,240,29,224,4,240,25,224,5,240,21,224,57,240,27,224,59,240,23,224,60,240,19,224,61,240,15,191,241,184,13,107,175,128,129,48,41,1,208,243,128,8,175,128,129,48,41,2,208,233,169]},{"1180032":[107,133,5,218,162]},{"1180038":[189,74,12,232,224,10,240,8,197,5,208,244,169,1,128,2,169]},{"1180056":[250,96,189,32,14,201,214,208,16,34,182,129,164,176,10,189,128,13,201,17,144,3,169]},{"1180080":[107,165,68,201,128,107,175,62,128,48,240,98,201,1,240,92,201,2,208,40,175,116,243,126,41,7,201,7,208,78,175,122,243,126,41,127,201,127,208,68,175,197,243,126,201,3,144,60,175,219,242,126,41,32,201,32,208,50,128,50,201,4,208,8,34,109,130,164,144,38,128,38,201,3,208,18,34,109,130,164,144,26,175,219,242,126,41,32,201,32,208,16,128,16,201,5,208,10,175,24,244,126,201,100,144,2,128,2,24,107,56,107,240,4,34,89,207,8,175,94,128,48,201]},{"1180204":[208,4,92,195,206,8,175,94,128,48,201,1,208,4,92,147,206,8,175,94,128,48,58,58,170,92,19,206,8,175,94,128,48,201]},{"1180239":[208,2,170,107,138,207,94,128,48,144,7,56,239,94,128,48,128,243,26,207,94,128,48,208,2,169,8,58,170,107,218,90,175,122,243,126,34,181,152,160,122,250,207,95,128,48,107,218,90,175,122,243,126,34,181,152,160,122,250,207,94,128,48,107,175,50,128,48,240,1,107,169,1,143,197,243,126,107,175,50,128,48,240,49,175,197,243,126,201,2,176,41,169,2,143,197,243,126,175,198,243,126,9,20,143,198,243,126,175,200,243,126,201,5,240,2,169,1,143,200,243,126,175,155,242,126,9,32,143,155,242,126,107,107,165,246,41,48,240,103,235,175,75,128,48,240,96,173,2,2,240,91,175,19,130,48,240,10,175,17,130,48,41,2,208,2,128,75,218,235,201,48,208,5,174,2,2,128,26,137,16,240,11,32,71,131,165,242,137,32,208,13,128,36,32,129,131,165,242,137,16,208,2,128,25,224,2,240,14,224,1,240,10,224,5,240,6,224,13,240,2,128,7,142,2,2,34,160,183,160,169,32,141,47,1,142,2,2,34,127,219,13,250,165,246,41,64,107,173,2,2,170,224,15,208,4,162]},{"1180497":[128,9,224,16,208,28,175,79,243,126,170,224,4,240,15,232,191,91,243,126,240,245,138,143,79,243,126,162,16,96,162,17,128,7,224,20,208,2,162]},{"1180537":[232,34,180,132,164,240,203,96,173,2,2,170,224,17,208,4,162,5,128,9,224,16,208,28,175,79,243,126,170,224,1,240,15,202,191,91,243,126,240,245,138,143,79,243,126,162,16,96,162,15,128,7,224,1,208,2,162,21,202,34,180,132,164,240,203,96,90,218,187,191]},{"1180608":[149,48,250,157,8,16,122,107,90,218,187,191]},{"1180621":[149,48,41,255]},{"1180626":[250,122,107,72,218,90,8,226,48,165,27,208,24,160,10,169,11,34,95,246,29,48,14,34,100,174,9,169,36,153,160,13,169,1,153,176,13,40,122,250,104,107,138,69,26,41,15,5,27,208,119,169,11,160,10,34,95,246,29,48,109,218,187,169,30,34,138,187,13,250,169,1,153,176,13,218,34,113,186,13,133,15,41,2,240,36,165,15,101,226,153,16,13,165,227,105]},{"1180723":[153,48,13,165,15,41,1,170,189,60,159,101,232,153]},{"1180738":[13,165,233,105]},{"1180743":[153,32,13,128,34,165,15,101,232,153]},{"1180754":[13,165,233,105]},{"1180759":[153,32,13,165,15,41,1,170,189,60,159,101,226,153,16,13,165,227,105]},{"1180779":[153,48,13,187,169,32,34,24,234,6,250,169,48,34,124,187,13,107,165,27,240,37,166,160,224,255]},{"1180806":[208,30,166,162,224,239]},{"1180813":[208,23,174,24,1,224]},{"1180820":[24,240,21,224]},{"1180825":[26,240,16,224]},{"1180830":[28,240,5,224]},{"1180835":[30,240]},{"1180838":[169,1,141,11,66,107,162,192]},{"1180847":[142,5,67,128,242,175,201,80,127,240,7,224,4,208,3,169,1,107,191,63,243,126,107,175,201,80,127,208,4,175,67,243,126,107,175,201,80,127,41,255]},{"1180888":[208,4,175,67,243,126,107,72,175,201,80,127,240,4,104,169,1,107,104,143,67,243,126,107,175,201,80,127,240,5,169,1,162]},{"1180922":[107,175,64,243,126,107,175,200,80,127,208,8,175,117,129,48,208,19,128,3,169,1,107,175,119,243,126,240,82,58,143,119,243,126,26,128,74,194,32,165,160,201,17,1,226,32,208,13,165,27,240,9,173,154,11,240,12,169]},{"1180981":[128,50,175,119,243,126,208,2,128,42,218,194,32,175,96,243,126,240,30,72,175,64,243,126,58,41,2]},{"1181009":[170,104,56,255,118,129,48,48,9,143,96,243,126,169,1]},{"1181025":[128,3,169]},{"1181030":[226,32,250,201]},{"1181035":[107,173,153,11,240,48,206,153,11,175,117,129,48,208,11,175,119,243,126,26,26,143,119,243,126,107,218,194,32,175,64,243,126,58,41,2]},{"1181072":[170,175,96,243,126,24,127,118,129,48,143,96,243,126,226,32,250,107,175,203,80,127,208,3,130,154]},{"1181099":[58,240,125,58,240,93,58,240,45,194,32,173,24,66,137,64,8,240,3,73,64,8,137,128,1,240,3,73,128,1,137]},{"1181131":[66,240,3,73]},{"1181136":[66,137]},{"1181139":[132,240,3,73]},{"1181144":[132,133]},{"1181147":[226,32,92,222,131]},{"1181153":[194,32,173,24,66,137,64,128,240,3,73,64,128,137,128,64,240,3,73,128,64,137]},{"1181176":[12,240,3,73]},{"1181181":[12,137]},{"1181184":[3,240,3,73]},{"1181189":[3,133]},{"1181192":[226,32,92,222,131]},{"1181198":[194,32,173,24,66,137,64,128,240,3,73,64,128,137,128,64,240,3,73,128,64,133]},{"1181221":[226,32,92,222,131]},{"1181227":[173,24,66,133]},{"1181232":[173,25,66,137,12,240,2,73,12,137,3,240,2,73,3,133,1,92,222,131]},{"1181253":[173,24,66,133]},{"1181258":[173,25,66,133,1,92,222,131]},{"1181267":[72,175,206,80,127,201,1,208,8,104,47,121,243,126,9,4,107,201,2,208,8,104,47,121,243,126,41,251,107,104,47,121,243,126,107,34,127,134,164,34,236,134,164,107,169,14,143,1,40]},{"1181317":[169,4,143,1,40]},{"1181323":[169,13,143,1,40]},{"1181329":[169,14,143,1,40]},{"1181335":[169]},{"1181337":[143,1,40]},{"1181341":[169]},{"1181343":[143,1,40]},{"1181347":[169]},{"1181349":[143,1,40]},{"1181353":[169]},{"1181355":[143,1,40]},{"1181359":[169]},{"1181361":[143,1,40]},{"1181365":[169]},{"1181367":[143,1,40]},{"1181371":[169]},{"1181373":[143,1,40]},{"1181377":[169,1,143,1,40]},{"1181383":[169]},{"1181385":[143,1,40]},{"1181389":[169,1,143,1,40]},{"1181395":[169]},{"1181397":[143,1,40]},{"1181401":[169]},{"1181403":[143,1,40]},{"1181407":[169,10,143,1,40]},{"1181413":[169,13,143,1,40]},{"1181419":[107,72,218,162]},{"1181424":[175]},{"1181426":[40]},{"1181428":[41,15,201,15,240,10,224,14,144,3,24,128,4,232,128,236,56,250,104,107,72,218,8,226,48,162]},{"1181455":[175]},{"1181457":[40]},{"1181459":[41,15,201,15,240,12,224,14,144,4,24,130,250]},{"1181473":[232,128,235,56,175]},{"1181479":[40]},{"1181481":[72,175]},{"1181484":[40]},{"1181486":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133]},{"1181504":[175]},{"1181506":[40]},{"1181508":[72,175]},{"1181511":[40]},{"1181513":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,1,175]},{"1181533":[40]},{"1181535":[72,175]},{"1181538":[40]},{"1181540":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,2,175]},{"1181560":[40]},{"1181562":[72,175]},{"1181565":[40]},{"1181567":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,3,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,41,255]},{"1181652":[10,10,72,10,10,10,10,56,227,1,131,1,104,100,1,24,101]},{"1181670":[133]},{"1181672":[165,3,41,255]},{"1181677":[10,10,10,72,10,24,99,1,131,1,104,100,3,24,101,2,10,10,72,10,10,10,10,56,227,1,131,1,104,160,96,34,31,136,164,132,2,100,3,24,101]},{"1181719":[144,2,230,2,40,250,104,107,226,32,140,2,66,141,3,66,234,234,234,234,173,22,66,172,23,66,235,141,3,66,234,234,152,24,109,22,66,172,23,66,144,1,200,235,194,32,107,72,218,90,8,226,48,162]},{"1181774":[175]},{"1181776":[40]},{"1181778":[41,15,201,15,240,12,224,14,144,4,24,130,249]},{"1181792":[232,128,235,56,175]},{"1181798":[40]},{"1181800":[72,175]},{"1181803":[40]},{"1181805":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133]},{"1181823":[175]},{"1181825":[40]},{"1181827":[72,175]},{"1181830":[40]},{"1181832":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,1,175]},{"1181852":[40]},{"1181854":[72,175]},{"1181857":[40]},{"1181859":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,2,175]},{"1181879":[40]},{"1181881":[72,175]},{"1181884":[40]},{"1181886":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,3,175]},{"1181906":[40]},{"1181908":[133,4,175]},{"1181912":[40]},{"1181914":[72,175]},{"1181917":[40]},{"1181919":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,5,175]},{"1181939":[40]},{"1181941":[133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,41,255]},{"1182010":[10,72,10,10,24,99,1,131,1,104,10,72,10,10,24,99,1,131,1,104,24,105,232,3,100,6,24,101,5,133,5,40,122,250,104,107,189]},{"1182049":[153]},{"1182052":[189,2]},{"1182055":[153,2]},{"1182058":[189,4]},{"1182061":[153,64]},{"1182064":[189,6]},{"1182067":[153,66]},{"1182070":[96,189]},{"1182074":[41,255,227,9]},{"1182079":[16,153]},{"1182083":[189,2]},{"1182086":[41,255,227,9]},{"1182091":[16,153,2]},{"1182095":[189,4]},{"1182098":[41,255,227,9]},{"1182103":[16,153,64]},{"1182107":[189,6]},{"1182110":[41,255,227,9]},{"1182115":[16,153,66]},{"1182119":[96,41,255]},{"1182123":[240,3,76,94,137,76,119,137,41,255]},{"1182134":[208,6,162,148,144,76,119,137,58,58,208,6,162,148,144,76,94,137,58,208,6,162,156,144,76,94,137,58,208,6,162,164,144,76,94,137,58,208,6,162,172,144,76,94,137,58,208,6,162,180,144,76,94,137,58,208,6,162,188,144,76,94,137,162,196,144,76,94,137,165,26,41,1]},{"1182208":[240,2,128,14,32,33,138,238,16,7,169,97,1,141,2,16,128,9,156,16,7,169,255,255,141,2,16,169,4]},{"1182238":[133,2,107,218,90,139,226,32,169,164,72,171,194,32,175]},{"1182254":[5,112,9]},{"1182258":[28,141,142,17,24,105,16]},{"1182266":[141,206,17,175,2,5,112,9]},{"1182275":[28,141,144,17,24,105,16]},{"1182283":[141,208,17,175,4,5,112,9]},{"1182292":[28,141,146,17,24,105,16]},{"1182300":[141,210,17,175,6,5,112,9]},{"1182309":[28,141,148,17,24,105,16]},{"1182317":[141,212,17,175,8,5,112,9]},{"1182326":[28,141,78,18,24,105,16]},{"1182334":[141,142,18,175,10,5,112,9]},{"1182343":[28,141,80,18,24,105,16]},{"1182351":[141,144,18,175,12,5,112,9]},{"1182360":[28,141,82,18,24,105,16]},{"1182368":[141,146,18,175,14,5,112,9]},{"1182377":[28,141,84,18,24,105,16]},{"1182385":[141,148,18,32,204,144,175,142,3,112,41,64]},{"1182398":[240,31,175,64,3,112,41,255]},{"1182407":[240,11,162,20,143,160,220,16,32,94,137,128,40,162,36,143,160,220,16,32,94,137,128,29,175,64,3,112,41,255]},{"1182438":[240,11,162,12,143,160,220,16,32,94,137,128,9,162,12,143,160,220,16,32,119,137,175,140,3,112,41,192]},{"1182467":[201,192]},{"1182470":[208,11,162,60,143,160,224,16,32,94,137,128,49,175,140,3,112,41,64]},{"1182490":[240,11,162,52,143,160,224,16,32,94,137,128,29,175,140,3,112,41,128]},{"1182510":[240,11,162,44,143,160,224,16,32,94,137,128,9,162,44,143,160,224,16,32,119,137,162,68,143,160,228,16,175,66,3,112,32,168,137,175,140,3,112,41,16]},{"1182552":[240,11,162,28,144,160,236,16,32,94,137,128,9,162,28,144,160,236,16,32,119,137,175,140,3,112,41,8]},{"1182581":[240,11,162,20,144,160,232,16,32,94,137,128,9,162,20,144,160,232,16,32,119,137,175,140,3,112,41,3]},{"1182610":[240,11,162,156,143,160,228,17,32,94,137,128,9,162,156,143,160,228,17,32,119,137,175,140,3,112,41,4]},{"1182639":[240,11,162,148,143,160,92,18,32,94,137,128,9,162,148,143,160,92,18,32,119,137,162,84,143,160,92,17,175,69,3,112,32,168,137,162,92,143,160,96,17,175,70,3,112,32,168,137,162,100,143,160,100,17,175,71,3,112,32,168,137,162,108,143,160,104,17,175,72,3,112,32,168,137,162,116,143,160,108,17,175,73,3,112,32,168,137,162,124,143,160,220,17,175,74,3,112,32,168,137,162,132,143,160,224,17,175,75,3,112,32,168,137,162,140,143,160,232,17,175,77,3,112,32,168,137,162,164,143,160,236,17,175,78,3,112,32,168,137,162,172,143,160,96,18,175,80,3,112,32,168,137,162,180,143,160,100,18,175,81,3,112,32,168,137,162,188,143,160,104,18,175,82,3,112,32,168,137,162,196,143,160,108,18,175,83,3,112,32,168,137,160,242,16,175,92,3,112,32,179,137,160,114,17,175,93,3,112,32,179,137,160,242,17,175,94,3,112,32,179,137,160,114,18,175,95,3,112,32,179,137,175,89,3,112,41,255]},{"1182877":[208,11,162,36,144,160,248,16,32,119,137,128,65,58,208,11,162,36,144,160,248,16,32,94,137,128,51,58,208,11,162,44,144,160,248,16,32,94,137,128,37,58,208,11,162,52,144,160,248,16,32,94,137,128,23,58,208,11,162,60,144,160,248,16,32,94,137,128,9,162,36,144,160,248,16,32,119,137,175,90,3,112,41,255]},{"1182962":[208,11,162,68,144,160,120,17,32,119,137,128,37,58,208,11,162,68,144,160,120,17,32,94,137,128,23,58,208,11,162,76,144,160,120,17,32,94,137,128,9,162,84,144,160,120,17,32,94,137,175,91,3,112,41,255]},{"1183019":[208,11,162,92,144,160,248,17,32,94,137,128,23,58,208,11,162,100,144,160,248,17,32,94,137,128,9,162,108,144,160,248,17,32,94,137,175,107,3,112,41,255]},{"1183062":[208,11,162,116,144,160,120,18,32,94,137,128,37,58,208,11,162,124,144,160,120,18,32,94,137,128,23,58,208,11,162,132,144,160,120,18,32,94,137,128,9,162,140,144,160,120,18,32,94,137,175,72,4,112,41,255]},{"1183119":[34,105,152,160,175,6,80,127,41,255]},{"1183130":[24,105,16,30,141,248,18,175,7,80,127,41,255]},{"1183144":[24,105,16,30,141,250,18,162,212,143,160,252,16,175,85,3,112,32,168,137,175,84,3,112,41,255]},{"1183171":[208,11,162,4,144,160,124,17,32,119,137,128,23,58,208,11,162,4,144,160,124,17,32,94,137,128,9,162,12,144,160,124,17,32,94,137,162,204,143,160,252,17,175,86,3,112,32,168,137,162,220,143,160,124,18,175,87,3,112,32,168,137,175,116,3,112,41,4]},{"1183240":[240,11,162,236,143,160,28,19,32,94,137,128,9,162,228,143,160,28,19,32,94,137,175,116,3,112,41,2]},{"1183269":[240,11,162,244,143,160,32,19,32,94,137,128,9,162,228,143,160,32,19,32,94,137,175,116,3,112,41,1]},{"1183298":[240,11,162,252,143,160,36,19,32,94,137,128,9,162,228,143,160,36,19,32,94,137,175,122,3,112,41,2]},{"1183327":[240,5,169,151,14,128,3,169,135,18,141,104,19,26,141,106,19,175,122,3,112,41,16]},{"1183351":[240,5,169,151,14,128,3,169,135,18,141,42,19,26,141,44,19,175,122,3,112,41,64]},{"1183375":[240,5,169,151,14,128,3,169,135,18,141,108,19,26,141,110,19,175,122,3,112,41,32]},{"1183399":[240,5,169,151,14,128,3,169,135,18,141,46,19,26,141,48,19,175,122,3,112,41,4]},{"1183423":[240,5,169,151,6,128,3,169,135,18,141,112,19,26,141,114,19,175,122,3,112,41,1]},{"1183447":[240,5,169,151,6,128,3,169,135,18,141,50,19,26,141,52,19,175,122,3,112,41,8]},{"1183471":[240,5,169,151,14,128,3,169,135,18,141,116,19,26,141,118,19,171,122,250,96,1,10,184,10,183,10,18,10,1,10,2,10,17,10,18,10,1,10,4,10,3,6,18,10]},{"1183517":[10,186,10,185,6]},{"1183523":[10]},{"1183525":[10,20,10,19,6]},{"1183531":[10,5,14,6,14]},{"1183537":[30,22,14,5,6,6,6]},{"1183545":[30,22,6,182,14,182,6,182,142,182,134]},{"1183557":[6,21,6,48,6]},{"1183563":[30,12,14,13,14,28,14,28,78,32,6,16,6,48,6,49,6,32,14,33,14,48,14,49,14,7,10,23,202,23,10,7,202,8,10,24,202,24,10,8,202,9,10,25,202,25,10,9,202,44,6,44,70,60,6,61,6,34,2,35,2,50,2,51,2,40,10,41,10,56,10,57,10,36,2,37,2,52,2,53,2,38,14,39,14,54,14,55,14,42,26,43,26,58,26,59,26,29,6,30,6,45,6,46,6,29,14,30,14,45,14,46,14,72,6,73,6,88,6,89,6,74,14,75,14,90,14,91,14,14,14,15,14,31,78,31,14,76,22,77,22,92,22,93,22,100,6,101,6,116,6,117,6,133,18,134,18,178,18,150,18,133,26,134,26,149,26,150,26,133,14,134,14,149,14,150,14,133,6,134,6,149,6,150,6,78,2,79,2,94,2,95,2,96,10,97,10,112,10,113,10,98,6,99,6,114,6,115,6,10,2,11,2,26,2,27,2,102,14,103,14,118,14,119,14,104,14,105,14,120,6,121,14,104,6,105,6,120,26,106,6,104,10,105,10,120,14,122,10,107,14,107,78,123,14,123,78,108,22,108,86,124,22,124,86,109,10,110,10,125,10,126,10,111,26,111,90,127,26,179,26,111,14,111,78,127,14,180,14,111,6,111,70,127,6,181,6,128,6,128,70,144,6,144,70,129,6,128,70,144,6,144,70,129,6,128,70,145,6,144,70,129,6,129,70,145,6,144,70,64,30,65,30,80,30,81,30,66,6,66,70,82,6,67,6,66,26,66,90,82,26,68,26,66,14,66,78,82,14,69,14,71,74,71,10,86,14,87,14,64,30,65,30,84,10,85,10,64,30,65,30,84,10,70,10,169,155,26,141,24,16,26,141,26,16,175,98,3,112,34,105,152,160,175,4,80,127,41,255]},{"1183973":[24,105,16,30,141,86,16,175,5,80,127,41,255]},{"1183987":[24,105,16,30,141,88,16,175,6,80,127,41,255]},{"1184001":[24,105,16,30,141,90,16,175,7,80,127,41,255]},{"1184015":[24,105,16,30,141,92,16,169,139,14,141,32,16,26,141,34,16,175,67,3,112,41,255]},{"1184039":[34,105,152,160,175,6,80,127,41,255]},{"1184050":[24,105,16,30,141,96,16,175,7,80,127,41,255]},{"1184064":[24,105,16,30,141,98,16,175,142,3,112,41,64]},{"1184078":[240,12,169,153,6,141,38,16,26,141,40,16,128,10,169,137,2,141,38,16,26,141,40,16,175,119,3,112,41,255]},{"1184109":[34,105,152,160,175,6,80,127,41,255]},{"1184120":[24,105,16,30,141,102,16,175,7,80,127,41,255]},{"1184134":[24,105,16,30,141,104,16,96,169,2,141,12,33,194,32,162]},{"1184151":[4,169,136,1,157]},{"1184157":[16,202,202,208,249,169,97,1,141,2,16,169,97,33,141,66,16,169,97,65,141,130,16,169,97,97,141,194,16,169,97,129,141,2,17,169,97,161,141,66,17,169,97,193,141,130,17,169,97,225,141,194,17,169,98,1,141,2,18,169,98,33,141,66,18,169,98,65,141,130,18,169,98,97,141,194,18,169,98,129,141,2,19,169,98,161,141,66,19,169,98,193,141,130,19,169,98,225,141,194,19,169]},{"1184260":[59,141,4,16,141,68,16,141,132,16,141,196,16,141,4,17,141,68,17,141,132,17,141,196,17,141,4,18,141,68,18,141,132,18,141,196,18,141,4,19,141,68,19,141,132,19,141,196,19,169,255]},{"1184312":[141,2,20,165,16,41,255]},{"1184320":[201,1]},{"1184323":[208,107,175,135,128,48,41,255]},{"1184332":[201,2]},{"1184335":[208,95,8,226,48,218,90,34,53,181,164,122,250,40,41,255]},{"1184352":[208,78,169,110,29,141,142,19,24,105,16]},{"1184364":[141,206,19,169,103,29,141,144,19,24,105,16]},{"1184377":[141,208,19,169,101,29,141,146,19,24,105,16]},{"1184390":[141,210,19,169,104,29,141,148,19,24,105,16]},{"1184403":[141,212,19,169,76,29,141,150,19,24,105,16]},{"1184416":[141,214,19,169,100,29,141,152,19,24,105,16]},{"1184429":[141,216,19,226,32,107,34,147,145,164,194,32,169,104,97,141,2,16,169,104,129,141,66,16,169,104,161,141,130,16,169,104,193,141,194,16,169,104,225,141,2,17,169,105,1,141,66,17,169,105,33,141,130,17,169,105,65,141,194,17,169,105,97,141,2,18,169,105,129,141,66,18,169,105,161,141,130,18,169,105,193,141,194,18,169,105,225,141,2,19,169,106,1,141,66,19,169,106,33,141,130,19,169,106,65,141,194,19,226,32,107,194,48,162,60]},{"1184545":[189,4,16,9]},{"1184550":[32,157,4,16,202,202,208,243,162,60]},{"1184561":[189,68,16,9]},{"1184566":[32,157,68,16,202,202,208,243,162,60]},{"1184577":[189,132,16,9]},{"1184582":[32,157,132,16,202,202,208,243,162,60]},{"1184593":[189,196,16,9]},{"1184598":[32,157,196,16,202,202,208,243,162,60]},{"1184609":[189,4,17,9]},{"1184614":[32,157,4,17,202,202,208,243,162,60]},{"1184625":[189,68,17,9]},{"1184630":[32,157,68,17,202,202,208,243,162,60]},{"1184641":[189,132,17,9]},{"1184646":[32,157,132,17,202,202,208,243,162,60]},{"1184657":[189,196,17,9]},{"1184662":[32,157,196,17,202,202,208,243,162,60]},{"1184673":[189,4,18,9]},{"1184678":[32,157,4,18,202,202,208,243,162,60]},{"1184689":[189,68,18,9]},{"1184694":[32,157,68,18,202,202,208,243,162,60]},{"1184705":[189,132,18,9]},{"1184710":[32,157,132,18,202,202,208,243,162,60]},{"1184721":[189,196,18,9]},{"1184726":[32,157,196,18,202,202,208,243,162,60]},{"1184737":[189,4,19,9]},{"1184742":[32,157,4,19,202,202,208,243,162,60]},{"1184753":[189,68,19,9]},{"1184758":[32,157,68,19,202,202,208,243,107,72,218,173]},{"1184771":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141,21,33,169,1,141]},{"1184806":[67,169,24,141,1,67,169]},{"1184814":[141,22,33,169,48,141,23,33,169,49,141,4,67,169]},{"1184829":[141,2,67,169,208,141,3,67,173]},{"1184839":[33,72,169,128,141]},{"1184845":[33,156,5,67,169,16,141,6,67,169,1,141,11,66,104,141]},{"1184862":[33,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1184890":[67,250,104,107,165,16,201,4,208,11,169,1,141,178,10,34,82,238,27,128,4,34,151,148,164,92,150,239,27,72,218,194,32,162,64,191]},{"1184927":[128,51,159]},{"1184931":[197,126,202,202,16,244,226,32,230,21,250,104,107,194,32,175,217,3,112,9]},{"1184952":[28,141,206,16,24,105,16]},{"1184960":[141,14,17,175,219,3,112,9]},{"1184969":[28,141,208,16,24,105,16]},{"1184977":[141,16,17,175,221,3,112,9]},{"1184986":[28,141,210,16,24,105,16]},{"1184994":[141,18,17,175,223,3,112,9]},{"1185003":[28,141,212,16,24,105,16]},{"1185011":[141,20,17,175,108,3,112,41,255]},{"1185021":[74,74,74,133,2,160,44,16,169,143,6,162,10]},{"1185035":[153]},{"1185038":[200,200,202,208,8,72,152,24,105,44]},{"1185049":[168,104,198,2,208,236,32,33,138,107,165,200,208,4,169,4,128,28,201,3,208,4,169]},{"1185073":[128,20,175,135,128,48,201,2,208,10,175,158,80,127,208,4,169,3,128,2,169]},{"1185095":[133,200,107,165,200,208,22,175,135,128,48,201,2,208,10,175,158,80,127,208,4,169,3,128,14,169,4,128,10,201,3,208,4,169,4,128,2,169]},{"1185134":[133,200,107,175,135,128,48,201,2,208,18,156,46,1,218,90,34,53,181,164,240,16,122,250,169,44,141,46,1,169,241,141,44,1,92,118,206,12,122,250,169,3,133,200,169,60,141,46,1,92,177,206,12,143]},{"1185189":[5,112,143,2,5,112,143,4,5,112,143,6,5,112,143,8,5,112,143,10,5,112,143,12,5,112,143,14,5,112,159,217,3,112,107,224,8]},{"1185227":[144,4,159,248,4,112,159,217,3,112,107,224,8]},{"1185241":[144,4,191,248,4,112,191,217,3,112,107,139,75,171,25,254,149,235,171,107,173,18,11,16,2,169,11,201,12,144,2,169]},{"1185274":[141,18,11,107,110]},{"1185280":[111]},{"1185282":[112]},{"1185284":[113]},{"1185286":[115]},{"1185288":[116]},{"1185290":[117]},{"1185292":[118]},{"1185294":[120]},{"1185296":[121]},{"1185298":[122]},{"1185300":[123]},{"1185302":[112,120,128,136,152,160,168,176,192,200,208,216,139,72,218,90,8,194,48,162,176,128,160,208,80,169,15]},{"1185330":[84,127,48,40,122,250,104,171,107,218,90,72,164,4,90,164,6,90,164,8,90,164,10,90,164,12,90,164,14,90,41,248,255,168,183]},{"1185366":[143]},{"1185368":[81,127,200,200,183]},{"1185374":[143,2,81,127,200,200,183]},{"1185382":[143,4,81,127,200,200,183]},{"1185390":[143,6,81,127,169,2]},{"1185397":[133,4,34,137,178,160,104,133,14,104,133,12,104,133,10,104,133,8,104,133,6,104,133,4,104,41,7]},{"1185425":[170,191]},{"1185428":[81,127,72,169]},{"1185434":[143]},{"1185436":[81,127,143,2,81,127,143,4,81,127,143,6,81,127,104,122,250,107,175,135,128,48,208,9,230,14,162,253,255,92,240,235,1,230,14,162,254,255,232,232,224,80,1,240,60,191,108,233,1,41,255,127,197,160,208,238,198,14,208,234,165]},{"1185498":[72,165,2,72,169,188,234,133]},{"1185507":[169,1]},{"1185510":[133,2,138,74,34,59,150,164,133,12,104,133,2,104,133]},{"1185526":[191,108,233,1,10,144,4,92,20,236,1,92,56,236,1,92,222,235,1,139,72,218,90,8,75,171,226,16,194,32,162]},{"1185558":[189,238,152,159]},{"1185563":[201,126,232,232,224,128,144,243,160]},{"1185573":[162]},{"1185575":[218,187,191,21,130,48,250,41,31]},{"1185585":[10,10,10,90,168,185,238,151,159,24,201,126,185,240,151,159,26,201,126,185,242,151,159,88,201,126,185,244,151,159,90,201,126,122,232,232,232,232,232,232,200,224,25,144,201,226,32,32,105,151,40,122,250,104,171,107,72,218,173]},{"1185645":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,1,141]},{"1185675":[67,169,128,141,21,33,169,24,141,1,67,169,96,141,22,33,141,23,33,169]},{"1185696":[141,2,67,169,201,141,3,67,169,126,141,4,67,169,128,141,5,67,156,6,67,173]},{"1185719":[33,72,169,128,141]},{"1185725":[33,169,1,141,11,66,104,141]},{"1185734":[33,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1185762":[67,250,104,96,134,29,134,29,150,29,150,29,1,10,2,10,17,10,18,10,5,14,6,14]},{"1185787":[30,22,14]},{"1185791":[6,21,6,48,6]},{"1185797":[30,12,14,13,14,28,14,28,78,98,6,99,6,114,6,115,6,10,2,11,2,26,2,27,2,32,14,33,14,48,14,49,14,133,26,134,26,149,26,150,26,7,10,23,202,23,10,7,202,8,10,24,202,24,10,8,202,9,10,25,202,25,10,9,202,44,6,44,70,60,6,61,6,34,2,35,2,50,2,51,2,36,2,37,2,52,2,53,2,38,14,39,14,54,14,55,14,40,10,41,10,56,10,57,10,42,26,43,26,58,26,59,26,64,30,65,30,80,30,81,30,66,26,66,90,82,26,83,26,29,6,30,6,45,6,46,6,72,6,73,6,88,6,89,6,74,14,75,14,90,14,91,14,76,22,77,22,92,22,93,22,78,2,79,2,94,2,95,2,14,14,15,14,31,78,31,14,100,6,101,6,116,6,117,6,109,10,110,10,125,10,126,10,111,26,111,90,127,26,127,90,129,6,129,70,145,6,145,70,130,10,131,10,146,10,147,10,132,6,132,70,148,6,148,70,47,74,47,10,62,10,63,10,136,1,136,1,136,1,136,1,138,29,136,1,76,29,104,29,77,29,78,29,136,1,136,1,160,5,161,5,136,1,164,5,165,5,136,1,168,5,169,5,136,1,172,5,173,5,136,1,176,5,177,5,136,1,139,29,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,154,29,136,1,92,29,120,29,93,29,94,29,136,1,136,1,162,5,163,5,136,1,166,5,167,5,136,1,170,5,171,5,136,1,174,5,175,5,136,1,178,5,179,5,136,1,155,29,136,1,136,1,136,1,136,1,175,74,128,48,208,3,130,76]},{"1186167":[194,48,162,64,4,169,57,14,34,124,201,27,162,188,4,169,58,14,34,172,194,27,34,172,194,27,34,172,194,27,34,172,194,27,162,60,5,34,172,194,27,34,172,194,27,34,172,194,27,34,172,194,27,162,190,5,169,144,4,34,172,194,27,34,172,194,27,169,255,255,153,18,16,130,62]},{"1186243":[194,48,162,188,3,169,57,14,34,124,201,27,162,190,3,169,58,14,34,172,194,27,34,172,194,27,162,60,4,34,172,194,27,34,172,194,27,34,172,194,27,162,188,4,34,172,194,27,34,172,194,27,34,172,194,27,169,255,255,153,18,16,169,21,53,141,45,1,226,48,175,219,242,126,9,32,143,219,242,126,169,3,141,47,1,169,1,133,20,107,175,74,128,48,41,255]},{"1186340":[208,38,169,57,14,141,188,35,26,141,190,35,26,141,192,35,26,141,60,36,26,141,62,36,26,141,64,36,26,141,188,36,26,141,190,36,26,141,192,36,107,39,39,39,39,39,39,2,2,1,1,1]},{"1186397":[39,1,1,1,1,1,2,2,39,39,39]},{"1186413":[39,1,1,1,32,1,2,2,39,39,39]},{"1186429":[39,1,1,1,1,32,2,2,2,2,2]},{"1186445":[1,1,1,1,26,1,18,1,1,2,1,1,40,46,42,43,1,1,24,24,26,1,18,1,1,44,2,45,41,47,2,2,1,1,1,1,1,1,2,1,2,46]},{"1186489":[44]},{"1186491":[78,79,1,1,1,1,1,1,2,1,2]},{"1186503":[46]},{"1186507":[2,34,1,1,2]},{"1186515":[24,18,2,2]},{"1186520":[72]},{"1186525":[1,1,2]},{"1186529":[1,1,16,26,2]},{"1186536":[72]},{"1186541":[16,16,2]},{"1186545":[1,1,1,1]},{"1186551":[72]},{"1186554":[9]},{"1186557":[2,2,2]},{"1186561":[1,1,43]},{"1186566":[9]},{"1186573":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1186589":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1186605":[1,1,1,70,1,1,2,2,2,2,2,2,2]},{"1186621":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1186637":[2,2,66,2,2,2,2,2,2,2,41,34]},{"1186653":[2,2,2,2,2,2,2,2,2,2,41,34]},{"1186670":[2,2,2]},{"1186675":[2,2,2,2]},{"1186686":[2,2,2,2,41,2,2,2,2]},{"1186701":[1,1,1,1,1,1,1,1,1,1,1]},{"1186715":[2,68,1,1,1,1,1,1,1,1,2,2,2]},{"1186731":[2,68,1,1,1,1,1,1,1,1,2,2,2]},{"1186749":[1,1,67,1,1,1,1,1,2,2,2]},{"1186765":[80,2,84,81,87,87,86,86,39,39,39]},{"1186777":[64,64,72,72,80,2,84,81,87,42,86,86,39,39,39]},{"1186793":[64,64,87,72,39,2,82,83,2,1,18,24,85,85]},{"1186809":[72,2,2]},{"1186813":[39,2,82,83,9,1,26,16,85,85]},{"1186825":[72,2,2]},{"1186829":[2,2,24,8,8,8,9,9,8,8,41,2,2,2,26,2,8,8,16,8,18]},{"1186851":[9,9,9,9,9,72,9,41]},{"1186860":[75,2,2,2]},{"1186865":[8,2,2]},{"1186872":[1]},{"1186875":[32]},{"1186877":[2,2,2,2,2,2,2]},{"1186886":[1,1,1,2]},{"1186891":[8]},{"1186893":[175,74,128,48,240,10,191,128,242,126,9,64,159,128,242,126,191,128,242,126,107,175,74,128,48,240,42,169,27,141,47,1,156,198,4,100,176,156,16,7,156,228,2,156,193,15,156,26,1,156,27,1,156,28,1,156,29,1,169,2,141,44,1,169,9,141,45,1,107,169,5,141,198,4,100,176,100,200,107,175,74,128,48,240,3,169,1,107,165,138,201,67,107,175,74,128,48,41,255]},{"1186993":[240,2,128,23,169,15,2,166,138,224,51]},{"1187005":[208,4,143,168,34,126,224,47]},{"1187014":[208,4,143,178,43,126,107,175,74,128,48,41,255]},{"1187028":[208,5,175,135,242,126,107,169,32]},{"1187038":[107,175,74,128,48,240,69,218,8,139,75,171,165,138,41,64,240,55,194,48,162]},{"1187061":[191,54,157,164,197,34,176,29,191,56,157,164,197,34,144,21,191,58,157,164,197,32,176,13,191,60,157,164,197,32,144,5,171,40,250,128,24,138,24,105,8]},{"1187103":[201,184]},{"1187106":[240,3,170,128,206,171,40,250,165,12,5,14,92,176,169,7,92,209,169,7,144,2,200,2,168,12,248,12,248,5]},{"1187137":[10]},{"1187139":[6,96,6,176,5,160,6,96,6,48,8,160,6,112,7,96,6,128,6,128,8,80,9,96,6,136,6,80,9]},{"1187169":[10,96,6,48,8,184,7,72,8,224,8,112,9,239,2,33,3,22,12,162,12,72]},{"1187192":[143]},{"1187194":[16,11,72,11,88,3,64,4,8,14,208,14,184,3,32,4,208,14,232,15,96,3,200,3,192,14,32,15,104,12]},{"1187225":[13,120,13,200,13,64,15,112,15,24,6,64,6,40,14,120,14,152,2,232,2,16,15,128,15,248,1,56,2,168,10,144,11,200,2,32,3,24,13,128,13,64]},{"1187268":[112]},{"1187270":[240,14,48,15,32,1,96,1,208,10]},{"1187281":[11,80,11,112,11,48,11,96,11,80,11,112,11,120,6,240,6,16]},{"1187300":[64]},{"1187302":[168,2,232,2,144,12,192,12,173,10,4,41,255]},{"1187316":[201,5]},{"1187319":[208,7,169,1,1,143,24,46,126,175,74,128,48,41,255]},{"1187335":[208,18,173,10,4,41,255]},{"1187343":[201,67]},{"1187346":[208,7,169,1,1,143,80,37,126,175,74,128,48,41,255]},{"1187362":[208,25,173,10,4,41,255]},{"1187370":[201,91]},{"1187373":[208,14,169,1,1,143,182,39,126,169,194,5,143,180,39,126,226,48,175,74,128,48,240,20,139,169,126,72,171,194,48,165,138,201,128]},{"1187409":[176,5,10,170,252,98,158,171,194,48,162,30]},{"1187422":[169,190,13,107,98,159,98,159,98,159,99,159,98,159,142,159,98,159,136,160,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,215,160,98,159,98,159,98,159,222,160,98,159,98,159,98,159,98,159,98,159,98,159,253,160,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,151,163,98,159,98,159,98,159,98,159,98,159,98,159,179,163,98,159,117,167,248,169,98,159,255,169,98,159,98,159,98,159,98,159,54,170,98,159,11,167,98,159,98,159,98,159,98,159,98,159,98,159,172,170,98,159,35,171,98,159,1,171,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,42,171,98,159,98,159,98,159,49,171,98,159,98,159,98,159,98,159,98,159,98,159,77,171,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,31,173,45,173,98,159,98,159,38,173,98,159,52,173,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,98,159,96,169,26,2,141,182,41,169,243,1,141,184,41,169,160]},{"1187698":[141,186,41,169,4,1,141,188,41,169,198]},{"1187710":[141,52,42,141,56,42,141,58,42,169,52]},{"1187722":[141,224,43,96,169,17,1,141,110,32,141,236,32,169,19,1,141,112,32,141,114,32,169,18,1,141,116,32,141,238,32,141,108,33,169,22,1,141,240,32,141,110,33,169,23,1,141,242,32,169,24,1,141,244,32,169,28,1,141,112,33,169,29,1,141,114,33,169,30,1,141,116,33,169,48,1,141,226,33,141,240,33,141,226,34,141,240,34,169,35,1,141,236,33,169,36,1,141,238,33,169,52]},{"1187825":[141,242,33,169,38,1,141,244,33,169,53,1,141,98,34,141,112,34,141,98,35,141,112,35,169,54,1,141,100,34,141,102,34,141,108,34,141,110,34,169,55,1,141,104,34,141,106,34,169,60,1,141,228,34,141,230,34,141,236,34,141,238,34,169,61,1,141,232,34,141,234,34,169,68,1,141,100,35,169,69,1,141,102,35,169,70,1,141,104,35,169,71,1,141,106,35,169,179,1,141,108,35,169,180,1,141,110,35,169,57,1,141,112,41,141,108,44,169,75,1,141,114,41,141,110,44,169,107,1,141,240,41,141,236,44,169,130,1,141,242,41,141,238,44,169,52]},{"1187972":[141,74,61,96,169,27,2,141,158,37,141,162,37,141,164,37,141,28,38,141,38,38,141,154,38,141,168,38,141,26,39,141,40,39,141,154,39,141,168,39,141,30,40,141,32,40,141,34,40,141,36,40,141,40,40,141,156,40,141,166,40,141,30,41,141,36,41,169,52,1,141,158,38,141,164,38,169,52]},{"1188051":[141,38,40,96,169,52]},{"1188058":[141,46,43,96,169,241,2,141,34,36,169,242,2,141,36,36,169,132,1,141,162,36,141,34,37,169,133,1,141,164,36,141,36,37,96,169,133,4,141,36,36,141,38,36,169,84,4,141,164,36,141,166,36,169,118,4,141,34,37,169,96,4,141,36,37,141,38,37,169,215,4,141,40,37,169,221,4,141,36,38,169,222,4,141,38,38,169,224,4,141,164,38,169,225,4,141,166,38,169,228,4,141,36,39,169,229,4,141,38,39,169,52]},{"1188171":[141,164,39,141,166,39,169,109,4,141,62,36,141,188,36,141,190,36,141,62,37,141,64,36,141,192,36,141,194,36,141,64,37,169,53]},{"1188207":[141,40,44,141,174,47,169,52]},{"1188216":[141,44,44,141,46,44,141,182,44,141,54,45,141,182,45,141,182,46,141,48,47,141,54,47,141,170,47,141,176,47,141,180,47,141,182,47,169,226]},{"1188255":[141,54,44,141,168,47,169,174]},{"1188264":[141,172,44,169,175]},{"1188270":[141,174,44,169,126]},{"1188276":[141,176,44,169,127]},{"1188282":[141,178,44,169,186,4,141,180,44,141,180,45,141,180,46,169,176]},{"1188300":[141,44,45,169,20]},{"1188306":[141,46,45,169,21]},{"1188312":[141,48,45,169,168]},{"1188318":[141,50,45,169,187,4,141,52,45,141,52,46,141,52,47,169,137]},{"1188336":[141,172,45,169,28]},{"1188342":[141,174,45,169,29]},{"1188348":[141,176,45,169,118]},{"1188354":[141,178,45,169,241]},{"1188360":[141,44,46,169,78]},{"1188366":[141,46,46,169,79]},{"1188372":[141,48,46,169,217]},{"1188378":[141,50,46,169,154]},{"1188384":[141,172,46,169,155]},{"1188390":[141,174,46,169,156]},{"1188396":[141,176,46,169,149]},{"1188402":[141,178,46,169,52]},{"1188408":[141,40,48,141,44,48,169,53]},{"1188417":[141,42,48,141,50,48,169,218]},{"1188426":[141,46,48,169,226]},{"1188432":[141,48,48,169,133,4,141,36,36,141,38,36,169,84,4,141,164,36,141,166,36,169,118,4,141,34,37,169,96,4,141,36,37,141,38,37,169,215,4,141,40,37,169,221,4,141,36,38,169,222,4,141,38,38,169,224,4,141,164,38,169,225,4,141,166,38,169,228,4,141,36,39,169,229,4,141,38,39,169,52]},{"1188513":[141,164,39,141,166,39,169,134,4,141,176,38,169,135,4,141,178,38,169,84,4,141,44,39,141,46,39,169,142,4,141,48,39,169,143,4,141,50,39,169,202,4,141,172,39,169,94,4,141,174,39,169,148,4,141,176,39,169,149,4,141,178,39,169,158,4,141,180,39,169,153,4,141,44,40,169,81,4,141,48,40,169,52]},{"1188597":[141,172,40,141,174,40,141,176,40,169,84,4,141,78,39,141,80,39,169,8,6,141,82,39,169,89,4,141,206,39,141,208,39,169,94,4,141,210,39,169,81,4,141,78,40,141,80,40,141,82,40,141,46,40,169,52]},{"1188654":[141,206,40,141,208,40,141,210,40,175,219,242,126,41,32]},{"1188670":[240,72,169,109,4,141,62,36,169,58,14,141,188,36,169,59,14,141,190,36,169,62,14,141,60,37,169,63,14,141,62,37,169,144,4,141,190,37,169,57,14,141,64,36,169,60,14,141,192,36,169,61,14,141,194,36,169,64,14,141,64,37,169,65,14,141,66,37,169,145,4,141,192,37,169,1,1,143,44,34,126,169,1,1,143,82,34,126,96,169,52]},{"1188762":[141,136,34,141,8,35,141,136,35,141,8,36,141,136,36,141,138,36,169,54]},{"1188783":[141,134,35,96,169,126,1,141,80,32,141,206,32,169,209]},{"1188799":[141,82,32,141,84,32,141,86,32,141,88,32,141,90,32,141,92,32,141,94,32,141,230,33,141,232,33,141,234,33,141,236,33,141,238,33,141,240,33,169,210]},{"1188841":[141,96,32,141,226,32,141,100,33,169,131,1,141,208,32,141,78,33,169,201]},{"1188862":[141,210,32,141,212,32,141,214,32,141,216,32,141,218,32,141,220,32,141,222,32,141,82,33,141,84,33,141,86,33,141,88,33,141,90,33,141,92,33,141,94,33,141,102,34,141,104,34,141,106,34,141,108,34,141,110,34,141,112,34,141,204,34,169,208]},{"1188928":[141,224,32,141,98,33,141,228,33,169,83,1,141,80,33,141,206,33,141,208,33,141,80,34,141,206,34,169,200]},{"1188958":[141,96,33,141,226,33,141,100,34,141,218,40,141,92,41,169,220]},{"1188976":[141,210,33,141,212,33,141,214,33,141,216,33,141,218,33,141,220,33,141,222,33,141,76,34,169,202]},{"1189003":[141,224,33,141,98,34,141,90,40,141,220,40,169,120,1,141,78,34,169,227]},{"1189024":[141,82,34,141,84,34,169,134,1,141,208,34,141,78,35,169,52]},{"1189042":[141,210,34,141,212,34,141,214,34,141,80,35,141,82,35,141,84,35,141,86,35,141,208,35,141,210,35,141,212,35,141,214,35,141,82,36,141,84,36,141,86,36,141,88,36,141,212,36,141,214,36,141,84,37,141,86,37,141,212,37,141,214,37,141,86,38,169,211]},{"1189111":[141,226,34,169,2,3,141,228,34,169,204]},{"1189123":[141,230,34,141,232,34,141,234,34,141,236,34,141,238,34,141,240,34,141,76,35,169,206]},{"1189147":[141,98,35,141,226,35,141,216,37,141,88,38,141,216,38,141,88,39,169,197]},{"1189168":[141,100,35,141,228,35,141,220,37,141,92,38,141,220,38,141,92,39,169,171,6,141,102,35,141,230,35,141,102,36,141,228,36,141,230,36,141,96,39,169,170]},{"1189210":[141,104,35,169,132,3,141,106,35,141,110,35,141,236,35,141,106,36,141,232,36,141,234,36,141,236,36,141,238,36,169,171]},{"1189243":[141,108,35,169,89,7,141,200,35,141,74,36,141,204,36,141,78,37,141,208,38,141,82,39,141,212,39,169,87,7,141,202,35,141,76,36,141,206,36,141,80,37,141,210,38,141,84,39,169,255,1,141,204,35,141,78,36,141,208,36,141,82,38,141,212,38,141,86,39,169,124,1,141,206,35,141,80,36,141,210,36,141,84,38,141,214,38,169,92,1,141,224,35,169]},{"1189338":[1,141,90,36,141,216,36,169,194,1,141,92,36,169,24,2,141,94,36,169,98,1,141,96,36,169,6,1,141,98,36,141,224,36,141,92,37,169,7,1,141,100,36,141,226,36,169,4,1,141,218,36,141,88,37,169,212,1,141,220,36,169,25,2,141,222,36,169,121,1,141,82,37,141,210,37,169,5,1,141,90,37,169,102,1,141,94,37,169,102,7,141,96,37,169,180,6,141,98,37,141,100,37,141,102,37,141,104,37,141,106,37,141,108,37,141,110,37,141,112,37,169,229,6,141,208,37,141,80,38,169,196]},{"1189471":[141,218,37,141,90,38,141,218,38,141,90,39,169,113,1,141,222,37,169,101,1,141,228,37,141,230,37,141,232,37,141,234,37,141,236,37,141,238,37,141,240,37,169,228,6,141,210,39,141,82,40,141,84,40,141,86,40,141,212,40,141,214,40,141,86,41,141,88,41,141,216,41,141,218,41,169,225,6,141,214,39,169,253,2,141,216,39,141,88,40,169,207]},{"1189564":[141,218,39,169,231,6,141,216,40,141,90,41,141,220,41,169,105,7,141,248,56,169,225,6,141,250,56,141,252,56,141,254,56,169,227,6,141,120,57,169,229,2,141,122,57,141,126,57,169,236,2,141,124,57,169,240,2,141,248,57,169,243,2,141,250,57,141,252,57,141,254,57,169,52]},{"1189639":[141,148,61,96,169,229,2,141,174,39,141,44,40,141,46,40,141,50,40,141,172,40,141,174,40,141,40,41,141,44,41,141,168,41,141,176,41,141,40,42,141,48,42,141,172,42,141,178,42,169,138,7,141,170,40,141,176,40,141,170,42,141,42,43,141,48,43,141,174,43,169,235,2,141,180,40,141,48,41,141,174,41,141,44,42,141,50,42,141,174,42,169,236,2,141,52,41,141,40,43,141,44,43,141,46,43,141,50,43,96,169,213,1,141,134,36,169,101,1,141,6,37,169,102,1,141,8,37,141,138,37,169,198]},{"1189773":[141,134,37,141,8,38,141,136,38,141,8,39,141,136,39,141,6,40,141,8,40,169,113,1,141,136,37,169,28,2,141,10,38,141,138,38,141,10,39,141,138,39,169,52]},{"1189818":[141,14,39,141,142,39,141,144,39,141,14,40,141,16,40,141,18,40,141,20,40,141,22,40,141,24,40,141,26,40,141,28,40,141,142,40,141,146,40,141,148,40,141,150,40,141,152,40,141,154,40,141,156,40,141,158,40,141,14,41,141,16,41,141,18,41,141,24,41,141,26,41,141,28,41,141,30,41,141,32,41,141,140,41,141,142,41,141,144,41,141,146,41,141,152,41,141,154,41,141,158,41,141,160,41,141,6,42,141,8,42,141,10,42,141,12,42,141,16,42,141,18,42,141,20,42,141,22,42,141,24,42,141,28,42,141,30,42,141,132,42,141,134,42,141,136,42,141,140,42,141,142,42,141,144,42,141,146,42,141,148,42,141,150,42,141,152,42,141,154,42,141,156,42,141,6,43,141,10,43,141,14,43,141,18,43,141,26,43,141,132,43,141,134,43,141,136,43,141,138,43,141,142,43,141,146,43,141,148,43,141,152,43,141,154,43,141,4,44,141,8,44,141,10,44,141,14,44,141,18,44,141,20,44,141,24,44,141,134,44,141,136,44,141,138,44,141,144,44,141,146,44,141,148,44,141,152,44,141,10,45,141,12,45,141,16,45,141,20,45,141,22,45,141,138,45,141,140,45,141,142,45,141,148,45,169,106,1,141,140,39,141,12,40,141,130,42,141,2,43,141,130,43,141,2,44,141,130,44,169,250,1,141,140,40,169,218]},{"1190136":[141,144,40,141,156,41,141,20,43,141,22,43,141,24,43,141,150,43,141,22,44,141,150,44,141,8,45,141,146,45,169,134,1,141,12,41,141,138,41,141,4,42,169,54]},{"1190181":[141,20,41,141,22,41,141,148,41,141,150,41,141,18,45,169,228]},{"1190199":[141,134,41,169,229]},{"1190205":[141,136,41,169]},{"1190210":[1,141,162,41,169,113]},{"1190217":[141,14,42,141,26,42,141,140,44,169,92,1,141,32,42,141,158,42,141,28,43,141,154,44,141,24,45,141,150,45,169,4,1,141,34,42,169,212,1,141,36,42,169,53]},{"1190262":[141,138,42,141,8,43,141,6,44,141,14,45,141,144,45,169,98,1,141,160,42,141,30,43,141,156,43,141,26,45,141,152,45,169,226]},{"1190298":[141,4,43,141,12,43,141,16,43,141,140,43,141,144,43,141,12,44,141,16,44,141,142,44,169,248]},{"1190325":[141,26,44,169,206]},{"1190331":[141,28,44,141,156,44,169,96,1,141,132,44,141,6,45,141,136,45,169,103,1,141,4,45,141,134,45,169,114,1,141,8,46,169,94,1,141,10,46,141,12,46,141,14,46,141,16,46,141,18,46,141,20,46,169,116,1,141,22,46,96,169,52]},{"1190395":[141,168,34,96,169,241,2,141,176,43,169,242,2,141,178,43,169,132,1,141,48,44,169,133,1,141,50,44,169,146,3,141,176,44,169,147,3,141,178,44,169,148,3,141,48,45,169,149,3,141,50,45,169,52]},{"1190450":[141,86,47,96,169,116,7,141]},{"1190459":[40,169,225,6,141,2,40,169,87,7,141,4,40,141,134,40,169,121,7,141,128,40,169,236,2,141,130,40,169,89,7,141,132,40,141,6,41,169,229,2,141]},{"1190501":[41,141,2,41,141,4,41,169,106,7,141,8,41,169,243,2,141,128,41,141,130,41,169,241,2,141,132,41,169,242,2,141,134,41,169,138,3,141,136,41,169,132,1,141,4,42,141,132,42,141,4,43,141,132,43,169,133,1,141,6,42,141,134,42,141,6,43,141,134,43,96,169,150,14,141,94,35,141,222,35,141,94,36,141,222,36,141,94,37,169,151,14,141,96,35,141,224,35,141,96,36,141,224,36,141,96,37,169,148,14,141,222,37,169,149,14,141,224,37,169,128,1,141,94,39,169,129,1,141,96,39,169,132,1,141,222,39,141,94,40,169,133,1,141,224,39,141,96,40,169,18,2,141,224,43,96,169,152,3,141,160,37,169,34,5,141,162,37,169,37,1,141,32,38,169,38,1,141,34,38,169,57,2,141,158,38,141,164,38,96,169,57,2,141,74,61,96,169,15,2,141,46,43,96,169,243,2,141,34,36,141,36,36,169,201]},{"1190717":[141,162,36,141,164,36,169,227]},{"1190726":[141,34,37,141,36,37,96,169,35,3,141,182,57,169,36,3,141,184,57,141,186,57,141,188,57,141,190,57,169,254,2,141,52,58,169,255,2,141,54,58,169,38,3,141,56,58,141,58,58,141,60,58,141,62,58,169,157,3,141,178,58,169,3,3,141,180,58,169,50,2,141,182,58,141,52,59,169,51,2,141,184,58,141,186,58,141,188,58,141,190,58,169,162,3,141,50,59,169,53,2,141,54,59,141,180,59,169,106,4,141,56,59,169,51,3,141,58,59,141,60,59,141,62,59,169,52]},{"1190853":[141,182,59,141,186,59,141,188,59,141,58,60,141,60,60,141,62,60,141,28,50,141,156,50,141,160,50,169,113]},{"1190883":[141,30,50,169,218]},{"1190889":[141,32,50,141,154,50,169,225]},{"1190898":[141,158,50,169,130,3,141,24,51,169,124,3,141,34,51,169,27,2,141,24,50,141,34,50,141,152,50,141,162,50,141,26,51,141,28,51,141,30,51,141,32,51,169,226]},{"1190943":[141,26,50,169,242]},{"1190949":[141,184,59,169,8,1,141,56,60,169,52]},{"1190961":[141,190,59,175,197,243,126,41,255]},{"1190971":[201,3]},{"1190974":[208,6,169,18,2,141,190,59,169,36,3,141,192,57,141,194,57,141,196,57,169,37,3,141,198,57,169,213,2,141,200,57,141,210,57,169,204,2,141,204,57,141,212,57,169,38,3,141,64,58,141,66,58,141,68,58,169,39,3,141,70,58,169,247,2,141,72,58,169,227,2,141,76,58,141,78,58,169,51,2,141,192,58,141,194,58,141,196,58,169,52,2,141,198,58,141,72,59,169,246,2,141,200,58,169,150,3,141,202,58,169,51,3,141,64,59,141,66,59,169,170,3,141,68,59,169,163,3,141,70,59,141,200,59,169,151,3,141,74,59,169,52]},{"1191117":[141,192,59,141,194,59,141,198,59,141,64,60,141,66,60,169,156,2,141,196,59,169,10,1,141,68,60,169,11,1,141,70,60,141,72,60,141,74,60,141,76,60,141,78,60,141,80,60,141,82,60,141,84,60,141,86,60,141,88,60,141,90,60,141,92,60,141,94,60,141,96,60,141,98,60,141,100,60,141,102,60,96,169,15,2,141,178,43,96,169,15,2,141,168,34,96,169,57,2,141,148,61,96,169,57,2,141,80,47,169,163,11,141,82,47,141,206,47,141,208,47,169,163,11,141,84,48,141,86,48,141,88,48,141,90,48,141,84,50,141,86,50,141,88,50,141,90,50,169,172,11,141,212,48,169,173,11,141,214,48,141,86,49,141,214,49,169,169,11,141,216,48,141,88,49,141,216,49,169,170,11,141,218,48,169,197,11,141,84,49,169,200,11,141,90,49,169,202,11,141,212,49,169,205,11,141,218,49,96,226,48,175,201,80,127,208,31,175,67,243,126,32,131,176,194,32,166,6,138,9]},{"1191348":[36,143,90,199,126,166,7,138,9]},{"1191358":[36,143,92,199,126,128,14,194,32,169,49,36,143,90,199,126,26,143,92,199,126,175,98,243,126,32,33,176,166,4,138,9]},{"1191391":[36,143,80,199,126,166,5,138,9]},{"1191401":[36,143,82,199,126,166,6,138,9]},{"1191411":[36,143,84,199,126,166,7,138,9]},{"1191421":[36,143,86,199,126,226,32,175,117,129,48,208,51,175,200,80,127,208,31,175,119,243,126,32,131,176,194,32,166,6,138,9]},{"1191454":[36,143,96,199,126,166,7,138,9]},{"1191464":[36,143,98,199,126,128,14,194,32,169,49,36,143,96,199,126,26,143,98,199,126,226,32,175,103,129,48,208,3,130,122]},{"1191496":[175,24,244,126,32,92,176,194,32,175,101,129,48,143,42,199,126,166,5,138,9]},{"1191518":[36,143,44,199,126,166,6,138,9]},{"1191528":[36,143,46,199,126,166,7,138,9]},{"1191538":[36,143,48,199,126,226,32,175,103,129,48,201,255,240,48,175,103,129,48,32,92,176,194,32,169,48,40,143,50,199,126,166,5,138,9]},{"1191574":[36,143,52,199,126,166,6,138,9]},{"1191584":[36,143,54,199,126,166,7,138,9]},{"1191594":[36,143,56,199,126,128,17,194,32,169,127,32,143,50,199,126,143,52,199,126,143,54,199,126,194,32,175,60,128,48,41,255]},{"1191627":[240,4,34,157,176,164,226,32,175,111,243,126,201,255,240,34,32,131,176,194,32,166,6,138,224,144,208,3,169,127]},{"1191658":[9]},{"1191660":[36,143,100,199,126,166,7,138,9]},{"1191670":[36,143,102,199,126,128,17,194,32,169,127,36,143,100,199,126,143,102,199,126,143,38,199,126,175,110,243,126,41,255]},{"1191701":[24,105,7]},{"1191705":[41,248,255,170,175,202,80,127,41,255]},{"1191716":[208,3,130,215]},{"1191721":[226,32,169,128,143,110,243,126,194,48,162,128]},{"1191734":[165,26,41,12]},{"1191739":[74,74,240,58,201,1]},{"1191746":[240,98,201,2]},{"1191751":[208,3,130,180]},{"1191756":[191,15,254,13,41,255,239,143,70,199,126,191,17,254,13,41,255,239,143,134,199,126,191,19,254,13,41,255,239,143,198,199,126,191,21,254,13,41,255,239,143,6,200,126,107,191,15,254,13,41,255,231,143,70,199,126,191,17,254,13,41,255,231,143,134,199,126,191,19,254,13,41,255,231,143,198,199,126,191,21,254,13,41,255,231,143,6,200,126,107,191,15,254,13,41,255,235,143,70,199,126,191,17,254,13,41,255,235,143,134,199,126,191,19,254,13,41,255,235,143,198,199,126,191,21,254,13,41,255,235,143,6,200,126,107,191,15,254,13,41,255,227,143,70,199,126,191,17,254,13,41,255,227,143,134,199,126,191,19,254,13,41,255,227,143,198,199,126,191,21,254,13,41,255,227,143,6,200,126,107,191,15,254,13,143,70,199,126,191,17,254,13,143,134,199,126,191,19,254,13,143,198,199,126,191,21,254,13,143,6,200,126,107,160,144,201,232,3,144,6,200,233,232,3,128,245,132,4,160,144,201,100]},{"1191989":[144,6,200,233,100]},{"1191995":[128,245,132,5,160,144,201,10]},{"1192004":[144,6,200,233,10]},{"1192010":[128,245,132,6,160,144,201,1]},{"1192019":[144,4,200,58,208,252,132,7,96,160,144,201,100,144,5,200,233,100,128,247,132,5,160,144,201,10,144,5,200,233,10,128,247,132,6,160,144,201,1,144,4,200,58,208,252,132,7,96,160,144,201,10,144,5,200,233,10,128,247,132,6,160,144,201,1,144,4,200,58,208,252,132,7,96,166,27,208,1,107,174,12,4,224,255,208,1,107,201,2]},{"1192109":[240,11,175,100,243,126,63,222,176,164,208,1,107,124,250,176,32,131,176,194,32,166,6,138,9]},{"1192135":[36,143,148,199,126,166,7,138,9]},{"1192145":[36,143,150,199,126,169,48,40,143,152,199,126,107]},{"1192159":[128]},{"1192161":[64]},{"1192163":[32]},{"1192165":[16]},{"1192167":[8]},{"1192169":[4]},{"1192171":[2]},{"1192173":[1,128]},{"1192176":[64]},{"1192178":[32]},{"1192180":[16]},{"1192182":[8]},{"1192184":[4]},{"1192186":[22,177,22,177,49,177,74,177,102,177,127,177,152,177,177,177,202,177,229,177]},{"1192207":[178,27,178,52,178,79,178,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,52,244,126,74,74,74,74,76,189,176,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,54,244,126,41,7,76,189,176,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,53,244,126,74,74,74,74,74,76,189,176,169,144,36,143,154,199,126,169,146,36,143,156,199,126,226,32,175,53,244,126,41,2,76,189,176,169,145,36,143,154,199,126,169,144,36,143,156,199,126,226,32,175,57,244,126,41,15,76,189,176,169,145,36,143,154,199,126,169,148,36,143,156,199,126,226,32,175,52,244,126,41,15,76,189,176,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,56,244,126,41,15,76,189,176,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,55,244,126,74,74,74,74,76,189,176,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,56,244,126,74,74,74,74,76,189,176,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,53,244,126,41,28,74,74,76,189,176,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,55,244,126,41,15,76,189,176,169,145,36,143,154,199,126,169,146,36,143,156,199,126,226,32,175,57,244,126,74,74,74,74,76,189,176,169,146,36,143,154,199,126,169,151,36,143,156,199,126,226,32,175,54,244,126,74,74,74,76,189,176,107,159]},{"1192556":[4,112,159]},{"1192560":[5,112,159]},{"1192564":[6,112,159]},{"1192568":[7,112,159]},{"1192572":[8,112,159]},{"1192576":[9,112,159]},{"1192580":[10,112,159]},{"1192584":[11,112,159]},{"1192588":[12,112,159]},{"1192592":[13,112,159]},{"1192596":[14,112,159]},{"1192600":[15,112,107,159]},{"1192605":[244,126,159]},{"1192609":[101,127,159]},{"1192613":[102,127,159]},{"1192617":[103,127,159]},{"1192621":[104,127,159]},{"1192625":[105,127,159]},{"1192629":[106,127,159]},{"1192633":[107,127,159]},{"1192637":[108,127,159]},{"1192641":[109,127,159]},{"1192645":[110,127,159]},{"1192649":[111,127,107,72,226,48,173]},{"1192657":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169]},{"1192685":[141]},{"1192687":[67,169,128,141,1,67,169]},{"1192695":[141,129,33,169,101,141,130,33,169,127,141,131,33,156,2,67,169,5,141,3,67,169,112,141,4,67,169]},{"1192723":[141,5,67,169,11,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1192763":[67,194,48,104,143,13,192,126,107,72,139,226,48,169]},{"1192778":[72,171,173]},{"1192782":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141]},{"1192812":[67,141,1,67,169]},{"1192818":[141,129,33,169,101,141,130,33,169,127,141,131,33,156,2,67,169,5,141,3,67,169,112,141,4,67,169]},{"1192846":[141,5,67,169,11,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1192886":[67,194,48,171,104,162]},{"1192894":[138,107,165,17,34,156,135]},{"1192902":[213,179,164,237,179,164,12,180,164,13,181,164,35,181,164,169,128,141,16,7,34,61,137]},{"1192926":[34,51,131]},{"1192930":[34,151,148,164,169,7,133,20,230,17,107,32,44,182,100,200,100,201,34,53,181,164,208,11,162,15,169]},{"1192958":[159]},{"1192960":[16,112,202,16,249,169,15,133,19,230,17,107,139,75,171,32,156,182,165,246,41,16,240,3,32,232,183,165,246,41,32,240,3,32,245,183,165,244,41,1,240,17,165,201,26,201,36,144,3,56,233,36,133,201,169,32,141,47,1,165,244,41,2,240,15,165,201,58,16,3,24,105,36,133,201,169,32,141,47,1,165,244,41,4,240,19,165,201,24,105,9,201,36,144,3,56,233,36,133,201,169,32,141,47,1,165,244,41,8,240,17,165,201,56,233,9,16,3,24,105,36,133,201,169,32,141,47,1,165,244,5,246,41,192,240,77,166,201,191,233,180,164,16,43,201,240,208,4,230,17,128,69,201,241,208,5,32,245,183,128,52,201,242,208,5,32,232,183,128,43,201,243,208,11,230,17,230,17,169,44,141,46,1,128,36,128,26,166,200,159]},{"1193151":[16,112,138,26,41,15,133,200,208,7,156,46,1,230,17,128,13,169,43,141,46,1,165,244,41,16,240,2,230,17,32,154,183,32,79,183,169,1,133,20,171,107,1,2,3,4,5,6,7,8,240,9,10,11,12,13,14,15,16,241,17,18,19,20,21,22,23,24,242,25,26,27,28,29,30,31,32,243,34,53,181,164,208,8,169,60,141,46,1,198,17,107,169,27,141,47,1,230,17,107,169,1,133,16,169,1,133,17,100,176,156,157,11,100,200,100,201,107,218,90,162,15,191]},{"1193275":[16,112,208,3,130,161]},{"1193282":[202,16,244,194,32,162,14,169]},{"1193292":[159,208,80,127,202,202,16,248,32,232,181,175,186,128,48,143,218,80,127,175,188,128,48,143,220,80,127,175,190,128,48,143,222,80,127,175,192,128,48,143]},{"1193333":[81,127,175,194,128,48,143,2,81,127,175,196,128,48,143,4,81,127,175,198,128,48,143,6,81,127,169,2]},{"1193362":[133,4,34,137,178,160,226,32,175]},{"1193372":[81,127,201,49,208,65,175,1,81,127,201,65,208,57,175,2,81,127,201,89,208,49,175,3,81,127,201,38,208,41,175,4,81,127,201,83,208,33,175,5,81,127,201,88,208,25,175,6,81,127,201,151,208,17,175,7,81,127,201,147,208,9,122,250,169,1,143,158,80,127,107,122,250,169]},{"1193447":[107,169]},{"1193451":[133]},{"1193453":[133,2,169,11]},{"1193458":[133,4,166]},{"1193462":[191]},{"1193464":[16,112,58,41,31]},{"1193470":[164,4,240,4,10,136,128,250,235,166,2,31,208,80,127,159,208,80,127,165,4,56,233,5]},{"1193495":[16,6,24,105,8]},{"1193501":[230,2,133,4,165]},{"1193507":[26,133]},{"1193510":[201,16]},{"1193513":[144,201,96,173]},{"1193518":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169]},{"1193546":[141]},{"1193548":[67,169,128,141,1,67,169,2,141,129,33,169,16,141,130,33,169,126,141,131,33,169,196,141,2,67,169,185,141,3,67,169,164,141,4,67,169,98,141,5,67,169,1,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1193626":[67,96,194,32,165,200,41,255]},{"1193635":[10,170,191,231,182,164,24,105,132,96,235,143,2,17]},{"1193650":[165,201,41,255]},{"1193655":[10,170,191,7,183,164,24,105,163,97,235,143,18,17]},{"1193670":[235,24,105,32]},{"1193675":[235,143,30,17]},{"1193680":[235,24,105,3]},{"1193685":[235,143,38,17]},{"1193690":[235,24,105,61]},{"1193695":[235,143,46,17]},{"1193700":[226,32,96,64]},{"1193705":[67]},{"1193707":[70]},{"1193709":[73]},{"1193711":[76]},{"1193713":[79]},{"1193715":[82]},{"1193717":[85]},{"1193719":[160]},{"1193721":[163]},{"1193723":[166]},{"1193725":[169]},{"1193727":[172]},{"1193729":[175]},{"1193731":[178]},{"1193733":[181]},{"1193735":[223,255,226,255,229,255,232,255,235,255,238,255,241,255,244,255,247,255,63]},{"1193755":[66]},{"1193757":[69]},{"1193759":[72]},{"1193761":[75]},{"1193763":[78]},{"1193765":[81]},{"1193767":[84]},{"1193769":[87]},{"1193771":[159]},{"1193773":[162]},{"1193775":[165]},{"1193777":[168]},{"1193779":[171]},{"1193781":[174]},{"1193783":[177]},{"1193785":[180]},{"1193787":[183]},{"1193789":[255]},{"1193791":[2,1,5,1,8,1,11,1,14,1,17,1,20,1,23,1,194,32,165,200,41,255]},{"1193814":[10,170,191,231,182,164,24,105,132,96,235,143,10,17]},{"1193829":[165,201,41,255]},{"1193834":[10,170,191,7,183,164,24,105,163,97,235,143,58,17]},{"1193849":[235,24,105,32]},{"1193854":[235,143,70,17]},{"1193859":[235,24,105,3]},{"1193864":[235,143,78,17]},{"1193869":[235,24,105,61]},{"1193874":[235,143,86,17]},{"1193879":[226,32,96,194,48,162,15]},{"1193887":[191]},{"1193889":[16,112,41,255]},{"1193894":[155,10,10,10,133]},{"1193900":[152,10,10,10,10,133,3,166]},{"1193909":[191,230,151,164,166,3,157,6,16,166]},{"1193920":[191,232,151,164,166,3,157,8,16,166]},{"1193931":[191,234,151,164,166,3,157,14,16,166]},{"1193942":[191,236,151,164,166,3,157,16,16,187,202,48,2,128,186,226,48,96,169,43,141,46,1,165,200,26,41,15,133,200,96,169,43,141,46,1,165,200,58,41,15,133,200,96,97,163]},{"1193989":[51,1,10,2,10]},{"1193995":[2,5,14,6,14]},{"1194001":[2]},{"1194003":[6,21,6]},{"1194007":[2,12,14,13,14]},{"1194013":[2,98,6,99,6]},{"1194019":[2,10,2,11,2]},{"1194025":[2,32,14,33,14]},{"1194031":[2,133,26,134,26]},{"1194037":[2,171,30,171,30,97,195]},{"1194045":[51,17,10,18,10]},{"1194051":[2]},{"1194053":[30,22,14]},{"1194057":[2,48,6]},{"1194061":[30]},{"1194063":[2,28,14,28,78]},{"1194069":[2,114,6,115,6]},{"1194075":[2,26,2,27,2]},{"1194081":[2,48,14,49,14]},{"1194087":[2,149,26,150,26]},{"1194093":[2,171,30,171,30,98,3]},{"1194101":[51,7,10,23,202]},{"1194107":[2,8,10,24,202]},{"1194113":[2,9,10,25,202]},{"1194119":[2,44,6,44,70]},{"1194125":[2,34,2,35,2]},{"1194131":[2,36,2,37,2]},{"1194137":[2,38,14,39,14]},{"1194143":[2,40,10,41,10]},{"1194149":[2,138,29]},{"1194153":[2,98,35]},{"1194157":[51,23,10,7,202]},{"1194163":[2,24,10,8,202]},{"1194169":[2,25,10,9,202]},{"1194175":[2,60,6,61,6]},{"1194181":[2,50,2,51,2]},{"1194187":[2,52,2,53,2]},{"1194193":[2,54,14,55,14]},{"1194199":[2,56,10,57,10]},{"1194205":[2,154,29]},{"1194209":[2,98,99]},{"1194213":[51,42,26,43,26]},{"1194219":[2,64,30,65,30]},{"1194225":[2,66,26,66,90]},{"1194231":[2,29,6,30,6]},{"1194237":[2,72,6,73,6]},{"1194243":[2,74,14,75,14]},{"1194249":[2,76,22,77,22]},{"1194255":[2,78,2,79,2]},{"1194261":[2]},{"1194263":[2,139,29,98,131]},{"1194269":[51,58,26,59,26]},{"1194275":[2,80,30,81,30]},{"1194281":[2,82,26,83,26]},{"1194287":[2,45,6,46,6]},{"1194293":[2,88,6,89,6]},{"1194299":[2,90,14,91,14]},{"1194305":[2,92,22,93,22]},{"1194311":[2,94,2,95,2]},{"1194317":[2]},{"1194319":[2,155,29,98,195]},{"1194325":[51,14,14,15,14]},{"1194331":[2,100,6,101,6]},{"1194337":[2,109,10,110,10]},{"1194343":[2,111,26,111,90]},{"1194349":[2,129,6,129,70]},{"1194355":[2,130,10,131,10]},{"1194361":[2,132,6,132,70]},{"1194367":[2,47,74,47,10]},{"1194373":[2,103,94,103,30,98,227]},{"1194381":[51,31,78,31,14]},{"1194387":[2,116,6,117,6]},{"1194393":[2,125,10,126,10]},{"1194399":[2,127,26,127,90]},{"1194405":[2,145,6,145,70]},{"1194411":[2,146,10,147,10]},{"1194417":[2,148,6,148,70]},{"1194423":[2,62,10,63,10]},{"1194429":[2,103,222,103,158,255,255,96,132]},{"1194439":[3,134,29,134,29,96,164]},{"1194447":[3,150,29,150,29,96,135]},{"1194455":[3,134,29,134,29,96,167]},{"1194463":[3,150,29,150,29,96,138]},{"1194471":[3,134,29,134,29,96,170]},{"1194479":[3,150,29,150,29,96,141]},{"1194487":[3,134,29,134,29,96,173]},{"1194495":[3,150,29,150,29,96,144]},{"1194503":[3,134,29,134,29,96,176]},{"1194511":[3,150,29,150,29,96,147]},{"1194519":[3,134,29,134,29,96,179]},{"1194527":[3,150,29,150,29,96,150]},{"1194535":[3,134,29,134,29,96,182]},{"1194543":[3,150,29,150,29,96,153]},{"1194551":[3,134,29,134,29,96,185]},{"1194559":[3,150,29,150,29,96,228]},{"1194567":[3,134,29,134,29,97,4]},{"1194575":[3,150,29,150,29,96,231]},{"1194583":[3,134,29,134,29,97,7]},{"1194591":[3,150,29,150,29,96,234]},{"1194599":[3,134,29,134,29,97,10]},{"1194607":[3,150,29,150,29,96,237]},{"1194615":[3,134,29,134,29,97,13]},{"1194623":[3,150,29,150,29,96,240]},{"1194631":[3,134,29,134,29,97,16]},{"1194639":[3,150,29,150,29,96,243]},{"1194647":[3,134,29,134,29,97,19]},{"1194655":[3,150,29,150,29,96,246]},{"1194663":[3,134,29,134,29,97,22]},{"1194671":[3,150,29,150,29,96,249]},{"1194679":[3,134,29,134,29,97,25]},{"1194687":[3,150,29,150,29,96,196]},{"1194695":[3]},{"1194697":[2]},{"1194699":[2,96,196]},{"1194703":[3,103,222,103,158,97,130]},{"1194711":[7]},{"1194713":[2]},{"1194715":[2]},{"1194717":[2]},{"1194719":[2,97,162,128,3]},{"1194725":[2]},{"1194727":[2,97,165,128,3]},{"1194733":[2]},{"1194735":[2,97,226]},{"1194739":[7]},{"1194741":[2]},{"1194743":[2]},{"1194745":[2]},{"1194747":[2,97,130]},{"1194751":[7,187,26,188,26,188,90,187,90,97,162,128,3,189,26,189,154,97,165,128,3,189,90,189,218,97,226]},{"1194779":[7,187,154,188,154,188,218,187,218,255,255,165,160,201,240,208,2,128,33,201,241,208,2,128,27,201,176,208,2,128,21,201,208,208,2,128,15,192]},{"1194818":[240,11,169,133,157,210,12,169,4,157,80,14,107,169,128,157,210,12,169,1,157,80,14,107,72,175,67,244,126,208,34,175,46,244,126,56,239,63,80,127,201,30,144,21,175,46,244,126,143,63,80,127,175,32,244,126,26,201,100,240,4,143,32,244,126,104,34,223,147,9,107,72,175,67,244,126,208,19,165,16,201,23,208,13,175,45,244,126,26,201,100,240,4,143,45,244,126,104,107,72,175,67,244,126,208,9,175,45,244,126,58,143,45,244,126,104,107,191,31,195,1,128,71,34,61,137]},{"1194945":[175,130,129,48,41,2,240,32,173,14,1,201,123,208,25,175,142,243,126,41,64,240,17,175,64,243,126,240,11,201,3,176,7,24,105,2,143,64,243,126,128,25,34,97,184,2,128,19,175,199,80,127,240,9,34,179,145,7,169]},{"1195005":[141,1,3,169,15,133,16,72,8,175,67,244,126,208,16,194,32,175,60,244,126,26,201,231,3,240,4,143,60,244,126,40,104,107,175,67,244,126,208,9,175,75,244,126,26,143,75,244,126,34,4,188,164,107,143,111,243,126,218,175,67,244,126,208,4,34,149,192,160,34,15,156,160,90,160,24,34,251,184,160,122,34,120,250,13,250,107,143,111,243,126,218,175,67,244,126,208,4,34,149,192,160,34,15,156,160,165,27,240,23,8,194,32,173,142,4,201,135]},{"1195124":[208,11,40,90,160,24,34,251,184,160,122,128,1,40,34,120,250,13,250,107,143,111,243,126,34,15,156,160,107,72,175,67,244,126,208,4,34,35,193,160,104,107,72,175,67,244,126,208,15,175,109,243,126,208,9,175,73,244,126,26,143,73,244,126,104,107,159,92,243,126,72,175,67,244,126,208,9,175,83,244,126,26,143,83,244,126,104,107,169,1,141,233,2,72,175,67,244,126,208,9,175,66,244,126,26,143,66,244,126,104,107,72,175,67,244,126,208,9,175,66,244,126,58,143,66,244,126,104,107,72,175,67,244,126,208,9,175,35,244,126,58,143,35,244,126,104,107,34,97,184,2,72,175,67,244,126,208,31,72,218,175,39,244,126,26,41,15,170,175,39,244,126,41,240,143,39,244,126,138,15,39,244,126,143,39,244,126,250,104,104,107,72,175,67,244,126,208,15,175,202,243,126,240,9,175,58,244,126,26,143,58,244,126,104,76,4,188,72,175,67,244,126,208,20,173,12,4,201,255,240,13,175,59,244,126,26,143,59,244,126,34,4,188,164,104,34,168,160,2,107,58,16,8,169]},{"1195380":[143,96,243,126,107,72,8,175,67,244,126,41,255]},{"1195394":[208,14,175,43,244,126,26,201,15,39,240,4,143,43,244,126,40,104,107,76,4,188,169,1,143]},{"1195420":[80,127,156,70,6,156,66,6,76,4,188,72,218,8,226,48,175,67,244,126,208,29,26,143,67,244,126,34,35,193,160,175,36,244,126,24,105,64,143,36,244,126,175,60,244,126,58,143,60,244,126,175,37,244,126,74,74,74,74,24,111,37,244,126,143,55,80,127,175,38,244,126,74,74,74,74,24,111,38,244,126,24,111,55,80,127,41,15,143,55,80,127,175,62,244,126,56,239,46,244,126,143,56,80,127,175,63,244,126,239,47,244,126,143,57,80,127,175,64,244,126,239,48,244,126,143,58,80,127,175,65,244,126,239,49,244,126,143,59,80,127,175,43,244,126,24,111,98,243,126,143,60,80,127,175,44,244,126,111,99,243,126,143,61,80,127,175,35,244,126,56,239,66,244,126,143,62,80,127,40,250,104,169,25,133,16,100,17,100,176,107,175,127,83,127,240,2,56,107,169,1,143,127,83,127,175,1,83,127,143,160,244,126,175,2,83,127,143,161,244,126,175]},{"1195643":[83,127,201,3,208,30,175,8,83,127,170,175,9,83,127,159,46,1,126,194,48,175,10,83,127,170,175,12,83,127,34,174,191,164,226,48,169]},{"1195681":[143,127,83,127,24,107,175,255,83,127,240,2,56,107,169,1,143,255,83,127,165,123,143,129,83,127,165,27,143,130,83,127,165,160,143,131,83,127,165,161,143,132,83,127,165,118,143,133,83,127,169,1,143,128,83,127,169]},{"1195739":[143,255,83,127,24,107,175,255,83,127,240,2,56,107,169,1,143,255,83,127,165,123,143,129,83,127,165,27,143,130,83,127,165,160,143,131,83,127,165,161,143,132,83,127,165,118,143,133,83,127,169,2,143,128,83,127,169]},{"1195797":[143,255,83,127,24,107,165,138,201,27,240,4,92,205,240,5,139,75,171,169,7,157,80,15,32,57,191,34,231,244,30,32,121,191,171,107,169,2,133,6,100,7,189,192,13,10,10,10,10,105,89,133,8,169,191,105]},{"1195854":[133,9,34,117,223,5,34,92,220,6,96]},{"1195867":[247,255,198]},{"1195872":[2]},{"1195877":[200]},{"1195880":[2]},{"1195883":[248,255,198]},{"1195888":[2]},{"1195893":[202,64]},{"1195896":[2,175,103,129,48,240,6,175,148,129,48,208,4,158,208,13,96,169,150,160,1,34,124,128,162,144,14,175,24,244,126,207,103,129,48,144,4,34,131,219,160,165,26,74,74,74,74,74,41,1,157,192,13,96,90,8,172]},{"1195954":[84,34,11,153,160,40,122,107,110,41,97,41,95,41,97,41,101,41,114,41,97,41,96,41,127]},{"1195980":[98,41,110,41,107,41,105,41,127]},{"1195990":[111,41,97,41,106,41,112,41,127]},{"1196000":[112,41,107,41,127]},{"1196006":[72,218,8,226,16,174,64,67,218,174,65,67,218,174,66,67,218,174,67,67,218,174,68,67,218,174,69,67,218,174,70,67,218,174,21,33,218,174,22,33,218,174,23,33,218,174]},{"1196053":[33,218,162,128,142]},{"1196059":[33,194,32,162,128,142,21,33,169,64,99,141,22,33,169,88,192,141,66,67,162,126,142,68,67,169,64]},{"1196087":[141,69,67,169,1,24,141,64,67,162,16,142,11,66,250,142]},{"1196104":[33,250,142,23,33,250,142,22,33,250,142,21,33,250,142,70,67,250,142,69,67,250,142,68,67,250,142,67,67,250,142,66,67,250,142,65,67,250,142,64,67,40,250,104,107,8,175,210,244,126,208,9,175,154,192,126,208,3,130,150,1,165,16,201,7,240,11,201,9,240,7,201,11,240,3,130,133,1,175,154,192,126,240,42,58,143,154,192,126,201]},{"1196195":[208,33,8,194,48,162]},{"1196203":[224,64]},{"1196206":[176,11,169,127]},{"1196211":[159,88,192,126,232,232,128,240,40,169,1,143,69,80,127,143,68,80,127,165,93,201]},{"1196234":[240,11,201,4,240,7,201,23,240,3,130,68,1,175,210,244,126,208,3,130,59,1,72,169,34,160,4,34,55,245,28,16,4,104,130,44,1,104,174,12,4,201,160,208,14,224]},{"1196281":[240,7,224,2,240,3,130,137]},{"1196290":[130,132]},{"1196293":[201,162,208,6,224,4,240,124,128,124,201,163,208,6,224,6,240,114,128,114,201,170,208,6,224,20,240,104,128,104,201,164,208,6,224,8,240,94,128,94,201,166,208,6,224,12,240,84,128,84,201,165,208,6,224,10,240,74,128,74,201,168,208,6,224,16,240,64,128,64,201,171,208,6,224,22,240,54,128,54,201,169,208,6,224,18,240,44,128,44,201,167,208,6,224,14,240,34,128,34,201,172,208,6,224,24,240,24,128,24,201,173,208,6,224,26,240,14,128,14,201,146,208,10,224,26,208,6,169,50,128,2,169,36,141,216,2,168,169,1,143,87,192,126,169]},{"1196439":[143,152,192,126,156,233,2,34,179,145,7,34,157,153,7,169]},{"1196456":[143,210,244,126,143,87,192,126,218,90,8,194,48,162]},{"1196472":[224,28]},{"1196475":[176,12,191,186,191,164,159,88,192,126,232,232,128,239,160,28]},{"1196492":[175,211,244,126,41,255]},{"1196499":[58,201,64]},{"1196503":[176,63,10,10,10,10,10,170,192,60]},{"1196514":[176,17,191,128,227,48,218,187,159,88,192,126,250,232,232,200,200,128,234,187,224,64]},{"1196537":[176,11,169,127]},{"1196542":[159,88,192,126,232,232,128,240,226,32,169,1,143,69,80,127,143,68,80,127,169,120,143,154,192,126,40,122,250,40,165,93,10,170,107,8,226,32,191,66,225,48,143,152,192,126,40,191,110,233,1,107,72,8,226,32,175,57,227,48,143,152,192,126,40,104,34,157,153,7,107,72,8,226,32,175,89,227,48,143,152,192,126,40,104,34,157,153,7,107,72,8,226,32,175,104,227,48,143,152,192,126,40,104,34,157,153,7,107,72,8,226,32,175,105,227,48,143,152,192,126,40,104,34,157,153,7,107,152,141,228,2,218,175,152,192,126,240,125,90,172,216,2,34,8,185,160,122,218,90,8,194,48,162]},{"1196698":[224,16]},{"1196701":[176,12,191,214,191,164,159,88,192,126,232,232,128,239,160,16]},{"1196718":[175,152,192,126,41,255]},{"1196725":[58,201,64]},{"1196729":[176,63,10,10,10,10,10,170,192,48]},{"1196740":[176,17,191,128,227,48,218,187,159,88,192,126,250,232,232,200,200,128,234,187,224,64]},{"1196763":[176,11,169,127]},{"1196768":[159,88,192,126,232,232,128,240,226,32,169,1,143,69,80,127,143,68,80,127,169,120,143,154,192,126,40,122,250,169,51,141,47,1,92,102,135,9,92,10,134,9,201,40,208,10,175,152,192,126,208,4,92,76,197,8,92,96,197,8,165,138,41,64,240,46,173,74,12,201,34,240,39,173,75,12,201,34,240,32,173,76,12,201,34,240,25,173,77,12,201,34,240,18,173,78,12,201,34,240,11,173,79,12,201,34,240,4,92,72,156,9,92,57,156,9]},{"1343488":[107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107]},{"1540096":[144,43,128,183,162,225,201,79,28,185,230,32,88,103,101,166,17,207,121,76,199,97,209,212,211,155,120,59,251,170,163,21,124,54,215,139,11,173,38,181,59,105,227,131,127,17,226,146,128,103,225,156,207,213,69,245,107,54,182,122,26,57,132,19,71,236,216,174,87,158,244,11,97,187,141,10,77,98,142,34,227,114,197,113,247,153,11,16,177,19,82,94,120,67,116,143,55,105,7,154,37,14,48,106,3,158,142,15,119,146,56,51,137,93,51,179,1,161,191,105,141,151,39,108,76,155,168,24,153,126,178,219,167,68,39,168,165,188,245,170,238,46,202,161,254,193,254,73,173,59,202,66,243,108,217,113,25,3,123,227,169,134,108,208,162,43,251,25,217,219,71,136,122,32,31,213,62,199,63,127,135,212,144,156,209,235,249,120,17,47,185,155,119,1,128,223,57,23,35,155,98,227,166,83,60,220,249,201,52,204,61,71,47,158,28,37,238,132,158,69,184,36,1,170,227,178,181,147,5,161,8,9,56,25,214,247,166,44,245,29,77,231,59,45,27,188,134,64,216,235,117,242,139,234,140,212,183,241,166,179,99,107,130,146,218,145,93,51,253,102,50,146,200,42,194,16,131,73,27,185,48,120,170,214,2,170,146,33,230,4]},{"1540387":[240,238,64,63,94,110,23,136,169,167,112,206,202,226,65,161,34,7,36,247,200,224,86,80,224,133,246,98,129,67,225,183,107,126,158,14,34,45,243,86,73,115,204,178,67,27,89,64,94,118,169,213,246,134,48,242,46,64,225,119,216,41,243,184,63,195,132,25,229,141,113,140,32,169,116,43,59,48,58,131,225,184,61,251,72,239,125,69,219,119,182,106,224,187,88,85,180,197,106,162,54,174,194,173,175,102,130,171,249,15,217,88,149,101,152,220,153,71,226,113,205,111,162,249,93,43,191,103,106,232,147,56,23,192,122,216,116,19,45,148,123,101,81,109,254,5,250,30,179,60,202,4,222,231]},{"1540542":[151,126,164,77,47,114,162,79,143,169,63,102,56,32,61,212,170,165,119,171,243,200,190,54,240,175,20,87,3,57,31,219,169,240,40,5,31,230,40,181,210,118,26,164,186,124,191,127,176,40,39,145,211,52,67,71,170,93,3,119,244,131,207,55,85,8,79,141,109,163,10,107,53,226,201,118,208,65,196,73,75,171,63,214,126,4,219,253,24,129,140,23,92,62,52,23,116,19,242,252,14,58,239,226,214,118,8,99,3,39,200,9,69,193,134,107,50,247,243,56,57,128,255,131,226,117,111,137,136,166,115,119,243,36,233,30,225,178,224,24,243,143,216,34,203,234,142,242,30,194,133,68,40,54,200,154,180,122,160,154,18,217,151,55,29,167,87,161,247,39,171,141,171,84,78,52,148,153,130,157,249,29,40,228,114,206,213,115,217,170,241,235,124,138,10,85,228,189,132,54,4,78,231,157,64,105,15,219,226,227,6,8,126,19,91,118,166,68,214,121,132,42,16,112,55,207,8,254,225,117,248,26,74,100,151,213,127,226,252,202,239,186,255,43,179,20,204,112,62,154,51,219,53,105,53,155,224,182,146,65,147,192,93,180,131,212,15,12,215,246,101,237,47,18,118,194,218,212,67,187,128,231,17,169,70,124,193,102,32,23,117,197,9,112,69,23,156,67,102,233,78,76,2,223,78,61,3,236,73,210,146,24,223,246,83,103,156,177,75,148,120,46,248,249,74,16,233,192,184,141,168,226,68,179,62,78,99,198,74,242,95,50,53,212,28,71,56,155,219,168,241,75,17,156,99,158,114,32,173,29,68,69,234,179,160,176,138,148,184,9,53,59,139,96,47,197,70,237,208,51,141,151,37,205,192,222,116,178,241,8,236,90,104,234,60,98,70,233,126,132,255,115,54,124,133,62,154,181,206,188,87,120,83,82,10,60,136,160,228,66,172,232,62,93,236,130,250,111,168,211,201,102,154,221,245,93,234,115,57,6,53,12,115,243,220,108,224,156,234,15,168,216,93,240,139,106,228,37,186,12,12,229,119,2,153,178,105,167,236,217,75,255,238,236,226,10,22,48,211,149,171,247,26,61,247,215,6,121,176,110,87,62,185,199,182,102,5,149,153,207,1,108,98,244,132,212,112,59,224,86,102,164,188,28,143,218,59,151,25,235,64,193,195,250,177,23,93,138,36,222,61,119,85,218,159,153,123,68,114,104,67,51,114,130,168,9,246,196,211,159]},{"1541093":[63,247,66,174,232,46,160,187,48,55,94,226,231,16,35,51,9,237,162]},{"1541113":[112,204,35,248,130,224,246]},{"1541122":[30]},{"1541124":[60]},{"1541126":[90]},{"1541128":[120]},{"1541130":[150]},{"1541132":[180]},{"1541134":[210]},{"1541136":[240]},{"1541138":[14,1,44,1,74,1,104,1,134,1,164,1,194,1,224,1,254,1,28,2,58,2,88,2,118,2,148,2,178,2,208,2,238,2,12,3,42,3,72,3,102,3,132,3,162,3,192,3,222,3,252,3,26,4,56,4,86,4,116,4,146,4,176,4,206,4,236,4,10,5,40,5,70,5,100,5,130,5,160,5,190,5,220,5,250,5,24,6,54,6,84,6,114,6,144,6,174,6,204,6,234,6,8,7,38,7,68,7,98,7,128,7,158,7,188,7,218,7,248,7,22,8,52,8,82,8,112,8,142,8,172,8,202,8,232,8,6,9,36,9,66,9,96,9,126,9,156,9,186,9,216,9,246,9,20,10,50,10,80,10,110,10,140,10,170,10,200,10,230,10,4,11,34,11,64,11,94,11,124,11,154,11,184,11,214,11,244,11,18,12,48,12,78,12,108,12,138,12,168,12,198,12,228,12,2,13,32,13,62,13,92,13,122,13,152,13,182,13,212,13,242,13,16,14,46,14,76,14,106,14,136,14,166,14,196,14,226,14]},{"1541377":[15,30,15,60,15,90,15,120,15,150,15,180,15,210,15,240,15,14,16,44,16,74,16,104,16,134,16,164,16,194,16,224,16,254,16,28,17,58,17,88,17,118,17,148,17,178,17,208,17,238,17,12,18,42,18,72,18,102,18,132,18,162,18,192,18,222,18,252,18,26,19,56,19,86,19,116,19,146,19,176,19,206,19,236,19,10,20,40,20,70,20,100,20,130,20,160,20,190,20,220,20,250,20,24,21,54,21,84,21,114,21,144,21,174,21,204,21,234,21,8,22,38,22,68,22,98,22,128,22,158,22,188,22,218,22,248,22,22,23,52,23,82,23,112,23,142,23,172,23,202,23,232,23,6,24,36,24,66,24,96,24,126,24,156,24,186,24,216,24,246,24,20,25,50,25,80,25,110,25,140,25,170,25,200,25,230,25,4,26,34,26,64,26,94,26,124,26,154,26,184,26,214,26,244,26,18,27,48,27,78,27,108,27,138,27,168,27,198,27,228,27,2,28,32,28,62,28,92,28,122,28,152,28,182,28,212,28,242,28,16,29,46,29,76,29,106,29,136,29,166,29,196,29,226,29]},{"1541633":[30,30,30,60,30,90,30,120,30,150,30,180,30,210,30,240,30,14,31,44,31,74,31,104,31,134,31,164,31,194,31,224,31,254,31,28,32,58,32,88,32,118,32,148,32,178,32,208,32,238,32,12,33,42,33,72,33,102,33,132,33,162,33,192,33,222,33,252,33,26,34,56,34,86,34,116,34,146,34,176,34,206,34,236,34,10,35,40,35,70,35,100,35,130,35,160,35,190,35,220,35,250,35,24,36,54,36,84,36,114,36,144,36,174,36,204,36,234,36,8,37,38,37,68,37,98,37,128,37,158,37,188,37,218,37,248,37,22,38,52,38,82,38,112,38,142,38,172,38,202,38,232,38,6,39,36,39,66,39,96,39,126,39,156,39,186,39,216,39,246,39,20,40,50,40,80,40,110,40,140,40,170,40,200,40,230,40,4,41,34,41,64,41,94,41,124,41,154,41,184,41,214,41,244,41,18,42,48,42,78,42,108,42,138,42,168,42,198,42,228,42,2,43,32,43,62,43,92,43,122,43,152,43,182,43,212,43,242,43,16,44,46,44,76,44,106,44,136,44,166,44,196,44,226,44]},{"1541889":[45,30,45,60,45,90,45,120,45,150,45,180,45,210,45,240,45,14,46,44,46,74,46,104,46,134,46,164,46,194,46,224,46,254,46,28,47,58,47,88,47,118,47,148,47,178,47,208,47,238,47,12,48,42,48,72,48,102,48,132,48,162,48,192,48,222,48,252,48,26,49,56,49,86,49,116,49,146,49,176,49,206,49,236,49,10,50,40,50,70,50,100,50,130,50,160,50,190,50,220,50,250,50,24,51,54,51,84,51,114,51,144,51,174,51,204,51,234,51,8,52,38,52,68,52,98,52,128,52,158,52,188,52,218,52,248,52,22,53,52,53,82,53,112,53,142,53,172,53,202,53,232,53,6,54,36,54,66,54,96,54,126,54,156,54,186,54,216,54,246,54,20,55,50,55,80,55,110,55,140,55,170,55,200,55,230,55,4,56,34,56,64,56,94,56,124,56,154,56,184,56,214,56,244,56,18,57,48,57,78,57,108,57,138,57,168,57,198,57,228,57,2,58,32,58,62,58,92,58,122,58,152,58,182,58,212,58,242,58,16,59,46,59,76,59,106,59,136,59,166,59,196,59,226,59,117]},{"1542146":[255]},{"1542148":[255]},{"1542150":[255]},{"1542152":[185]},{"1542154":[181]},{"1542156":[170]},{"1542158":[194]},{"1542160":[174]},{"1542162":[187]},{"1542164":[255]},{"1542166":[161]},{"1542168":[255]},{"1542170":[255]},{"1542172":[255,127,117]},{"1542176":[255]},{"1542178":[255]},{"1542180":[255]},{"1542182":[185]},{"1542184":[181]},{"1542186":[170]},{"1542188":[194]},{"1542190":[174]},{"1542192":[187]},{"1542194":[255]},{"1542196":[162]},{"1542198":[255]},{"1542200":[255]},{"1542202":[255,127,117]},{"1542206":[255]},{"1542208":[255]},{"1542210":[255]},{"1542212":[185]},{"1542214":[181]},{"1542216":[170]},{"1542218":[194]},{"1542220":[174]},{"1542222":[187]},{"1542224":[255]},{"1542226":[163]},{"1542228":[255]},{"1542230":[255]},{"1542232":[255,127,117]},{"1542236":[255]},{"1542238":[255]},{"1542240":[255]},{"1542242":[185]},{"1542244":[181]},{"1542246":[170]},{"1542248":[194]},{"1542250":[174]},{"1542252":[187]},{"1542254":[255]},{"1542256":[164]},{"1542258":[255]},{"1542260":[255]},{"1542262":[255,127,117]},{"1542266":[255]},{"1542268":[255]},{"1542270":[255]},{"1542272":[185]},{"1542274":[181]},{"1542276":[170]},{"1542278":[194]},{"1542280":[174]},{"1542282":[187]},{"1542284":[255]},{"1542286":[165]},{"1542288":[255]},{"1542290":[255]},{"1542292":[255,127,117]},{"1542296":[255]},{"1542298":[255]},{"1542300":[255]},{"1542302":[185]},{"1542304":[181]},{"1542306":[170]},{"1542308":[194]},{"1542310":[174]},{"1542312":[187]},{"1542314":[255]},{"1542316":[166]},{"1542318":[255]},{"1542320":[255]},{"1542322":[255,127,117]},{"1542326":[255]},{"1542328":[255]},{"1542330":[255]},{"1542332":[185]},{"1542334":[181]},{"1542336":[170]},{"1542338":[194]},{"1542340":[174]},{"1542342":[187]},{"1542344":[255]},{"1542346":[167]},{"1542348":[255]},{"1542350":[255]},{"1542352":[255,127,117]},{"1542356":[255]},{"1542358":[255]},{"1542360":[255]},{"1542362":[185]},{"1542364":[181]},{"1542366":[170]},{"1542368":[194]},{"1542370":[174]},{"1542372":[187]},{"1542374":[255]},{"1542376":[168]},{"1542378":[255]},{"1542380":[255]},{"1542382":[255,127,117]},{"1542386":[255]},{"1542388":[255]},{"1542390":[255]},{"1542392":[185]},{"1542394":[181]},{"1542396":[170]},{"1542398":[194]},{"1542400":[174]},{"1542402":[187]},{"1542404":[255]},{"1542406":[169]},{"1542408":[255]},{"1542410":[255]},{"1542412":[255,127,117]},{"1542416":[255]},{"1542418":[255]},{"1542420":[185]},{"1542422":[181]},{"1542424":[170]},{"1542426":[194]},{"1542428":[174]},{"1542430":[187]},{"1542432":[255]},{"1542434":[161]},{"1542436":[160]},{"1542438":[255]},{"1542440":[255]},{"1542442":[255,127,117]},{"1542446":[255]},{"1542448":[255]},{"1542450":[185]},{"1542452":[181]},{"1542454":[170]},{"1542456":[194]},{"1542458":[174]},{"1542460":[187]},{"1542462":[255]},{"1542464":[161]},{"1542466":[161]},{"1542468":[255]},{"1542470":[255]},{"1542472":[255,127,117]},{"1542476":[255]},{"1542478":[255]},{"1542480":[185]},{"1542482":[181]},{"1542484":[170]},{"1542486":[194]},{"1542488":[174]},{"1542490":[187]},{"1542492":[255]},{"1542494":[161]},{"1542496":[162]},{"1542498":[255]},{"1542500":[255]},{"1542502":[255,127,117]},{"1542506":[255]},{"1542508":[255]},{"1542510":[185]},{"1542512":[181]},{"1542514":[170]},{"1542516":[194]},{"1542518":[174]},{"1542520":[187]},{"1542522":[255]},{"1542524":[161]},{"1542526":[163]},{"1542528":[255]},{"1542530":[255]},{"1542532":[255,127,117]},{"1542536":[255]},{"1542538":[255]},{"1542540":[185]},{"1542542":[181]},{"1542544":[170]},{"1542546":[194]},{"1542548":[174]},{"1542550":[187]},{"1542552":[255]},{"1542554":[161]},{"1542556":[164]},{"1542558":[255]},{"1542560":[255]},{"1542562":[255,127,117]},{"1542566":[255]},{"1542568":[255]},{"1542570":[185]},{"1542572":[181]},{"1542574":[170]},{"1542576":[194]},{"1542578":[174]},{"1542580":[187]},{"1542582":[255]},{"1542584":[161]},{"1542586":[165]},{"1542588":[255]},{"1542590":[255]},{"1542592":[255,127,117]},{"1542596":[255]},{"1542598":[255]},{"1542600":[185]},{"1542602":[181]},{"1542604":[170]},{"1542606":[194]},{"1542608":[174]},{"1542610":[187]},{"1542612":[255]},{"1542614":[161]},{"1542616":[166]},{"1542618":[255]},{"1542620":[255]},{"1542622":[255,127,117]},{"1542626":[255]},{"1542628":[255]},{"1542630":[185]},{"1542632":[181]},{"1542634":[170]},{"1542636":[194]},{"1542638":[174]},{"1542640":[187]},{"1542642":[255]},{"1542644":[161]},{"1542646":[167]},{"1542648":[255]},{"1542650":[255]},{"1542652":[255,127,117]},{"1542656":[255]},{"1542658":[255]},{"1542660":[185]},{"1542662":[181]},{"1542664":[170]},{"1542666":[194]},{"1542668":[174]},{"1542670":[187]},{"1542672":[255]},{"1542674":[161]},{"1542676":[168]},{"1542678":[255]},{"1542680":[255]},{"1542682":[255,127,117]},{"1542686":[255]},{"1542688":[255]},{"1542690":[185]},{"1542692":[181]},{"1542694":[170]},{"1542696":[194]},{"1542698":[174]},{"1542700":[187]},{"1542702":[255]},{"1542704":[161]},{"1542706":[169]},{"1542708":[255]},{"1542710":[255]},{"1542712":[255,127,117]},{"1542716":[255]},{"1542718":[255]},{"1542720":[185]},{"1542722":[181]},{"1542724":[170]},{"1542726":[194]},{"1542728":[174]},{"1542730":[187]},{"1542732":[255]},{"1542734":[162]},{"1542736":[160]},{"1542738":[255]},{"1542740":[255]},{"1542742":[255,127,117]},{"1542746":[255]},{"1542748":[255]},{"1542750":[185]},{"1542752":[181]},{"1542754":[170]},{"1542756":[194]},{"1542758":[174]},{"1542760":[187]},{"1542762":[255]},{"1542764":[162]},{"1542766":[161]},{"1542768":[255]},{"1542770":[255]},{"1542772":[255,127,117]},{"1542776":[255]},{"1542778":[255]},{"1542780":[185]},{"1542782":[181]},{"1542784":[170]},{"1542786":[194]},{"1542788":[174]},{"1542790":[187]},{"1542792":[255]},{"1542794":[162]},{"1542796":[162]},{"1542798":[255]},{"1542800":[255]},{"1542802":[255,127,117]},{"1542806":[255]},{"1542808":[255]},{"1542810":[185]},{"1542812":[181]},{"1542814":[170]},{"1542816":[194]},{"1542818":[174]},{"1542820":[187]},{"1542822":[255]},{"1542824":[162]},{"1542826":[163]},{"1542828":[255]},{"1542830":[255]},{"1542832":[255,127,117]},{"1542836":[255]},{"1542838":[255]},{"1542840":[185]},{"1542842":[181]},{"1542844":[170]},{"1542846":[194]},{"1542848":[174]},{"1542850":[187]},{"1542852":[255]},{"1542854":[162]},{"1542856":[164]},{"1542858":[255]},{"1542860":[255]},{"1542862":[255,127,117]},{"1542866":[255]},{"1542868":[255]},{"1542870":[185]},{"1542872":[181]},{"1542874":[170]},{"1542876":[194]},{"1542878":[174]},{"1542880":[187]},{"1542882":[255]},{"1542884":[162]},{"1542886":[165]},{"1542888":[255]},{"1542890":[255]},{"1542892":[255,127,117]},{"1542896":[255]},{"1542898":[255]},{"1542900":[185]},{"1542902":[181]},{"1542904":[170]},{"1542906":[194]},{"1542908":[174]},{"1542910":[187]},{"1542912":[255]},{"1542914":[162]},{"1542916":[166]},{"1542918":[255]},{"1542920":[255]},{"1542922":[255,127,117]},{"1542926":[255]},{"1542928":[255]},{"1542930":[185]},{"1542932":[181]},{"1542934":[170]},{"1542936":[194]},{"1542938":[174]},{"1542940":[187]},{"1542942":[255]},{"1542944":[162]},{"1542946":[167]},{"1542948":[255]},{"1542950":[255]},{"1542952":[255,127,117]},{"1542956":[255]},{"1542958":[255]},{"1542960":[185]},{"1542962":[181]},{"1542964":[170]},{"1542966":[194]},{"1542968":[174]},{"1542970":[187]},{"1542972":[255]},{"1542974":[162]},{"1542976":[168]},{"1542978":[255]},{"1542980":[255]},{"1542982":[255,127,117]},{"1542986":[255]},{"1542988":[255]},{"1542990":[185]},{"1542992":[181]},{"1542994":[170]},{"1542996":[194]},{"1542998":[174]},{"1543000":[187]},{"1543002":[255]},{"1543004":[162]},{"1543006":[169]},{"1543008":[255]},{"1543010":[255]},{"1543012":[255,127,117]},{"1543016":[255]},{"1543018":[255]},{"1543020":[185]},{"1543022":[181]},{"1543024":[170]},{"1543026":[194]},{"1543028":[174]},{"1543030":[187]},{"1543032":[255]},{"1543034":[163]},{"1543036":[160]},{"1543038":[255]},{"1543040":[255]},{"1543042":[255,127,117]},{"1543046":[255]},{"1543048":[255]},{"1543050":[185]},{"1543052":[181]},{"1543054":[170]},{"1543056":[194]},{"1543058":[174]},{"1543060":[187]},{"1543062":[255]},{"1543064":[163]},{"1543066":[161]},{"1543068":[255]},{"1543070":[255]},{"1543072":[255,127,117]},{"1543076":[255]},{"1543078":[255]},{"1543080":[185]},{"1543082":[181]},{"1543084":[170]},{"1543086":[194]},{"1543088":[174]},{"1543090":[187]},{"1543092":[255]},{"1543094":[163]},{"1543096":[162]},{"1543098":[255]},{"1543100":[255]},{"1543102":[255,127,117]},{"1543106":[255]},{"1543108":[255]},{"1543110":[185]},{"1543112":[181]},{"1543114":[170]},{"1543116":[194]},{"1543118":[174]},{"1543120":[187]},{"1543122":[255]},{"1543124":[163]},{"1543126":[163]},{"1543128":[255]},{"1543130":[255]},{"1543132":[255,127,117]},{"1543136":[255]},{"1543138":[255]},{"1543140":[185]},{"1543142":[181]},{"1543144":[170]},{"1543146":[194]},{"1543148":[174]},{"1543150":[187]},{"1543152":[255]},{"1543154":[163]},{"1543156":[164]},{"1543158":[255]},{"1543160":[255]},{"1543162":[255,127,117]},{"1543166":[255]},{"1543168":[255]},{"1543170":[185]},{"1543172":[181]},{"1543174":[170]},{"1543176":[194]},{"1543178":[174]},{"1543180":[187]},{"1543182":[255]},{"1543184":[163]},{"1543186":[165]},{"1543188":[255]},{"1543190":[255]},{"1543192":[255,127,117]},{"1543196":[255]},{"1543198":[255]},{"1543200":[185]},{"1543202":[181]},{"1543204":[170]},{"1543206":[194]},{"1543208":[174]},{"1543210":[187]},{"1543212":[255]},{"1543214":[163]},{"1543216":[166]},{"1543218":[255]},{"1543220":[255]},{"1543222":[255,127,117]},{"1543226":[255]},{"1543228":[255]},{"1543230":[185]},{"1543232":[181]},{"1543234":[170]},{"1543236":[194]},{"1543238":[174]},{"1543240":[187]},{"1543242":[255]},{"1543244":[163]},{"1543246":[167]},{"1543248":[255]},{"1543250":[255]},{"1543252":[255,127,117]},{"1543256":[255]},{"1543258":[255]},{"1543260":[185]},{"1543262":[181]},{"1543264":[170]},{"1543266":[194]},{"1543268":[174]},{"1543270":[187]},{"1543272":[255]},{"1543274":[163]},{"1543276":[168]},{"1543278":[255]},{"1543280":[255]},{"1543282":[255,127,117]},{"1543286":[255]},{"1543288":[255]},{"1543290":[185]},{"1543292":[181]},{"1543294":[170]},{"1543296":[194]},{"1543298":[174]},{"1543300":[187]},{"1543302":[255]},{"1543304":[163]},{"1543306":[169]},{"1543308":[255]},{"1543310":[255]},{"1543312":[255,127,117]},{"1543316":[255]},{"1543318":[255]},{"1543320":[185]},{"1543322":[181]},{"1543324":[170]},{"1543326":[194]},{"1543328":[174]},{"1543330":[187]},{"1543332":[255]},{"1543334":[164]},{"1543336":[160]},{"1543338":[255]},{"1543340":[255]},{"1543342":[255,127,117]},{"1543346":[255]},{"1543348":[255]},{"1543350":[185]},{"1543352":[181]},{"1543354":[170]},{"1543356":[194]},{"1543358":[174]},{"1543360":[187]},{"1543362":[255]},{"1543364":[164]},{"1543366":[161]},{"1543368":[255]},{"1543370":[255]},{"1543372":[255,127,117]},{"1543376":[255]},{"1543378":[255]},{"1543380":[185]},{"1543382":[181]},{"1543384":[170]},{"1543386":[194]},{"1543388":[174]},{"1543390":[187]},{"1543392":[255]},{"1543394":[164]},{"1543396":[162]},{"1543398":[255]},{"1543400":[255]},{"1543402":[255,127,117]},{"1543406":[255]},{"1543408":[255]},{"1543410":[185]},{"1543412":[181]},{"1543414":[170]},{"1543416":[194]},{"1543418":[174]},{"1543420":[187]},{"1543422":[255]},{"1543424":[164]},{"1543426":[163]},{"1543428":[255]},{"1543430":[255]},{"1543432":[255,127,117]},{"1543436":[255]},{"1543438":[255]},{"1543440":[185]},{"1543442":[181]},{"1543444":[170]},{"1543446":[194]},{"1543448":[174]},{"1543450":[187]},{"1543452":[255]},{"1543454":[164]},{"1543456":[164]},{"1543458":[255]},{"1543460":[255]},{"1543462":[255,127,117]},{"1543466":[255]},{"1543468":[255]},{"1543470":[185]},{"1543472":[181]},{"1543474":[170]},{"1543476":[194]},{"1543478":[174]},{"1543480":[187]},{"1543482":[255]},{"1543484":[164]},{"1543486":[165]},{"1543488":[255]},{"1543490":[255]},{"1543492":[255,127,117]},{"1543496":[255]},{"1543498":[255]},{"1543500":[185]},{"1543502":[181]},{"1543504":[170]},{"1543506":[194]},{"1543508":[174]},{"1543510":[187]},{"1543512":[255]},{"1543514":[164]},{"1543516":[166]},{"1543518":[255]},{"1543520":[255]},{"1543522":[255,127,117]},{"1543526":[255]},{"1543528":[255]},{"1543530":[185]},{"1543532":[181]},{"1543534":[170]},{"1543536":[194]},{"1543538":[174]},{"1543540":[187]},{"1543542":[255]},{"1543544":[164]},{"1543546":[167]},{"1543548":[255]},{"1543550":[255]},{"1543552":[255,127,117]},{"1543556":[255]},{"1543558":[255]},{"1543560":[185]},{"1543562":[181]},{"1543564":[170]},{"1543566":[194]},{"1543568":[174]},{"1543570":[187]},{"1543572":[255]},{"1543574":[164]},{"1543576":[168]},{"1543578":[255]},{"1543580":[255]},{"1543582":[255,127,117]},{"1543586":[255]},{"1543588":[255]},{"1543590":[185]},{"1543592":[181]},{"1543594":[170]},{"1543596":[194]},{"1543598":[174]},{"1543600":[187]},{"1543602":[255]},{"1543604":[164]},{"1543606":[169]},{"1543608":[255]},{"1543610":[255]},{"1543612":[255,127,117]},{"1543616":[255]},{"1543618":[255]},{"1543620":[185]},{"1543622":[181]},{"1543624":[170]},{"1543626":[194]},{"1543628":[174]},{"1543630":[187]},{"1543632":[255]},{"1543634":[165]},{"1543636":[160]},{"1543638":[255]},{"1543640":[255]},{"1543642":[255,127,117]},{"1543646":[255]},{"1543648":[255]},{"1543650":[185]},{"1543652":[181]},{"1543654":[170]},{"1543656":[194]},{"1543658":[174]},{"1543660":[187]},{"1543662":[255]},{"1543664":[165]},{"1543666":[161]},{"1543668":[255]},{"1543670":[255]},{"1543672":[255,127,117]},{"1543676":[255]},{"1543678":[255]},{"1543680":[185]},{"1543682":[181]},{"1543684":[170]},{"1543686":[194]},{"1543688":[174]},{"1543690":[187]},{"1543692":[255]},{"1543694":[165]},{"1543696":[162]},{"1543698":[255]},{"1543700":[255]},{"1543702":[255,127,117]},{"1543706":[255]},{"1543708":[255]},{"1543710":[185]},{"1543712":[181]},{"1543714":[170]},{"1543716":[194]},{"1543718":[174]},{"1543720":[187]},{"1543722":[255]},{"1543724":[165]},{"1543726":[163]},{"1543728":[255]},{"1543730":[255]},{"1543732":[255,127,117]},{"1543736":[255]},{"1543738":[255]},{"1543740":[185]},{"1543742":[181]},{"1543744":[170]},{"1543746":[194]},{"1543748":[174]},{"1543750":[187]},{"1543752":[255]},{"1543754":[165]},{"1543756":[164]},{"1543758":[255]},{"1543760":[255]},{"1543762":[255,127,117]},{"1543766":[255]},{"1543768":[255]},{"1543770":[185]},{"1543772":[181]},{"1543774":[170]},{"1543776":[194]},{"1543778":[174]},{"1543780":[187]},{"1543782":[255]},{"1543784":[165]},{"1543786":[165]},{"1543788":[255]},{"1543790":[255]},{"1543792":[255,127,117]},{"1543796":[255]},{"1543798":[255]},{"1543800":[185]},{"1543802":[181]},{"1543804":[170]},{"1543806":[194]},{"1543808":[174]},{"1543810":[187]},{"1543812":[255]},{"1543814":[165]},{"1543816":[166]},{"1543818":[255]},{"1543820":[255]},{"1543822":[255,127,117]},{"1543826":[255]},{"1543828":[255]},{"1543830":[185]},{"1543832":[181]},{"1543834":[170]},{"1543836":[194]},{"1543838":[174]},{"1543840":[187]},{"1543842":[255]},{"1543844":[165]},{"1543846":[167]},{"1543848":[255]},{"1543850":[255]},{"1543852":[255,127,117]},{"1543856":[255]},{"1543858":[255]},{"1543860":[185]},{"1543862":[181]},{"1543864":[170]},{"1543866":[194]},{"1543868":[174]},{"1543870":[187]},{"1543872":[255]},{"1543874":[165]},{"1543876":[168]},{"1543878":[255]},{"1543880":[255]},{"1543882":[255,127,117]},{"1543886":[255]},{"1543888":[255]},{"1543890":[185]},{"1543892":[181]},{"1543894":[170]},{"1543896":[194]},{"1543898":[174]},{"1543900":[187]},{"1543902":[255]},{"1543904":[165]},{"1543906":[169]},{"1543908":[255]},{"1543910":[255]},{"1543912":[255,127,117]},{"1543916":[255]},{"1543918":[255]},{"1543920":[185]},{"1543922":[181]},{"1543924":[170]},{"1543926":[194]},{"1543928":[174]},{"1543930":[187]},{"1543932":[255]},{"1543934":[166]},{"1543936":[160]},{"1543938":[255]},{"1543940":[255]},{"1543942":[255,127,117]},{"1543946":[255]},{"1543948":[255]},{"1543950":[185]},{"1543952":[181]},{"1543954":[170]},{"1543956":[194]},{"1543958":[174]},{"1543960":[187]},{"1543962":[255]},{"1543964":[166]},{"1543966":[161]},{"1543968":[255]},{"1543970":[255]},{"1543972":[255,127,117]},{"1543976":[255]},{"1543978":[255]},{"1543980":[185]},{"1543982":[181]},{"1543984":[170]},{"1543986":[194]},{"1543988":[174]},{"1543990":[187]},{"1543992":[255]},{"1543994":[166]},{"1543996":[162]},{"1543998":[255]},{"1544000":[255]},{"1544002":[255,127,117]},{"1544006":[255]},{"1544008":[255]},{"1544010":[185]},{"1544012":[181]},{"1544014":[170]},{"1544016":[194]},{"1544018":[174]},{"1544020":[187]},{"1544022":[255]},{"1544024":[166]},{"1544026":[163]},{"1544028":[255]},{"1544030":[255]},{"1544032":[255,127,117]},{"1544036":[255]},{"1544038":[255]},{"1544040":[185]},{"1544042":[181]},{"1544044":[170]},{"1544046":[194]},{"1544048":[174]},{"1544050":[187]},{"1544052":[255]},{"1544054":[166]},{"1544056":[164]},{"1544058":[255]},{"1544060":[255]},{"1544062":[255,127,117]},{"1544066":[255]},{"1544068":[255]},{"1544070":[185]},{"1544072":[181]},{"1544074":[170]},{"1544076":[194]},{"1544078":[174]},{"1544080":[187]},{"1544082":[255]},{"1544084":[166]},{"1544086":[165]},{"1544088":[255]},{"1544090":[255]},{"1544092":[255,127,117]},{"1544096":[255]},{"1544098":[255]},{"1544100":[185]},{"1544102":[181]},{"1544104":[170]},{"1544106":[194]},{"1544108":[174]},{"1544110":[187]},{"1544112":[255]},{"1544114":[166]},{"1544116":[166]},{"1544118":[255]},{"1544120":[255]},{"1544122":[255,127,117]},{"1544126":[255]},{"1544128":[255]},{"1544130":[185]},{"1544132":[181]},{"1544134":[170]},{"1544136":[194]},{"1544138":[174]},{"1544140":[187]},{"1544142":[255]},{"1544144":[166]},{"1544146":[167]},{"1544148":[255]},{"1544150":[255]},{"1544152":[255,127,117]},{"1544156":[255]},{"1544158":[255]},{"1544160":[185]},{"1544162":[181]},{"1544164":[170]},{"1544166":[194]},{"1544168":[174]},{"1544170":[187]},{"1544172":[255]},{"1544174":[166]},{"1544176":[168]},{"1544178":[255]},{"1544180":[255]},{"1544182":[255,127,117]},{"1544186":[255]},{"1544188":[255]},{"1544190":[185]},{"1544192":[181]},{"1544194":[170]},{"1544196":[194]},{"1544198":[174]},{"1544200":[187]},{"1544202":[255]},{"1544204":[166]},{"1544206":[169]},{"1544208":[255]},{"1544210":[255]},{"1544212":[255,127,117]},{"1544216":[255]},{"1544218":[255]},{"1544220":[185]},{"1544222":[181]},{"1544224":[170]},{"1544226":[194]},{"1544228":[174]},{"1544230":[187]},{"1544232":[255]},{"1544234":[167]},{"1544236":[160]},{"1544238":[255]},{"1544240":[255]},{"1544242":[255,127,117]},{"1544246":[255]},{"1544248":[255]},{"1544250":[185]},{"1544252":[181]},{"1544254":[170]},{"1544256":[194]},{"1544258":[174]},{"1544260":[187]},{"1544262":[255]},{"1544264":[167]},{"1544266":[161]},{"1544268":[255]},{"1544270":[255]},{"1544272":[255,127,117]},{"1544276":[255]},{"1544278":[255]},{"1544280":[185]},{"1544282":[181]},{"1544284":[170]},{"1544286":[194]},{"1544288":[174]},{"1544290":[187]},{"1544292":[255]},{"1544294":[167]},{"1544296":[162]},{"1544298":[255]},{"1544300":[255]},{"1544302":[255,127,117]},{"1544306":[255]},{"1544308":[255]},{"1544310":[185]},{"1544312":[181]},{"1544314":[170]},{"1544316":[194]},{"1544318":[174]},{"1544320":[187]},{"1544322":[255]},{"1544324":[167]},{"1544326":[163]},{"1544328":[255]},{"1544330":[255]},{"1544332":[255,127,117]},{"1544336":[255]},{"1544338":[255]},{"1544340":[185]},{"1544342":[181]},{"1544344":[170]},{"1544346":[194]},{"1544348":[174]},{"1544350":[187]},{"1544352":[255]},{"1544354":[167]},{"1544356":[164]},{"1544358":[255]},{"1544360":[255]},{"1544362":[255,127,117]},{"1544366":[255]},{"1544368":[255]},{"1544370":[185]},{"1544372":[181]},{"1544374":[170]},{"1544376":[194]},{"1544378":[174]},{"1544380":[187]},{"1544382":[255]},{"1544384":[167]},{"1544386":[165]},{"1544388":[255]},{"1544390":[255]},{"1544392":[255,127,117]},{"1544396":[255]},{"1544398":[255]},{"1544400":[185]},{"1544402":[181]},{"1544404":[170]},{"1544406":[194]},{"1544408":[174]},{"1544410":[187]},{"1544412":[255]},{"1544414":[167]},{"1544416":[166]},{"1544418":[255]},{"1544420":[255]},{"1544422":[255,127,117]},{"1544426":[255]},{"1544428":[255]},{"1544430":[185]},{"1544432":[181]},{"1544434":[170]},{"1544436":[194]},{"1544438":[174]},{"1544440":[187]},{"1544442":[255]},{"1544444":[167]},{"1544446":[167]},{"1544448":[255]},{"1544450":[255]},{"1544452":[255,127,117]},{"1544456":[255]},{"1544458":[255]},{"1544460":[185]},{"1544462":[181]},{"1544464":[170]},{"1544466":[194]},{"1544468":[174]},{"1544470":[187]},{"1544472":[255]},{"1544474":[167]},{"1544476":[168]},{"1544478":[255]},{"1544480":[255]},{"1544482":[255,127,117]},{"1544486":[255]},{"1544488":[255]},{"1544490":[185]},{"1544492":[181]},{"1544494":[170]},{"1544496":[194]},{"1544498":[174]},{"1544500":[187]},{"1544502":[255]},{"1544504":[167]},{"1544506":[169]},{"1544508":[255]},{"1544510":[255]},{"1544512":[255,127,117]},{"1544516":[255]},{"1544518":[255]},{"1544520":[185]},{"1544522":[181]},{"1544524":[170]},{"1544526":[194]},{"1544528":[174]},{"1544530":[187]},{"1544532":[255]},{"1544534":[168]},{"1544536":[160]},{"1544538":[255]},{"1544540":[255]},{"1544542":[255,127,117]},{"1544546":[255]},{"1544548":[255]},{"1544550":[185]},{"1544552":[181]},{"1544554":[170]},{"1544556":[194]},{"1544558":[174]},{"1544560":[187]},{"1544562":[255]},{"1544564":[168]},{"1544566":[161]},{"1544568":[255]},{"1544570":[255]},{"1544572":[255,127,117]},{"1544576":[255]},{"1544578":[255]},{"1544580":[185]},{"1544582":[181]},{"1544584":[170]},{"1544586":[194]},{"1544588":[174]},{"1544590":[187]},{"1544592":[255]},{"1544594":[168]},{"1544596":[162]},{"1544598":[255]},{"1544600":[255]},{"1544602":[255,127,117]},{"1544606":[255]},{"1544608":[255]},{"1544610":[185]},{"1544612":[181]},{"1544614":[170]},{"1544616":[194]},{"1544618":[174]},{"1544620":[187]},{"1544622":[255]},{"1544624":[168]},{"1544626":[163]},{"1544628":[255]},{"1544630":[255]},{"1544632":[255,127,117]},{"1544636":[255]},{"1544638":[255]},{"1544640":[185]},{"1544642":[181]},{"1544644":[170]},{"1544646":[194]},{"1544648":[174]},{"1544650":[187]},{"1544652":[255]},{"1544654":[168]},{"1544656":[164]},{"1544658":[255]},{"1544660":[255]},{"1544662":[255,127,117]},{"1544666":[255]},{"1544668":[255]},{"1544670":[185]},{"1544672":[181]},{"1544674":[170]},{"1544676":[194]},{"1544678":[174]},{"1544680":[187]},{"1544682":[255]},{"1544684":[168]},{"1544686":[165]},{"1544688":[255]},{"1544690":[255]},{"1544692":[255,127,117]},{"1544696":[255]},{"1544698":[255]},{"1544700":[185]},{"1544702":[181]},{"1544704":[170]},{"1544706":[194]},{"1544708":[174]},{"1544710":[187]},{"1544712":[255]},{"1544714":[168]},{"1544716":[166]},{"1544718":[255]},{"1544720":[255]},{"1544722":[255,127,117]},{"1544726":[255]},{"1544728":[255]},{"1544730":[185]},{"1544732":[181]},{"1544734":[170]},{"1544736":[194]},{"1544738":[174]},{"1544740":[187]},{"1544742":[255]},{"1544744":[168]},{"1544746":[167]},{"1544748":[255]},{"1544750":[255]},{"1544752":[255,127,117]},{"1544756":[255]},{"1544758":[255]},{"1544760":[185]},{"1544762":[181]},{"1544764":[170]},{"1544766":[194]},{"1544768":[174]},{"1544770":[187]},{"1544772":[255]},{"1544774":[168]},{"1544776":[168]},{"1544778":[255]},{"1544780":[255]},{"1544782":[255,127,117]},{"1544786":[255]},{"1544788":[255]},{"1544790":[185]},{"1544792":[181]},{"1544794":[170]},{"1544796":[194]},{"1544798":[174]},{"1544800":[187]},{"1544802":[255]},{"1544804":[168]},{"1544806":[169]},{"1544808":[255]},{"1544810":[255]},{"1544812":[255,127,117]},{"1544816":[255]},{"1544818":[255]},{"1544820":[185]},{"1544822":[181]},{"1544824":[170]},{"1544826":[194]},{"1544828":[174]},{"1544830":[187]},{"1544832":[255]},{"1544834":[169]},{"1544836":[160]},{"1544838":[255]},{"1544840":[255]},{"1544842":[255,127,117]},{"1544846":[255]},{"1544848":[255]},{"1544850":[185]},{"1544852":[181]},{"1544854":[170]},{"1544856":[194]},{"1544858":[174]},{"1544860":[187]},{"1544862":[255]},{"1544864":[169]},{"1544866":[161]},{"1544868":[255]},{"1544870":[255]},{"1544872":[255,127,117]},{"1544876":[255]},{"1544878":[255]},{"1544880":[185]},{"1544882":[181]},{"1544884":[170]},{"1544886":[194]},{"1544888":[174]},{"1544890":[187]},{"1544892":[255]},{"1544894":[169]},{"1544896":[162]},{"1544898":[255]},{"1544900":[255]},{"1544902":[255,127,117]},{"1544906":[255]},{"1544908":[255]},{"1544910":[185]},{"1544912":[181]},{"1544914":[170]},{"1544916":[194]},{"1544918":[174]},{"1544920":[187]},{"1544922":[255]},{"1544924":[169]},{"1544926":[163]},{"1544928":[255]},{"1544930":[255]},{"1544932":[255,127,117]},{"1544936":[255]},{"1544938":[255]},{"1544940":[185]},{"1544942":[181]},{"1544944":[170]},{"1544946":[194]},{"1544948":[174]},{"1544950":[187]},{"1544952":[255]},{"1544954":[169]},{"1544956":[164]},{"1544958":[255]},{"1544960":[255]},{"1544962":[255,127,117]},{"1544966":[255]},{"1544968":[255]},{"1544970":[185]},{"1544972":[181]},{"1544974":[170]},{"1544976":[194]},{"1544978":[174]},{"1544980":[187]},{"1544982":[255]},{"1544984":[169]},{"1544986":[165]},{"1544988":[255]},{"1544990":[255]},{"1544992":[255,127,117]},{"1544996":[255]},{"1544998":[255]},{"1545000":[185]},{"1545002":[181]},{"1545004":[170]},{"1545006":[194]},{"1545008":[174]},{"1545010":[187]},{"1545012":[255]},{"1545014":[169]},{"1545016":[166]},{"1545018":[255]},{"1545020":[255]},{"1545022":[255,127,117]},{"1545026":[255]},{"1545028":[255]},{"1545030":[185]},{"1545032":[181]},{"1545034":[170]},{"1545036":[194]},{"1545038":[174]},{"1545040":[187]},{"1545042":[255]},{"1545044":[169]},{"1545046":[167]},{"1545048":[255]},{"1545050":[255]},{"1545052":[255,127,117]},{"1545056":[255]},{"1545058":[255]},{"1545060":[185]},{"1545062":[181]},{"1545064":[170]},{"1545066":[194]},{"1545068":[174]},{"1545070":[187]},{"1545072":[255]},{"1545074":[169]},{"1545076":[168]},{"1545078":[255]},{"1545080":[255]},{"1545082":[255,127,117]},{"1545086":[255]},{"1545088":[255]},{"1545090":[185]},{"1545092":[181]},{"1545094":[170]},{"1545096":[194]},{"1545098":[174]},{"1545100":[187]},{"1545102":[255]},{"1545104":[169]},{"1545106":[169]},{"1545108":[255]},{"1545110":[255]},{"1545112":[255,127,117]},{"1545116":[255]},{"1545118":[255]},{"1545120":[185]},{"1545122":[181]},{"1545124":[170]},{"1545126":[194]},{"1545128":[174]},{"1545130":[187]},{"1545132":[255]},{"1545134":[161]},{"1545136":[160]},{"1545138":[160]},{"1545140":[255]},{"1545142":[255,127,117]},{"1545146":[255]},{"1545148":[255]},{"1545150":[185]},{"1545152":[181]},{"1545154":[170]},{"1545156":[194]},{"1545158":[174]},{"1545160":[187]},{"1545162":[255]},{"1545164":[161]},{"1545166":[160]},{"1545168":[161]},{"1545170":[255]},{"1545172":[255,127,117]},{"1545176":[255]},{"1545178":[255]},{"1545180":[185]},{"1545182":[181]},{"1545184":[170]},{"1545186":[194]},{"1545188":[174]},{"1545190":[187]},{"1545192":[255]},{"1545194":[161]},{"1545196":[160]},{"1545198":[162]},{"1545200":[255]},{"1545202":[255,127,117]},{"1545206":[255]},{"1545208":[255]},{"1545210":[185]},{"1545212":[181]},{"1545214":[170]},{"1545216":[194]},{"1545218":[174]},{"1545220":[187]},{"1545222":[255]},{"1545224":[161]},{"1545226":[160]},{"1545228":[163]},{"1545230":[255]},{"1545232":[255,127,117]},{"1545236":[255]},{"1545238":[255]},{"1545240":[185]},{"1545242":[181]},{"1545244":[170]},{"1545246":[194]},{"1545248":[174]},{"1545250":[187]},{"1545252":[255]},{"1545254":[161]},{"1545256":[160]},{"1545258":[164]},{"1545260":[255]},{"1545262":[255,127,117]},{"1545266":[255]},{"1545268":[255]},{"1545270":[185]},{"1545272":[181]},{"1545274":[170]},{"1545276":[194]},{"1545278":[174]},{"1545280":[187]},{"1545282":[255]},{"1545284":[161]},{"1545286":[160]},{"1545288":[165]},{"1545290":[255]},{"1545292":[255,127,117]},{"1545296":[255]},{"1545298":[255]},{"1545300":[185]},{"1545302":[181]},{"1545304":[170]},{"1545306":[194]},{"1545308":[174]},{"1545310":[187]},{"1545312":[255]},{"1545314":[161]},{"1545316":[160]},{"1545318":[166]},{"1545320":[255]},{"1545322":[255,127,117]},{"1545326":[255]},{"1545328":[255]},{"1545330":[185]},{"1545332":[181]},{"1545334":[170]},{"1545336":[194]},{"1545338":[174]},{"1545340":[187]},{"1545342":[255]},{"1545344":[161]},{"1545346":[160]},{"1545348":[167]},{"1545350":[255]},{"1545352":[255,127,117]},{"1545356":[255]},{"1545358":[255]},{"1545360":[185]},{"1545362":[181]},{"1545364":[170]},{"1545366":[194]},{"1545368":[174]},{"1545370":[187]},{"1545372":[255]},{"1545374":[161]},{"1545376":[160]},{"1545378":[168]},{"1545380":[255]},{"1545382":[255,127,117]},{"1545386":[255]},{"1545388":[255]},{"1545390":[185]},{"1545392":[181]},{"1545394":[170]},{"1545396":[194]},{"1545398":[174]},{"1545400":[187]},{"1545402":[255]},{"1545404":[161]},{"1545406":[160]},{"1545408":[169]},{"1545410":[255]},{"1545412":[255,127,117]},{"1545416":[255]},{"1545418":[255]},{"1545420":[185]},{"1545422":[181]},{"1545424":[170]},{"1545426":[194]},{"1545428":[174]},{"1545430":[187]},{"1545432":[255]},{"1545434":[161]},{"1545436":[161]},{"1545438":[160]},{"1545440":[255]},{"1545442":[255,127,117]},{"1545446":[255]},{"1545448":[255]},{"1545450":[185]},{"1545452":[181]},{"1545454":[170]},{"1545456":[194]},{"1545458":[174]},{"1545460":[187]},{"1545462":[255]},{"1545464":[161]},{"1545466":[161]},{"1545468":[161]},{"1545470":[255]},{"1545472":[255,127,117]},{"1545476":[255]},{"1545478":[255]},{"1545480":[185]},{"1545482":[181]},{"1545484":[170]},{"1545486":[194]},{"1545488":[174]},{"1545490":[187]},{"1545492":[255]},{"1545494":[161]},{"1545496":[161]},{"1545498":[162]},{"1545500":[255]},{"1545502":[255,127,117]},{"1545506":[255]},{"1545508":[255]},{"1545510":[185]},{"1545512":[181]},{"1545514":[170]},{"1545516":[194]},{"1545518":[174]},{"1545520":[187]},{"1545522":[255]},{"1545524":[161]},{"1545526":[161]},{"1545528":[163]},{"1545530":[255]},{"1545532":[255,127,117]},{"1545536":[255]},{"1545538":[255]},{"1545540":[185]},{"1545542":[181]},{"1545544":[170]},{"1545546":[194]},{"1545548":[174]},{"1545550":[187]},{"1545552":[255]},{"1545554":[161]},{"1545556":[161]},{"1545558":[164]},{"1545560":[255]},{"1545562":[255,127,117]},{"1545566":[255]},{"1545568":[255]},{"1545570":[185]},{"1545572":[181]},{"1545574":[170]},{"1545576":[194]},{"1545578":[174]},{"1545580":[187]},{"1545582":[255]},{"1545584":[161]},{"1545586":[161]},{"1545588":[165]},{"1545590":[255]},{"1545592":[255,127,117]},{"1545596":[255]},{"1545598":[255]},{"1545600":[185]},{"1545602":[181]},{"1545604":[170]},{"1545606":[194]},{"1545608":[174]},{"1545610":[187]},{"1545612":[255]},{"1545614":[161]},{"1545616":[161]},{"1545618":[166]},{"1545620":[255]},{"1545622":[255,127,117]},{"1545626":[255]},{"1545628":[255]},{"1545630":[185]},{"1545632":[181]},{"1545634":[170]},{"1545636":[194]},{"1545638":[174]},{"1545640":[187]},{"1545642":[255]},{"1545644":[161]},{"1545646":[161]},{"1545648":[167]},{"1545650":[255]},{"1545652":[255,127,117]},{"1545656":[255]},{"1545658":[255]},{"1545660":[185]},{"1545662":[181]},{"1545664":[170]},{"1545666":[194]},{"1545668":[174]},{"1545670":[187]},{"1545672":[255]},{"1545674":[161]},{"1545676":[161]},{"1545678":[168]},{"1545680":[255]},{"1545682":[255,127,117]},{"1545686":[255]},{"1545688":[255]},{"1545690":[185]},{"1545692":[181]},{"1545694":[170]},{"1545696":[194]},{"1545698":[174]},{"1545700":[187]},{"1545702":[255]},{"1545704":[161]},{"1545706":[161]},{"1545708":[169]},{"1545710":[255]},{"1545712":[255,127,117]},{"1545716":[255]},{"1545718":[255]},{"1545720":[185]},{"1545722":[181]},{"1545724":[170]},{"1545726":[194]},{"1545728":[174]},{"1545730":[187]},{"1545732":[255]},{"1545734":[161]},{"1545736":[162]},{"1545738":[160]},{"1545740":[255]},{"1545742":[255,127,117]},{"1545746":[255]},{"1545748":[255]},{"1545750":[185]},{"1545752":[181]},{"1545754":[170]},{"1545756":[194]},{"1545758":[174]},{"1545760":[187]},{"1545762":[255]},{"1545764":[161]},{"1545766":[162]},{"1545768":[161]},{"1545770":[255]},{"1545772":[255,127,117]},{"1545776":[255]},{"1545778":[255]},{"1545780":[185]},{"1545782":[181]},{"1545784":[170]},{"1545786":[194]},{"1545788":[174]},{"1545790":[187]},{"1545792":[255]},{"1545794":[161]},{"1545796":[162]},{"1545798":[162]},{"1545800":[255]},{"1545802":[255,127,117]},{"1545806":[255]},{"1545808":[255]},{"1545810":[185]},{"1545812":[181]},{"1545814":[170]},{"1545816":[194]},{"1545818":[174]},{"1545820":[187]},{"1545822":[255]},{"1545824":[161]},{"1545826":[162]},{"1545828":[163]},{"1545830":[255]},{"1545832":[255,127,117]},{"1545836":[255]},{"1545838":[255]},{"1545840":[185]},{"1545842":[181]},{"1545844":[170]},{"1545846":[194]},{"1545848":[174]},{"1545850":[187]},{"1545852":[255]},{"1545854":[161]},{"1545856":[162]},{"1545858":[164]},{"1545860":[255]},{"1545862":[255,127,117]},{"1545866":[255]},{"1545868":[255]},{"1545870":[185]},{"1545872":[181]},{"1545874":[170]},{"1545876":[194]},{"1545878":[174]},{"1545880":[187]},{"1545882":[255]},{"1545884":[161]},{"1545886":[162]},{"1545888":[165]},{"1545890":[255]},{"1545892":[255,127,117]},{"1545896":[255]},{"1545898":[255]},{"1545900":[185]},{"1545902":[181]},{"1545904":[170]},{"1545906":[194]},{"1545908":[174]},{"1545910":[187]},{"1545912":[255]},{"1545914":[161]},{"1545916":[162]},{"1545918":[166]},{"1545920":[255]},{"1545922":[255,127,117]},{"1545926":[255]},{"1545928":[255]},{"1545930":[185]},{"1545932":[181]},{"1545934":[170]},{"1545936":[194]},{"1545938":[174]},{"1545940":[187]},{"1545942":[255]},{"1545944":[161]},{"1545946":[162]},{"1545948":[167]},{"1545950":[255]},{"1545952":[255,127,117]},{"1545956":[255]},{"1545958":[255]},{"1545960":[185]},{"1545962":[181]},{"1545964":[170]},{"1545966":[194]},{"1545968":[174]},{"1545970":[187]},{"1545972":[255]},{"1545974":[161]},{"1545976":[162]},{"1545978":[168]},{"1545980":[255]},{"1545982":[255,127,117]},{"1545986":[255]},{"1545988":[255]},{"1545990":[185]},{"1545992":[181]},{"1545994":[170]},{"1545996":[194]},{"1545998":[174]},{"1546000":[187]},{"1546002":[255]},{"1546004":[161]},{"1546006":[162]},{"1546008":[169]},{"1546010":[255]},{"1546012":[255,127,117]},{"1546016":[255]},{"1546018":[255]},{"1546020":[185]},{"1546022":[181]},{"1546024":[170]},{"1546026":[194]},{"1546028":[174]},{"1546030":[187]},{"1546032":[255]},{"1546034":[161]},{"1546036":[163]},{"1546038":[160]},{"1546040":[255]},{"1546042":[255,127,117]},{"1546046":[255]},{"1546048":[255]},{"1546050":[185]},{"1546052":[181]},{"1546054":[170]},{"1546056":[194]},{"1546058":[174]},{"1546060":[187]},{"1546062":[255]},{"1546064":[161]},{"1546066":[163]},{"1546068":[161]},{"1546070":[255]},{"1546072":[255,127,117]},{"1546076":[255]},{"1546078":[255]},{"1546080":[185]},{"1546082":[181]},{"1546084":[170]},{"1546086":[194]},{"1546088":[174]},{"1546090":[187]},{"1546092":[255]},{"1546094":[161]},{"1546096":[163]},{"1546098":[162]},{"1546100":[255]},{"1546102":[255,127,117]},{"1546106":[255]},{"1546108":[255]},{"1546110":[185]},{"1546112":[181]},{"1546114":[170]},{"1546116":[194]},{"1546118":[174]},{"1546120":[187]},{"1546122":[255]},{"1546124":[161]},{"1546126":[163]},{"1546128":[163]},{"1546130":[255]},{"1546132":[255,127,117]},{"1546136":[255]},{"1546138":[255]},{"1546140":[185]},{"1546142":[181]},{"1546144":[170]},{"1546146":[194]},{"1546148":[174]},{"1546150":[187]},{"1546152":[255]},{"1546154":[161]},{"1546156":[163]},{"1546158":[164]},{"1546160":[255]},{"1546162":[255,127,117]},{"1546166":[255]},{"1546168":[255]},{"1546170":[185]},{"1546172":[181]},{"1546174":[170]},{"1546176":[194]},{"1546178":[174]},{"1546180":[187]},{"1546182":[255]},{"1546184":[161]},{"1546186":[163]},{"1546188":[165]},{"1546190":[255]},{"1546192":[255,127,117]},{"1546196":[255]},{"1546198":[255]},{"1546200":[185]},{"1546202":[181]},{"1546204":[170]},{"1546206":[194]},{"1546208":[174]},{"1546210":[187]},{"1546212":[255]},{"1546214":[161]},{"1546216":[163]},{"1546218":[166]},{"1546220":[255]},{"1546222":[255,127,117]},{"1546226":[255]},{"1546228":[255]},{"1546230":[185]},{"1546232":[181]},{"1546234":[170]},{"1546236":[194]},{"1546238":[174]},{"1546240":[187]},{"1546242":[255]},{"1546244":[161]},{"1546246":[163]},{"1546248":[167]},{"1546250":[255]},{"1546252":[255,127,117]},{"1546256":[255]},{"1546258":[255]},{"1546260":[185]},{"1546262":[181]},{"1546264":[170]},{"1546266":[194]},{"1546268":[174]},{"1546270":[187]},{"1546272":[255]},{"1546274":[161]},{"1546276":[163]},{"1546278":[168]},{"1546280":[255]},{"1546282":[255,127,117]},{"1546286":[255]},{"1546288":[255]},{"1546290":[185]},{"1546292":[181]},{"1546294":[170]},{"1546296":[194]},{"1546298":[174]},{"1546300":[187]},{"1546302":[255]},{"1546304":[161]},{"1546306":[163]},{"1546308":[169]},{"1546310":[255]},{"1546312":[255,127,117]},{"1546316":[255]},{"1546318":[255]},{"1546320":[185]},{"1546322":[181]},{"1546324":[170]},{"1546326":[194]},{"1546328":[174]},{"1546330":[187]},{"1546332":[255]},{"1546334":[161]},{"1546336":[164]},{"1546338":[160]},{"1546340":[255]},{"1546342":[255,127,117]},{"1546346":[255]},{"1546348":[255]},{"1546350":[185]},{"1546352":[181]},{"1546354":[170]},{"1546356":[194]},{"1546358":[174]},{"1546360":[187]},{"1546362":[255]},{"1546364":[161]},{"1546366":[164]},{"1546368":[161]},{"1546370":[255]},{"1546372":[255,127,117]},{"1546376":[255]},{"1546378":[255]},{"1546380":[185]},{"1546382":[181]},{"1546384":[170]},{"1546386":[194]},{"1546388":[174]},{"1546390":[187]},{"1546392":[255]},{"1546394":[161]},{"1546396":[164]},{"1546398":[162]},{"1546400":[255]},{"1546402":[255,127,117]},{"1546406":[255]},{"1546408":[255]},{"1546410":[185]},{"1546412":[181]},{"1546414":[170]},{"1546416":[194]},{"1546418":[174]},{"1546420":[187]},{"1546422":[255]},{"1546424":[161]},{"1546426":[164]},{"1546428":[163]},{"1546430":[255]},{"1546432":[255,127,117]},{"1546436":[255]},{"1546438":[255]},{"1546440":[185]},{"1546442":[181]},{"1546444":[170]},{"1546446":[194]},{"1546448":[174]},{"1546450":[187]},{"1546452":[255]},{"1546454":[161]},{"1546456":[164]},{"1546458":[164]},{"1546460":[255]},{"1546462":[255,127,117]},{"1546466":[255]},{"1546468":[255]},{"1546470":[185]},{"1546472":[181]},{"1546474":[170]},{"1546476":[194]},{"1546478":[174]},{"1546480":[187]},{"1546482":[255]},{"1546484":[161]},{"1546486":[164]},{"1546488":[165]},{"1546490":[255]},{"1546492":[255,127,117]},{"1546496":[255]},{"1546498":[255]},{"1546500":[185]},{"1546502":[181]},{"1546504":[170]},{"1546506":[194]},{"1546508":[174]},{"1546510":[187]},{"1546512":[255]},{"1546514":[161]},{"1546516":[164]},{"1546518":[166]},{"1546520":[255]},{"1546522":[255,127,117]},{"1546526":[255]},{"1546528":[255]},{"1546530":[185]},{"1546532":[181]},{"1546534":[170]},{"1546536":[194]},{"1546538":[174]},{"1546540":[187]},{"1546542":[255]},{"1546544":[161]},{"1546546":[164]},{"1546548":[167]},{"1546550":[255]},{"1546552":[255,127,117]},{"1546556":[255]},{"1546558":[255]},{"1546560":[185]},{"1546562":[181]},{"1546564":[170]},{"1546566":[194]},{"1546568":[174]},{"1546570":[187]},{"1546572":[255]},{"1546574":[161]},{"1546576":[164]},{"1546578":[168]},{"1546580":[255]},{"1546582":[255,127,117]},{"1546586":[255]},{"1546588":[255]},{"1546590":[185]},{"1546592":[181]},{"1546594":[170]},{"1546596":[194]},{"1546598":[174]},{"1546600":[187]},{"1546602":[255]},{"1546604":[161]},{"1546606":[164]},{"1546608":[169]},{"1546610":[255]},{"1546612":[255,127,117]},{"1546616":[255]},{"1546618":[255]},{"1546620":[185]},{"1546622":[181]},{"1546624":[170]},{"1546626":[194]},{"1546628":[174]},{"1546630":[187]},{"1546632":[255]},{"1546634":[161]},{"1546636":[165]},{"1546638":[160]},{"1546640":[255]},{"1546642":[255,127,117]},{"1546646":[255]},{"1546648":[255]},{"1546650":[185]},{"1546652":[181]},{"1546654":[170]},{"1546656":[194]},{"1546658":[174]},{"1546660":[187]},{"1546662":[255]},{"1546664":[161]},{"1546666":[165]},{"1546668":[161]},{"1546670":[255]},{"1546672":[255,127,117]},{"1546676":[255]},{"1546678":[255]},{"1546680":[185]},{"1546682":[181]},{"1546684":[170]},{"1546686":[194]},{"1546688":[174]},{"1546690":[187]},{"1546692":[255]},{"1546694":[161]},{"1546696":[165]},{"1546698":[162]},{"1546700":[255]},{"1546702":[255,127,117]},{"1546706":[255]},{"1546708":[255]},{"1546710":[185]},{"1546712":[181]},{"1546714":[170]},{"1546716":[194]},{"1546718":[174]},{"1546720":[187]},{"1546722":[255]},{"1546724":[161]},{"1546726":[165]},{"1546728":[163]},{"1546730":[255]},{"1546732":[255,127,117]},{"1546736":[255]},{"1546738":[255]},{"1546740":[185]},{"1546742":[181]},{"1546744":[170]},{"1546746":[194]},{"1546748":[174]},{"1546750":[187]},{"1546752":[255]},{"1546754":[161]},{"1546756":[165]},{"1546758":[164]},{"1546760":[255]},{"1546762":[255,127,117]},{"1546766":[255]},{"1546768":[255]},{"1546770":[185]},{"1546772":[181]},{"1546774":[170]},{"1546776":[194]},{"1546778":[174]},{"1546780":[187]},{"1546782":[255]},{"1546784":[161]},{"1546786":[165]},{"1546788":[165]},{"1546790":[255]},{"1546792":[255,127,117]},{"1546796":[255]},{"1546798":[255]},{"1546800":[185]},{"1546802":[181]},{"1546804":[170]},{"1546806":[194]},{"1546808":[174]},{"1546810":[187]},{"1546812":[255]},{"1546814":[161]},{"1546816":[165]},{"1546818":[166]},{"1546820":[255]},{"1546822":[255,127,117]},{"1546826":[255]},{"1546828":[255]},{"1546830":[185]},{"1546832":[181]},{"1546834":[170]},{"1546836":[194]},{"1546838":[174]},{"1546840":[187]},{"1546842":[255]},{"1546844":[161]},{"1546846":[165]},{"1546848":[167]},{"1546850":[255]},{"1546852":[255,127,117]},{"1546856":[255]},{"1546858":[255]},{"1546860":[185]},{"1546862":[181]},{"1546864":[170]},{"1546866":[194]},{"1546868":[174]},{"1546870":[187]},{"1546872":[255]},{"1546874":[161]},{"1546876":[165]},{"1546878":[168]},{"1546880":[255]},{"1546882":[255,127,117]},{"1546886":[255]},{"1546888":[255]},{"1546890":[185]},{"1546892":[181]},{"1546894":[170]},{"1546896":[194]},{"1546898":[174]},{"1546900":[187]},{"1546902":[255]},{"1546904":[161]},{"1546906":[165]},{"1546908":[169]},{"1546910":[255]},{"1546912":[255,127,117]},{"1546916":[255]},{"1546918":[255]},{"1546920":[185]},{"1546922":[181]},{"1546924":[170]},{"1546926":[194]},{"1546928":[174]},{"1546930":[187]},{"1546932":[255]},{"1546934":[161]},{"1546936":[166]},{"1546938":[160]},{"1546940":[255]},{"1546942":[255,127,117]},{"1546946":[255]},{"1546948":[255]},{"1546950":[185]},{"1546952":[181]},{"1546954":[170]},{"1546956":[194]},{"1546958":[174]},{"1546960":[187]},{"1546962":[255]},{"1546964":[161]},{"1546966":[166]},{"1546968":[161]},{"1546970":[255]},{"1546972":[255,127,117]},{"1546976":[255]},{"1546978":[255]},{"1546980":[185]},{"1546982":[181]},{"1546984":[170]},{"1546986":[194]},{"1546988":[174]},{"1546990":[187]},{"1546992":[255]},{"1546994":[161]},{"1546996":[166]},{"1546998":[162]},{"1547000":[255]},{"1547002":[255,127,117]},{"1547006":[255]},{"1547008":[255]},{"1547010":[185]},{"1547012":[181]},{"1547014":[170]},{"1547016":[194]},{"1547018":[174]},{"1547020":[187]},{"1547022":[255]},{"1547024":[161]},{"1547026":[166]},{"1547028":[163]},{"1547030":[255]},{"1547032":[255,127,117]},{"1547036":[255]},{"1547038":[255]},{"1547040":[185]},{"1547042":[181]},{"1547044":[170]},{"1547046":[194]},{"1547048":[174]},{"1547050":[187]},{"1547052":[255]},{"1547054":[161]},{"1547056":[166]},{"1547058":[164]},{"1547060":[255]},{"1547062":[255,127,117]},{"1547066":[255]},{"1547068":[255]},{"1547070":[185]},{"1547072":[181]},{"1547074":[170]},{"1547076":[194]},{"1547078":[174]},{"1547080":[187]},{"1547082":[255]},{"1547084":[161]},{"1547086":[166]},{"1547088":[165]},{"1547090":[255]},{"1547092":[255,127,117]},{"1547096":[255]},{"1547098":[255]},{"1547100":[185]},{"1547102":[181]},{"1547104":[170]},{"1547106":[194]},{"1547108":[174]},{"1547110":[187]},{"1547112":[255]},{"1547114":[161]},{"1547116":[166]},{"1547118":[166]},{"1547120":[255]},{"1547122":[255,127,117]},{"1547126":[255]},{"1547128":[255]},{"1547130":[185]},{"1547132":[181]},{"1547134":[170]},{"1547136":[194]},{"1547138":[174]},{"1547140":[187]},{"1547142":[255]},{"1547144":[161]},{"1547146":[166]},{"1547148":[167]},{"1547150":[255]},{"1547152":[255,127,117]},{"1547156":[255]},{"1547158":[255]},{"1547160":[185]},{"1547162":[181]},{"1547164":[170]},{"1547166":[194]},{"1547168":[174]},{"1547170":[187]},{"1547172":[255]},{"1547174":[161]},{"1547176":[166]},{"1547178":[168]},{"1547180":[255]},{"1547182":[255,127,117]},{"1547186":[255]},{"1547188":[255]},{"1547190":[185]},{"1547192":[181]},{"1547194":[170]},{"1547196":[194]},{"1547198":[174]},{"1547200":[187]},{"1547202":[255]},{"1547204":[161]},{"1547206":[166]},{"1547208":[169]},{"1547210":[255]},{"1547212":[255,127,117]},{"1547216":[255]},{"1547218":[255]},{"1547220":[185]},{"1547222":[181]},{"1547224":[170]},{"1547226":[194]},{"1547228":[174]},{"1547230":[187]},{"1547232":[255]},{"1547234":[161]},{"1547236":[167]},{"1547238":[160]},{"1547240":[255]},{"1547242":[255,127,117]},{"1547246":[255]},{"1547248":[255]},{"1547250":[185]},{"1547252":[181]},{"1547254":[170]},{"1547256":[194]},{"1547258":[174]},{"1547260":[187]},{"1547262":[255]},{"1547264":[161]},{"1547266":[167]},{"1547268":[161]},{"1547270":[255]},{"1547272":[255,127,117]},{"1547276":[255]},{"1547278":[255]},{"1547280":[185]},{"1547282":[181]},{"1547284":[170]},{"1547286":[194]},{"1547288":[174]},{"1547290":[187]},{"1547292":[255]},{"1547294":[161]},{"1547296":[167]},{"1547298":[162]},{"1547300":[255]},{"1547302":[255,127,117]},{"1547306":[255]},{"1547308":[255]},{"1547310":[185]},{"1547312":[181]},{"1547314":[170]},{"1547316":[194]},{"1547318":[174]},{"1547320":[187]},{"1547322":[255]},{"1547324":[161]},{"1547326":[167]},{"1547328":[163]},{"1547330":[255]},{"1547332":[255,127,117]},{"1547336":[255]},{"1547338":[255]},{"1547340":[185]},{"1547342":[181]},{"1547344":[170]},{"1547346":[194]},{"1547348":[174]},{"1547350":[187]},{"1547352":[255]},{"1547354":[161]},{"1547356":[167]},{"1547358":[164]},{"1547360":[255]},{"1547362":[255,127,117]},{"1547366":[255]},{"1547368":[255]},{"1547370":[185]},{"1547372":[181]},{"1547374":[170]},{"1547376":[194]},{"1547378":[174]},{"1547380":[187]},{"1547382":[255]},{"1547384":[161]},{"1547386":[167]},{"1547388":[165]},{"1547390":[255]},{"1547392":[255,127,117]},{"1547396":[255]},{"1547398":[255]},{"1547400":[185]},{"1547402":[181]},{"1547404":[170]},{"1547406":[194]},{"1547408":[174]},{"1547410":[187]},{"1547412":[255]},{"1547414":[161]},{"1547416":[167]},{"1547418":[166]},{"1547420":[255]},{"1547422":[255,127,117]},{"1547426":[255]},{"1547428":[255]},{"1547430":[185]},{"1547432":[181]},{"1547434":[170]},{"1547436":[194]},{"1547438":[174]},{"1547440":[187]},{"1547442":[255]},{"1547444":[161]},{"1547446":[167]},{"1547448":[167]},{"1547450":[255]},{"1547452":[255,127,117]},{"1547456":[255]},{"1547458":[255]},{"1547460":[185]},{"1547462":[181]},{"1547464":[170]},{"1547466":[194]},{"1547468":[174]},{"1547470":[187]},{"1547472":[255]},{"1547474":[161]},{"1547476":[167]},{"1547478":[168]},{"1547480":[255]},{"1547482":[255,127,117]},{"1547486":[255]},{"1547488":[255]},{"1547490":[185]},{"1547492":[181]},{"1547494":[170]},{"1547496":[194]},{"1547498":[174]},{"1547500":[187]},{"1547502":[255]},{"1547504":[161]},{"1547506":[167]},{"1547508":[169]},{"1547510":[255]},{"1547512":[255,127,117]},{"1547516":[255]},{"1547518":[255]},{"1547520":[185]},{"1547522":[181]},{"1547524":[170]},{"1547526":[194]},{"1547528":[174]},{"1547530":[187]},{"1547532":[255]},{"1547534":[161]},{"1547536":[168]},{"1547538":[160]},{"1547540":[255]},{"1547542":[255,127,117]},{"1547546":[255]},{"1547548":[255]},{"1547550":[185]},{"1547552":[181]},{"1547554":[170]},{"1547556":[194]},{"1547558":[174]},{"1547560":[187]},{"1547562":[255]},{"1547564":[161]},{"1547566":[168]},{"1547568":[161]},{"1547570":[255]},{"1547572":[255,127,117]},{"1547576":[255]},{"1547578":[255]},{"1547580":[185]},{"1547582":[181]},{"1547584":[170]},{"1547586":[194]},{"1547588":[174]},{"1547590":[187]},{"1547592":[255]},{"1547594":[161]},{"1547596":[168]},{"1547598":[162]},{"1547600":[255]},{"1547602":[255,127,117]},{"1547606":[255]},{"1547608":[255]},{"1547610":[185]},{"1547612":[181]},{"1547614":[170]},{"1547616":[194]},{"1547618":[174]},{"1547620":[187]},{"1547622":[255]},{"1547624":[161]},{"1547626":[168]},{"1547628":[163]},{"1547630":[255]},{"1547632":[255,127,117]},{"1547636":[255]},{"1547638":[255]},{"1547640":[185]},{"1547642":[181]},{"1547644":[170]},{"1547646":[194]},{"1547648":[174]},{"1547650":[187]},{"1547652":[255]},{"1547654":[161]},{"1547656":[168]},{"1547658":[164]},{"1547660":[255]},{"1547662":[255,127,117]},{"1547666":[255]},{"1547668":[255]},{"1547670":[185]},{"1547672":[181]},{"1547674":[170]},{"1547676":[194]},{"1547678":[174]},{"1547680":[187]},{"1547682":[255]},{"1547684":[161]},{"1547686":[168]},{"1547688":[165]},{"1547690":[255]},{"1547692":[255,127,117]},{"1547696":[255]},{"1547698":[255]},{"1547700":[185]},{"1547702":[181]},{"1547704":[170]},{"1547706":[194]},{"1547708":[174]},{"1547710":[187]},{"1547712":[255]},{"1547714":[161]},{"1547716":[168]},{"1547718":[166]},{"1547720":[255]},{"1547722":[255,127,117]},{"1547726":[255]},{"1547728":[255]},{"1547730":[185]},{"1547732":[181]},{"1547734":[170]},{"1547736":[194]},{"1547738":[174]},{"1547740":[187]},{"1547742":[255]},{"1547744":[161]},{"1547746":[168]},{"1547748":[167]},{"1547750":[255]},{"1547752":[255,127,117]},{"1547756":[255]},{"1547758":[255]},{"1547760":[185]},{"1547762":[181]},{"1547764":[170]},{"1547766":[194]},{"1547768":[174]},{"1547770":[187]},{"1547772":[255]},{"1547774":[161]},{"1547776":[168]},{"1547778":[168]},{"1547780":[255]},{"1547782":[255,127,117]},{"1547786":[255]},{"1547788":[255]},{"1547790":[185]},{"1547792":[181]},{"1547794":[170]},{"1547796":[194]},{"1547798":[174]},{"1547800":[187]},{"1547802":[255]},{"1547804":[161]},{"1547806":[168]},{"1547808":[169]},{"1547810":[255]},{"1547812":[255,127,117]},{"1547816":[255]},{"1547818":[255]},{"1547820":[185]},{"1547822":[181]},{"1547824":[170]},{"1547826":[194]},{"1547828":[174]},{"1547830":[187]},{"1547832":[255]},{"1547834":[161]},{"1547836":[169]},{"1547838":[160]},{"1547840":[255]},{"1547842":[255,127,117]},{"1547846":[255]},{"1547848":[255]},{"1547850":[185]},{"1547852":[181]},{"1547854":[170]},{"1547856":[194]},{"1547858":[174]},{"1547860":[187]},{"1547862":[255]},{"1547864":[161]},{"1547866":[169]},{"1547868":[161]},{"1547870":[255]},{"1547872":[255,127,117]},{"1547876":[255]},{"1547878":[255]},{"1547880":[185]},{"1547882":[181]},{"1547884":[170]},{"1547886":[194]},{"1547888":[174]},{"1547890":[187]},{"1547892":[255]},{"1547894":[161]},{"1547896":[169]},{"1547898":[162]},{"1547900":[255]},{"1547902":[255,127,117]},{"1547906":[255]},{"1547908":[255]},{"1547910":[185]},{"1547912":[181]},{"1547914":[170]},{"1547916":[194]},{"1547918":[174]},{"1547920":[187]},{"1547922":[255]},{"1547924":[161]},{"1547926":[169]},{"1547928":[163]},{"1547930":[255]},{"1547932":[255,127,117]},{"1547936":[255]},{"1547938":[255]},{"1547940":[185]},{"1547942":[181]},{"1547944":[170]},{"1547946":[194]},{"1547948":[174]},{"1547950":[187]},{"1547952":[255]},{"1547954":[161]},{"1547956":[169]},{"1547958":[164]},{"1547960":[255]},{"1547962":[255,127,117]},{"1547966":[255]},{"1547968":[255]},{"1547970":[185]},{"1547972":[181]},{"1547974":[170]},{"1547976":[194]},{"1547978":[174]},{"1547980":[187]},{"1547982":[255]},{"1547984":[161]},{"1547986":[169]},{"1547988":[165]},{"1547990":[255]},{"1547992":[255,127,117]},{"1547996":[255]},{"1547998":[255]},{"1548000":[185]},{"1548002":[181]},{"1548004":[170]},{"1548006":[194]},{"1548008":[174]},{"1548010":[187]},{"1548012":[255]},{"1548014":[161]},{"1548016":[169]},{"1548018":[166]},{"1548020":[255]},{"1548022":[255,127,117]},{"1548026":[255]},{"1548028":[255]},{"1548030":[185]},{"1548032":[181]},{"1548034":[170]},{"1548036":[194]},{"1548038":[174]},{"1548040":[187]},{"1548042":[255]},{"1548044":[161]},{"1548046":[169]},{"1548048":[167]},{"1548050":[255]},{"1548052":[255,127,117]},{"1548056":[255]},{"1548058":[255]},{"1548060":[185]},{"1548062":[181]},{"1548064":[170]},{"1548066":[194]},{"1548068":[174]},{"1548070":[187]},{"1548072":[255]},{"1548074":[161]},{"1548076":[169]},{"1548078":[168]},{"1548080":[255]},{"1548082":[255,127,117]},{"1548086":[255]},{"1548088":[255]},{"1548090":[185]},{"1548092":[181]},{"1548094":[170]},{"1548096":[194]},{"1548098":[174]},{"1548100":[187]},{"1548102":[255]},{"1548104":[161]},{"1548106":[169]},{"1548108":[169]},{"1548110":[255]},{"1548112":[255,127,117]},{"1548116":[255]},{"1548118":[255]},{"1548120":[185]},{"1548122":[181]},{"1548124":[170]},{"1548126":[194]},{"1548128":[174]},{"1548130":[187]},{"1548132":[255]},{"1548134":[162]},{"1548136":[160]},{"1548138":[160]},{"1548140":[255]},{"1548142":[255,127,117]},{"1548146":[255]},{"1548148":[255]},{"1548150":[185]},{"1548152":[181]},{"1548154":[170]},{"1548156":[194]},{"1548158":[174]},{"1548160":[187]},{"1548162":[255]},{"1548164":[162]},{"1548166":[160]},{"1548168":[161]},{"1548170":[255]},{"1548172":[255,127,117]},{"1548176":[255]},{"1548178":[255]},{"1548180":[185]},{"1548182":[181]},{"1548184":[170]},{"1548186":[194]},{"1548188":[174]},{"1548190":[187]},{"1548192":[255]},{"1548194":[162]},{"1548196":[160]},{"1548198":[162]},{"1548200":[255]},{"1548202":[255,127,117]},{"1548206":[255]},{"1548208":[255]},{"1548210":[185]},{"1548212":[181]},{"1548214":[170]},{"1548216":[194]},{"1548218":[174]},{"1548220":[187]},{"1548222":[255]},{"1548224":[162]},{"1548226":[160]},{"1548228":[163]},{"1548230":[255]},{"1548232":[255,127,117]},{"1548236":[255]},{"1548238":[255]},{"1548240":[185]},{"1548242":[181]},{"1548244":[170]},{"1548246":[194]},{"1548248":[174]},{"1548250":[187]},{"1548252":[255]},{"1548254":[162]},{"1548256":[160]},{"1548258":[164]},{"1548260":[255]},{"1548262":[255,127,117]},{"1548266":[255]},{"1548268":[255]},{"1548270":[185]},{"1548272":[181]},{"1548274":[170]},{"1548276":[194]},{"1548278":[174]},{"1548280":[187]},{"1548282":[255]},{"1548284":[162]},{"1548286":[160]},{"1548288":[165]},{"1548290":[255]},{"1548292":[255,127,117]},{"1548296":[255]},{"1548298":[255]},{"1548300":[185]},{"1548302":[181]},{"1548304":[170]},{"1548306":[194]},{"1548308":[174]},{"1548310":[187]},{"1548312":[255]},{"1548314":[162]},{"1548316":[160]},{"1548318":[166]},{"1548320":[255]},{"1548322":[255,127,117]},{"1548326":[255]},{"1548328":[255]},{"1548330":[185]},{"1548332":[181]},{"1548334":[170]},{"1548336":[194]},{"1548338":[174]},{"1548340":[187]},{"1548342":[255]},{"1548344":[162]},{"1548346":[160]},{"1548348":[167]},{"1548350":[255]},{"1548352":[255,127,117]},{"1548356":[255]},{"1548358":[255]},{"1548360":[185]},{"1548362":[181]},{"1548364":[170]},{"1548366":[194]},{"1548368":[174]},{"1548370":[187]},{"1548372":[255]},{"1548374":[162]},{"1548376":[160]},{"1548378":[168]},{"1548380":[255]},{"1548382":[255,127,117]},{"1548386":[255]},{"1548388":[255]},{"1548390":[185]},{"1548392":[181]},{"1548394":[170]},{"1548396":[194]},{"1548398":[174]},{"1548400":[187]},{"1548402":[255]},{"1548404":[162]},{"1548406":[160]},{"1548408":[169]},{"1548410":[255]},{"1548412":[255,127,117]},{"1548416":[255]},{"1548418":[255]},{"1548420":[185]},{"1548422":[181]},{"1548424":[170]},{"1548426":[194]},{"1548428":[174]},{"1548430":[187]},{"1548432":[255]},{"1548434":[162]},{"1548436":[161]},{"1548438":[160]},{"1548440":[255]},{"1548442":[255,127,117]},{"1548446":[255]},{"1548448":[255]},{"1548450":[185]},{"1548452":[181]},{"1548454":[170]},{"1548456":[194]},{"1548458":[174]},{"1548460":[187]},{"1548462":[255]},{"1548464":[162]},{"1548466":[161]},{"1548468":[161]},{"1548470":[255]},{"1548472":[255,127,117]},{"1548476":[255]},{"1548478":[255]},{"1548480":[185]},{"1548482":[181]},{"1548484":[170]},{"1548486":[194]},{"1548488":[174]},{"1548490":[187]},{"1548492":[255]},{"1548494":[162]},{"1548496":[161]},{"1548498":[162]},{"1548500":[255]},{"1548502":[255,127,117]},{"1548506":[255]},{"1548508":[255]},{"1548510":[185]},{"1548512":[181]},{"1548514":[170]},{"1548516":[194]},{"1548518":[174]},{"1548520":[187]},{"1548522":[255]},{"1548524":[162]},{"1548526":[161]},{"1548528":[163]},{"1548530":[255]},{"1548532":[255,127,117]},{"1548536":[255]},{"1548538":[255]},{"1548540":[185]},{"1548542":[181]},{"1548544":[170]},{"1548546":[194]},{"1548548":[174]},{"1548550":[187]},{"1548552":[255]},{"1548554":[162]},{"1548556":[161]},{"1548558":[164]},{"1548560":[255]},{"1548562":[255,127,117]},{"1548566":[255]},{"1548568":[255]},{"1548570":[185]},{"1548572":[181]},{"1548574":[170]},{"1548576":[194]},{"1548578":[174]},{"1548580":[187]},{"1548582":[255]},{"1548584":[162]},{"1548586":[161]},{"1548588":[165]},{"1548590":[255]},{"1548592":[255,127,117]},{"1548596":[255]},{"1548598":[255]},{"1548600":[185]},{"1548602":[181]},{"1548604":[170]},{"1548606":[194]},{"1548608":[174]},{"1548610":[187]},{"1548612":[255]},{"1548614":[162]},{"1548616":[161]},{"1548618":[166]},{"1548620":[255]},{"1548622":[255,127,117]},{"1548626":[255]},{"1548628":[255]},{"1548630":[185]},{"1548632":[181]},{"1548634":[170]},{"1548636":[194]},{"1548638":[174]},{"1548640":[187]},{"1548642":[255]},{"1548644":[162]},{"1548646":[161]},{"1548648":[167]},{"1548650":[255]},{"1548652":[255,127,117]},{"1548656":[255]},{"1548658":[255]},{"1548660":[185]},{"1548662":[181]},{"1548664":[170]},{"1548666":[194]},{"1548668":[174]},{"1548670":[187]},{"1548672":[255]},{"1548674":[162]},{"1548676":[161]},{"1548678":[168]},{"1548680":[255]},{"1548682":[255,127,117]},{"1548686":[255]},{"1548688":[255]},{"1548690":[185]},{"1548692":[181]},{"1548694":[170]},{"1548696":[194]},{"1548698":[174]},{"1548700":[187]},{"1548702":[255]},{"1548704":[162]},{"1548706":[161]},{"1548708":[169]},{"1548710":[255]},{"1548712":[255,127,117]},{"1548716":[255]},{"1548718":[255]},{"1548720":[185]},{"1548722":[181]},{"1548724":[170]},{"1548726":[194]},{"1548728":[174]},{"1548730":[187]},{"1548732":[255]},{"1548734":[162]},{"1548736":[162]},{"1548738":[160]},{"1548740":[255]},{"1548742":[255,127,117]},{"1548746":[255]},{"1548748":[255]},{"1548750":[185]},{"1548752":[181]},{"1548754":[170]},{"1548756":[194]},{"1548758":[174]},{"1548760":[187]},{"1548762":[255]},{"1548764":[162]},{"1548766":[162]},{"1548768":[161]},{"1548770":[255]},{"1548772":[255,127,117]},{"1548776":[255]},{"1548778":[255]},{"1548780":[185]},{"1548782":[181]},{"1548784":[170]},{"1548786":[194]},{"1548788":[174]},{"1548790":[187]},{"1548792":[255]},{"1548794":[162]},{"1548796":[162]},{"1548798":[162]},{"1548800":[255]},{"1548802":[255,127,117]},{"1548806":[255]},{"1548808":[255]},{"1548810":[185]},{"1548812":[181]},{"1548814":[170]},{"1548816":[194]},{"1548818":[174]},{"1548820":[187]},{"1548822":[255]},{"1548824":[162]},{"1548826":[162]},{"1548828":[163]},{"1548830":[255]},{"1548832":[255,127,117]},{"1548836":[255]},{"1548838":[255]},{"1548840":[185]},{"1548842":[181]},{"1548844":[170]},{"1548846":[194]},{"1548848":[174]},{"1548850":[187]},{"1548852":[255]},{"1548854":[162]},{"1548856":[162]},{"1548858":[164]},{"1548860":[255]},{"1548862":[255,127,117]},{"1548866":[255]},{"1548868":[255]},{"1548870":[185]},{"1548872":[181]},{"1548874":[170]},{"1548876":[194]},{"1548878":[174]},{"1548880":[187]},{"1548882":[255]},{"1548884":[162]},{"1548886":[162]},{"1548888":[165]},{"1548890":[255]},{"1548892":[255,127,117]},{"1548896":[255]},{"1548898":[255]},{"1548900":[185]},{"1548902":[181]},{"1548904":[170]},{"1548906":[194]},{"1548908":[174]},{"1548910":[187]},{"1548912":[255]},{"1548914":[162]},{"1548916":[162]},{"1548918":[166]},{"1548920":[255]},{"1548922":[255,127,117]},{"1548926":[255]},{"1548928":[255]},{"1548930":[185]},{"1548932":[181]},{"1548934":[170]},{"1548936":[194]},{"1548938":[174]},{"1548940":[187]},{"1548942":[255]},{"1548944":[162]},{"1548946":[162]},{"1548948":[167]},{"1548950":[255]},{"1548952":[255,127,117]},{"1548956":[255]},{"1548958":[255]},{"1548960":[185]},{"1548962":[181]},{"1548964":[170]},{"1548966":[194]},{"1548968":[174]},{"1548970":[187]},{"1548972":[255]},{"1548974":[162]},{"1548976":[162]},{"1548978":[168]},{"1548980":[255]},{"1548982":[255,127,117]},{"1548986":[255]},{"1548988":[255]},{"1548990":[185]},{"1548992":[181]},{"1548994":[170]},{"1548996":[194]},{"1548998":[174]},{"1549000":[187]},{"1549002":[255]},{"1549004":[162]},{"1549006":[162]},{"1549008":[169]},{"1549010":[255]},{"1549012":[255,127,117]},{"1549016":[255]},{"1549018":[255]},{"1549020":[185]},{"1549022":[181]},{"1549024":[170]},{"1549026":[194]},{"1549028":[174]},{"1549030":[187]},{"1549032":[255]},{"1549034":[162]},{"1549036":[163]},{"1549038":[160]},{"1549040":[255]},{"1549042":[255,127,117]},{"1549046":[255]},{"1549048":[255]},{"1549050":[185]},{"1549052":[181]},{"1549054":[170]},{"1549056":[194]},{"1549058":[174]},{"1549060":[187]},{"1549062":[255]},{"1549064":[162]},{"1549066":[163]},{"1549068":[161]},{"1549070":[255]},{"1549072":[255,127,117]},{"1549076":[255]},{"1549078":[255]},{"1549080":[185]},{"1549082":[181]},{"1549084":[170]},{"1549086":[194]},{"1549088":[174]},{"1549090":[187]},{"1549092":[255]},{"1549094":[162]},{"1549096":[163]},{"1549098":[162]},{"1549100":[255]},{"1549102":[255,127,117]},{"1549106":[255]},{"1549108":[255]},{"1549110":[185]},{"1549112":[181]},{"1549114":[170]},{"1549116":[194]},{"1549118":[174]},{"1549120":[187]},{"1549122":[255]},{"1549124":[162]},{"1549126":[163]},{"1549128":[163]},{"1549130":[255]},{"1549132":[255,127,117]},{"1549136":[255]},{"1549138":[255]},{"1549140":[185]},{"1549142":[181]},{"1549144":[170]},{"1549146":[194]},{"1549148":[174]},{"1549150":[187]},{"1549152":[255]},{"1549154":[162]},{"1549156":[163]},{"1549158":[164]},{"1549160":[255]},{"1549162":[255,127,117]},{"1549166":[255]},{"1549168":[255]},{"1549170":[185]},{"1549172":[181]},{"1549174":[170]},{"1549176":[194]},{"1549178":[174]},{"1549180":[187]},{"1549182":[255]},{"1549184":[162]},{"1549186":[163]},{"1549188":[165]},{"1549190":[255]},{"1549192":[255,127,117]},{"1549196":[255]},{"1549198":[255]},{"1549200":[185]},{"1549202":[181]},{"1549204":[170]},{"1549206":[194]},{"1549208":[174]},{"1549210":[187]},{"1549212":[255]},{"1549214":[162]},{"1549216":[163]},{"1549218":[166]},{"1549220":[255]},{"1549222":[255,127,117]},{"1549226":[255]},{"1549228":[255]},{"1549230":[185]},{"1549232":[181]},{"1549234":[170]},{"1549236":[194]},{"1549238":[174]},{"1549240":[187]},{"1549242":[255]},{"1549244":[162]},{"1549246":[163]},{"1549248":[167]},{"1549250":[255]},{"1549252":[255,127,117]},{"1549256":[255]},{"1549258":[255]},{"1549260":[185]},{"1549262":[181]},{"1549264":[170]},{"1549266":[194]},{"1549268":[174]},{"1549270":[187]},{"1549272":[255]},{"1549274":[162]},{"1549276":[163]},{"1549278":[168]},{"1549280":[255]},{"1549282":[255,127,117]},{"1549286":[255]},{"1549288":[255]},{"1549290":[185]},{"1549292":[181]},{"1549294":[170]},{"1549296":[194]},{"1549298":[174]},{"1549300":[187]},{"1549302":[255]},{"1549304":[162]},{"1549306":[163]},{"1549308":[169]},{"1549310":[255]},{"1549312":[255,127,117]},{"1549316":[255]},{"1549318":[255]},{"1549320":[185]},{"1549322":[181]},{"1549324":[170]},{"1549326":[194]},{"1549328":[174]},{"1549330":[187]},{"1549332":[255]},{"1549334":[162]},{"1549336":[164]},{"1549338":[160]},{"1549340":[255]},{"1549342":[255,127,117]},{"1549346":[255]},{"1549348":[255]},{"1549350":[185]},{"1549352":[181]},{"1549354":[170]},{"1549356":[194]},{"1549358":[174]},{"1549360":[187]},{"1549362":[255]},{"1549364":[162]},{"1549366":[164]},{"1549368":[161]},{"1549370":[255]},{"1549372":[255,127,117]},{"1549376":[255]},{"1549378":[255]},{"1549380":[185]},{"1549382":[181]},{"1549384":[170]},{"1549386":[194]},{"1549388":[174]},{"1549390":[187]},{"1549392":[255]},{"1549394":[162]},{"1549396":[164]},{"1549398":[162]},{"1549400":[255]},{"1549402":[255,127,117]},{"1549406":[255]},{"1549408":[255]},{"1549410":[185]},{"1549412":[181]},{"1549414":[170]},{"1549416":[194]},{"1549418":[174]},{"1549420":[187]},{"1549422":[255]},{"1549424":[162]},{"1549426":[164]},{"1549428":[163]},{"1549430":[255]},{"1549432":[255,127,117]},{"1549436":[255]},{"1549438":[255]},{"1549440":[185]},{"1549442":[181]},{"1549444":[170]},{"1549446":[194]},{"1549448":[174]},{"1549450":[187]},{"1549452":[255]},{"1549454":[162]},{"1549456":[164]},{"1549458":[164]},{"1549460":[255]},{"1549462":[255,127,117]},{"1549466":[255]},{"1549468":[255]},{"1549470":[185]},{"1549472":[181]},{"1549474":[170]},{"1549476":[194]},{"1549478":[174]},{"1549480":[187]},{"1549482":[255]},{"1549484":[162]},{"1549486":[164]},{"1549488":[165]},{"1549490":[255]},{"1549492":[255,127,117]},{"1549496":[255]},{"1549498":[255]},{"1549500":[185]},{"1549502":[181]},{"1549504":[170]},{"1549506":[194]},{"1549508":[174]},{"1549510":[187]},{"1549512":[255]},{"1549514":[162]},{"1549516":[164]},{"1549518":[166]},{"1549520":[255]},{"1549522":[255,127,117]},{"1549526":[255]},{"1549528":[255]},{"1549530":[185]},{"1549532":[181]},{"1549534":[170]},{"1549536":[194]},{"1549538":[174]},{"1549540":[187]},{"1549542":[255]},{"1549544":[162]},{"1549546":[164]},{"1549548":[167]},{"1549550":[255]},{"1549552":[255,127,117]},{"1549556":[255]},{"1549558":[255]},{"1549560":[185]},{"1549562":[181]},{"1549564":[170]},{"1549566":[194]},{"1549568":[174]},{"1549570":[187]},{"1549572":[255]},{"1549574":[162]},{"1549576":[164]},{"1549578":[168]},{"1549580":[255]},{"1549582":[255,127,117]},{"1549586":[255]},{"1549588":[255]},{"1549590":[185]},{"1549592":[181]},{"1549594":[170]},{"1549596":[194]},{"1549598":[174]},{"1549600":[187]},{"1549602":[255]},{"1549604":[162]},{"1549606":[164]},{"1549608":[169]},{"1549610":[255]},{"1549612":[255,127,117]},{"1549616":[255]},{"1549618":[255]},{"1549620":[185]},{"1549622":[181]},{"1549624":[170]},{"1549626":[194]},{"1549628":[174]},{"1549630":[187]},{"1549632":[255]},{"1549634":[162]},{"1549636":[165]},{"1549638":[160]},{"1549640":[255]},{"1549642":[255,127,117]},{"1549646":[255]},{"1549648":[255]},{"1549650":[185]},{"1549652":[181]},{"1549654":[170]},{"1549656":[194]},{"1549658":[174]},{"1549660":[187]},{"1549662":[255]},{"1549664":[162]},{"1549666":[165]},{"1549668":[161]},{"1549670":[255]},{"1549672":[255,127,117]},{"1549676":[255]},{"1549678":[255]},{"1549680":[185]},{"1549682":[181]},{"1549684":[170]},{"1549686":[194]},{"1549688":[174]},{"1549690":[187]},{"1549692":[255]},{"1549694":[162]},{"1549696":[165]},{"1549698":[162]},{"1549700":[255]},{"1549702":[255,127,117]},{"1549706":[255]},{"1549708":[255]},{"1549710":[185]},{"1549712":[181]},{"1549714":[170]},{"1549716":[194]},{"1549718":[174]},{"1549720":[187]},{"1549722":[255]},{"1549724":[162]},{"1549726":[165]},{"1549728":[163]},{"1549730":[255]},{"1549732":[255,127,117]},{"1549736":[255]},{"1549738":[255]},{"1549740":[185]},{"1549742":[181]},{"1549744":[170]},{"1549746":[194]},{"1549748":[174]},{"1549750":[187]},{"1549752":[255]},{"1549754":[162]},{"1549756":[165]},{"1549758":[164]},{"1549760":[255]},{"1549762":[255,127,117]},{"1549766":[255]},{"1549768":[255]},{"1549770":[185]},{"1549772":[181]},{"1549774":[170]},{"1549776":[194]},{"1549778":[174]},{"1549780":[187]},{"1549782":[255]},{"1549784":[162]},{"1549786":[165]},{"1549788":[165]},{"1549790":[255]},{"1549792":[255,127,117]},{"1549796":[255]},{"1549798":[255]},{"1549800":[185]},{"1549802":[181]},{"1549804":[170]},{"1549806":[194]},{"1549808":[174]},{"1549810":[187]},{"1549812":[255]},{"1549814":[162]},{"1549816":[165]},{"1549818":[166]},{"1549820":[255]},{"1549822":[255,127,117]},{"1549826":[255]},{"1549828":[255]},{"1549830":[185]},{"1549832":[181]},{"1549834":[170]},{"1549836":[194]},{"1549838":[174]},{"1549840":[187]},{"1549842":[255]},{"1549844":[162]},{"1549846":[165]},{"1549848":[167]},{"1549850":[255]},{"1549852":[255,127,117]},{"1549856":[255]},{"1549858":[255]},{"1549860":[185]},{"1549862":[181]},{"1549864":[170]},{"1549866":[194]},{"1549868":[174]},{"1549870":[187]},{"1549872":[255]},{"1549874":[162]},{"1549876":[165]},{"1549878":[168]},{"1549880":[255]},{"1549882":[255,127,117]},{"1549886":[255]},{"1549888":[255]},{"1549890":[185]},{"1549892":[181]},{"1549894":[170]},{"1549896":[194]},{"1549898":[174]},{"1549900":[187]},{"1549902":[255]},{"1549904":[162]},{"1549906":[165]},{"1549908":[169]},{"1549910":[255]},{"1549912":[255,127,117]},{"1549916":[255]},{"1549918":[255]},{"1549920":[185]},{"1549922":[181]},{"1549924":[170]},{"1549926":[194]},{"1549928":[174]},{"1549930":[187]},{"1549932":[255]},{"1549934":[162]},{"1549936":[166]},{"1549938":[160]},{"1549940":[255]},{"1549942":[255,127,117]},{"1549946":[255]},{"1549948":[255]},{"1549950":[185]},{"1549952":[181]},{"1549954":[170]},{"1549956":[194]},{"1549958":[174]},{"1549960":[187]},{"1549962":[255]},{"1549964":[162]},{"1549966":[166]},{"1549968":[161]},{"1549970":[255]},{"1549972":[255,127,117]},{"1549976":[255]},{"1549978":[255]},{"1549980":[185]},{"1549982":[181]},{"1549984":[170]},{"1549986":[194]},{"1549988":[174]},{"1549990":[187]},{"1549992":[255]},{"1549994":[162]},{"1549996":[166]},{"1549998":[162]},{"1550000":[255]},{"1550002":[255,127,117]},{"1550006":[255]},{"1550008":[255]},{"1550010":[185]},{"1550012":[181]},{"1550014":[170]},{"1550016":[194]},{"1550018":[174]},{"1550020":[187]},{"1550022":[255]},{"1550024":[162]},{"1550026":[166]},{"1550028":[163]},{"1550030":[255]},{"1550032":[255,127,117]},{"1550036":[255]},{"1550038":[255]},{"1550040":[185]},{"1550042":[181]},{"1550044":[170]},{"1550046":[194]},{"1550048":[174]},{"1550050":[187]},{"1550052":[255]},{"1550054":[162]},{"1550056":[166]},{"1550058":[164]},{"1550060":[255]},{"1550062":[255,127,117]},{"1550066":[255]},{"1550068":[255]},{"1550070":[185]},{"1550072":[181]},{"1550074":[170]},{"1550076":[194]},{"1550078":[174]},{"1550080":[187]},{"1550082":[255]},{"1550084":[162]},{"1550086":[166]},{"1550088":[165]},{"1550090":[255]},{"1550092":[255,127,117]},{"1550096":[255]},{"1550098":[255]},{"1550100":[185]},{"1550102":[181]},{"1550104":[170]},{"1550106":[194]},{"1550108":[174]},{"1550110":[187]},{"1550112":[255]},{"1550114":[162]},{"1550116":[166]},{"1550118":[166]},{"1550120":[255]},{"1550122":[255,127,117]},{"1550126":[255]},{"1550128":[255]},{"1550130":[185]},{"1550132":[181]},{"1550134":[170]},{"1550136":[194]},{"1550138":[174]},{"1550140":[187]},{"1550142":[255]},{"1550144":[162]},{"1550146":[166]},{"1550148":[167]},{"1550150":[255]},{"1550152":[255,127,117]},{"1550156":[255]},{"1550158":[255]},{"1550160":[185]},{"1550162":[181]},{"1550164":[170]},{"1550166":[194]},{"1550168":[174]},{"1550170":[187]},{"1550172":[255]},{"1550174":[162]},{"1550176":[166]},{"1550178":[168]},{"1550180":[255]},{"1550182":[255,127,117]},{"1550186":[255]},{"1550188":[255]},{"1550190":[185]},{"1550192":[181]},{"1550194":[170]},{"1550196":[194]},{"1550198":[174]},{"1550200":[187]},{"1550202":[255]},{"1550204":[162]},{"1550206":[166]},{"1550208":[169]},{"1550210":[255]},{"1550212":[255,127,117]},{"1550216":[255]},{"1550218":[255]},{"1550220":[185]},{"1550222":[181]},{"1550224":[170]},{"1550226":[194]},{"1550228":[174]},{"1550230":[187]},{"1550232":[255]},{"1550234":[162]},{"1550236":[167]},{"1550238":[160]},{"1550240":[255]},{"1550242":[255,127,117]},{"1550246":[255]},{"1550248":[255]},{"1550250":[185]},{"1550252":[181]},{"1550254":[170]},{"1550256":[194]},{"1550258":[174]},{"1550260":[187]},{"1550262":[255]},{"1550264":[162]},{"1550266":[167]},{"1550268":[161]},{"1550270":[255]},{"1550272":[255,127,117]},{"1550276":[255]},{"1550278":[255]},{"1550280":[185]},{"1550282":[181]},{"1550284":[170]},{"1550286":[194]},{"1550288":[174]},{"1550290":[187]},{"1550292":[255]},{"1550294":[162]},{"1550296":[167]},{"1550298":[162]},{"1550300":[255]},{"1550302":[255,127,117]},{"1550306":[255]},{"1550308":[255]},{"1550310":[185]},{"1550312":[181]},{"1550314":[170]},{"1550316":[194]},{"1550318":[174]},{"1550320":[187]},{"1550322":[255]},{"1550324":[162]},{"1550326":[167]},{"1550328":[163]},{"1550330":[255]},{"1550332":[255,127,117]},{"1550336":[255]},{"1550338":[255]},{"1550340":[185]},{"1550342":[181]},{"1550344":[170]},{"1550346":[194]},{"1550348":[174]},{"1550350":[187]},{"1550352":[255]},{"1550354":[162]},{"1550356":[167]},{"1550358":[164]},{"1550360":[255]},{"1550362":[255,127,117]},{"1550366":[255]},{"1550368":[255]},{"1550370":[185]},{"1550372":[181]},{"1550374":[170]},{"1550376":[194]},{"1550378":[174]},{"1550380":[187]},{"1550382":[255]},{"1550384":[162]},{"1550386":[167]},{"1550388":[165]},{"1550390":[255]},{"1550392":[255,127,117]},{"1550396":[255]},{"1550398":[255]},{"1550400":[185]},{"1550402":[181]},{"1550404":[170]},{"1550406":[194]},{"1550408":[174]},{"1550410":[187]},{"1550412":[255]},{"1550414":[162]},{"1550416":[167]},{"1550418":[166]},{"1550420":[255]},{"1550422":[255,127,117]},{"1550426":[255]},{"1550428":[255]},{"1550430":[185]},{"1550432":[181]},{"1550434":[170]},{"1550436":[194]},{"1550438":[174]},{"1550440":[187]},{"1550442":[255]},{"1550444":[162]},{"1550446":[167]},{"1550448":[167]},{"1550450":[255]},{"1550452":[255,127,117]},{"1550456":[255]},{"1550458":[255]},{"1550460":[185]},{"1550462":[181]},{"1550464":[170]},{"1550466":[194]},{"1550468":[174]},{"1550470":[187]},{"1550472":[255]},{"1550474":[162]},{"1550476":[167]},{"1550478":[168]},{"1550480":[255]},{"1550482":[255,127,117]},{"1550486":[255]},{"1550488":[255]},{"1550490":[185]},{"1550492":[181]},{"1550494":[170]},{"1550496":[194]},{"1550498":[174]},{"1550500":[187]},{"1550502":[255]},{"1550504":[162]},{"1550506":[167]},{"1550508":[169]},{"1550510":[255]},{"1550512":[255,127,117]},{"1550516":[255]},{"1550518":[255]},{"1550520":[185]},{"1550522":[181]},{"1550524":[170]},{"1550526":[194]},{"1550528":[174]},{"1550530":[187]},{"1550532":[255]},{"1550534":[162]},{"1550536":[168]},{"1550538":[160]},{"1550540":[255]},{"1550542":[255,127,117]},{"1550546":[255]},{"1550548":[255]},{"1550550":[185]},{"1550552":[181]},{"1550554":[170]},{"1550556":[194]},{"1550558":[174]},{"1550560":[187]},{"1550562":[255]},{"1550564":[162]},{"1550566":[168]},{"1550568":[161]},{"1550570":[255]},{"1550572":[255,127,117]},{"1550576":[255]},{"1550578":[255]},{"1550580":[185]},{"1550582":[181]},{"1550584":[170]},{"1550586":[194]},{"1550588":[174]},{"1550590":[187]},{"1550592":[255]},{"1550594":[162]},{"1550596":[168]},{"1550598":[162]},{"1550600":[255]},{"1550602":[255,127,117]},{"1550606":[255]},{"1550608":[255]},{"1550610":[185]},{"1550612":[181]},{"1550614":[170]},{"1550616":[194]},{"1550618":[174]},{"1550620":[187]},{"1550622":[255]},{"1550624":[162]},{"1550626":[168]},{"1550628":[163]},{"1550630":[255]},{"1550632":[255,127,117]},{"1550636":[255]},{"1550638":[255]},{"1550640":[185]},{"1550642":[181]},{"1550644":[170]},{"1550646":[194]},{"1550648":[174]},{"1550650":[187]},{"1550652":[255]},{"1550654":[162]},{"1550656":[168]},{"1550658":[164]},{"1550660":[255]},{"1550662":[255,127,117]},{"1550666":[255]},{"1550668":[255]},{"1550670":[185]},{"1550672":[181]},{"1550674":[170]},{"1550676":[194]},{"1550678":[174]},{"1550680":[187]},{"1550682":[255]},{"1550684":[162]},{"1550686":[168]},{"1550688":[165]},{"1550690":[255]},{"1550692":[255,127,117]},{"1550696":[255]},{"1550698":[255]},{"1550700":[185]},{"1550702":[181]},{"1550704":[170]},{"1550706":[194]},{"1550708":[174]},{"1550710":[187]},{"1550712":[255]},{"1550714":[162]},{"1550716":[168]},{"1550718":[166]},{"1550720":[255]},{"1550722":[255,127,117]},{"1550726":[255]},{"1550728":[255]},{"1550730":[185]},{"1550732":[181]},{"1550734":[170]},{"1550736":[194]},{"1550738":[174]},{"1550740":[187]},{"1550742":[255]},{"1550744":[162]},{"1550746":[168]},{"1550748":[167]},{"1550750":[255]},{"1550752":[255,127,117]},{"1550756":[255]},{"1550758":[255]},{"1550760":[185]},{"1550762":[181]},{"1550764":[170]},{"1550766":[194]},{"1550768":[174]},{"1550770":[187]},{"1550772":[255]},{"1550774":[162]},{"1550776":[168]},{"1550778":[168]},{"1550780":[255]},{"1550782":[255,127,117]},{"1550786":[255]},{"1550788":[255]},{"1550790":[185]},{"1550792":[181]},{"1550794":[170]},{"1550796":[194]},{"1550798":[174]},{"1550800":[187]},{"1550802":[255]},{"1550804":[162]},{"1550806":[168]},{"1550808":[169]},{"1550810":[255]},{"1550812":[255,127,117]},{"1550816":[255]},{"1550818":[255]},{"1550820":[185]},{"1550822":[181]},{"1550824":[170]},{"1550826":[194]},{"1550828":[174]},{"1550830":[187]},{"1550832":[255]},{"1550834":[162]},{"1550836":[169]},{"1550838":[160]},{"1550840":[255]},{"1550842":[255,127,117]},{"1550846":[255]},{"1550848":[255]},{"1550850":[185]},{"1550852":[181]},{"1550854":[170]},{"1550856":[194]},{"1550858":[174]},{"1550860":[187]},{"1550862":[255]},{"1550864":[162]},{"1550866":[169]},{"1550868":[161]},{"1550870":[255]},{"1550872":[255,127,117]},{"1550876":[255]},{"1550878":[255]},{"1550880":[185]},{"1550882":[181]},{"1550884":[170]},{"1550886":[194]},{"1550888":[174]},{"1550890":[187]},{"1550892":[255]},{"1550894":[162]},{"1550896":[169]},{"1550898":[162]},{"1550900":[255]},{"1550902":[255,127,117]},{"1550906":[255]},{"1550908":[255]},{"1550910":[185]},{"1550912":[181]},{"1550914":[170]},{"1550916":[194]},{"1550918":[174]},{"1550920":[187]},{"1550922":[255]},{"1550924":[162]},{"1550926":[169]},{"1550928":[163]},{"1550930":[255]},{"1550932":[255,127,117]},{"1550936":[255]},{"1550938":[255]},{"1550940":[185]},{"1550942":[181]},{"1550944":[170]},{"1550946":[194]},{"1550948":[174]},{"1550950":[187]},{"1550952":[255]},{"1550954":[162]},{"1550956":[169]},{"1550958":[164]},{"1550960":[255]},{"1550962":[255,127,117]},{"1550966":[255]},{"1550968":[255]},{"1550970":[185]},{"1550972":[181]},{"1550974":[170]},{"1550976":[194]},{"1550978":[174]},{"1550980":[187]},{"1550982":[255]},{"1550984":[162]},{"1550986":[169]},{"1550988":[165]},{"1550990":[255]},{"1550992":[255,127,117]},{"1550996":[255]},{"1550998":[255]},{"1551000":[185]},{"1551002":[181]},{"1551004":[170]},{"1551006":[194]},{"1551008":[174]},{"1551010":[187]},{"1551012":[255]},{"1551014":[162]},{"1551016":[169]},{"1551018":[166]},{"1551020":[255]},{"1551022":[255,127,117]},{"1551026":[255]},{"1551028":[255]},{"1551030":[185]},{"1551032":[181]},{"1551034":[170]},{"1551036":[194]},{"1551038":[174]},{"1551040":[187]},{"1551042":[255]},{"1551044":[162]},{"1551046":[169]},{"1551048":[167]},{"1551050":[255]},{"1551052":[255,127,117]},{"1551056":[255]},{"1551058":[255]},{"1551060":[185]},{"1551062":[181]},{"1551064":[170]},{"1551066":[194]},{"1551068":[174]},{"1551070":[187]},{"1551072":[255]},{"1551074":[162]},{"1551076":[169]},{"1551078":[168]},{"1551080":[255]},{"1551082":[255,127,117]},{"1551086":[255]},{"1551088":[255]},{"1551090":[185]},{"1551092":[181]},{"1551094":[170]},{"1551096":[194]},{"1551098":[174]},{"1551100":[187]},{"1551102":[255]},{"1551104":[162]},{"1551106":[169]},{"1551108":[169]},{"1551110":[255]},{"1551112":[255,127,117]},{"1551116":[255]},{"1551118":[255]},{"1551120":[185]},{"1551122":[181]},{"1551124":[170]},{"1551126":[194]},{"1551128":[174]},{"1551130":[187]},{"1551132":[255]},{"1551134":[163]},{"1551136":[160]},{"1551138":[160]},{"1551140":[255]},{"1551142":[255,127,117]},{"1551146":[255]},{"1551148":[255]},{"1551150":[185]},{"1551152":[181]},{"1551154":[170]},{"1551156":[194]},{"1551158":[174]},{"1551160":[187]},{"1551162":[255]},{"1551164":[163]},{"1551166":[160]},{"1551168":[161]},{"1551170":[255]},{"1551172":[255,127,117]},{"1551176":[255]},{"1551178":[255]},{"1551180":[185]},{"1551182":[181]},{"1551184":[170]},{"1551186":[194]},{"1551188":[174]},{"1551190":[187]},{"1551192":[255]},{"1551194":[163]},{"1551196":[160]},{"1551198":[162]},{"1551200":[255]},{"1551202":[255,127,117]},{"1551206":[255]},{"1551208":[255]},{"1551210":[185]},{"1551212":[181]},{"1551214":[170]},{"1551216":[194]},{"1551218":[174]},{"1551220":[187]},{"1551222":[255]},{"1551224":[163]},{"1551226":[160]},{"1551228":[163]},{"1551230":[255]},{"1551232":[255,127,117]},{"1551236":[255]},{"1551238":[255]},{"1551240":[185]},{"1551242":[181]},{"1551244":[170]},{"1551246":[194]},{"1551248":[174]},{"1551250":[187]},{"1551252":[255]},{"1551254":[163]},{"1551256":[160]},{"1551258":[164]},{"1551260":[255]},{"1551262":[255,127,117]},{"1551266":[255]},{"1551268":[255]},{"1551270":[185]},{"1551272":[181]},{"1551274":[170]},{"1551276":[194]},{"1551278":[174]},{"1551280":[187]},{"1551282":[255]},{"1551284":[163]},{"1551286":[160]},{"1551288":[165]},{"1551290":[255]},{"1551292":[255,127,117]},{"1551296":[255]},{"1551298":[255]},{"1551300":[185]},{"1551302":[181]},{"1551304":[170]},{"1551306":[194]},{"1551308":[174]},{"1551310":[187]},{"1551312":[255]},{"1551314":[163]},{"1551316":[160]},{"1551318":[166]},{"1551320":[255]},{"1551322":[255,127,117]},{"1551326":[255]},{"1551328":[255]},{"1551330":[185]},{"1551332":[181]},{"1551334":[170]},{"1551336":[194]},{"1551338":[174]},{"1551340":[187]},{"1551342":[255]},{"1551344":[163]},{"1551346":[160]},{"1551348":[167]},{"1551350":[255]},{"1551352":[255,127,117]},{"1551356":[255]},{"1551358":[255]},{"1551360":[185]},{"1551362":[181]},{"1551364":[170]},{"1551366":[194]},{"1551368":[174]},{"1551370":[187]},{"1551372":[255]},{"1551374":[163]},{"1551376":[160]},{"1551378":[168]},{"1551380":[255]},{"1551382":[255,127,117]},{"1551386":[255]},{"1551388":[255]},{"1551390":[185]},{"1551392":[181]},{"1551394":[170]},{"1551396":[194]},{"1551398":[174]},{"1551400":[187]},{"1551402":[255]},{"1551404":[163]},{"1551406":[160]},{"1551408":[169]},{"1551410":[255]},{"1551412":[255,127,117]},{"1551416":[255]},{"1551418":[255]},{"1551420":[185]},{"1551422":[181]},{"1551424":[170]},{"1551426":[194]},{"1551428":[174]},{"1551430":[187]},{"1551432":[255]},{"1551434":[163]},{"1551436":[161]},{"1551438":[160]},{"1551440":[255]},{"1551442":[255,127,117]},{"1551446":[255]},{"1551448":[255]},{"1551450":[185]},{"1551452":[181]},{"1551454":[170]},{"1551456":[194]},{"1551458":[174]},{"1551460":[187]},{"1551462":[255]},{"1551464":[163]},{"1551466":[161]},{"1551468":[161]},{"1551470":[255]},{"1551472":[255,127,117]},{"1551476":[255]},{"1551478":[255]},{"1551480":[185]},{"1551482":[181]},{"1551484":[170]},{"1551486":[194]},{"1551488":[174]},{"1551490":[187]},{"1551492":[255]},{"1551494":[163]},{"1551496":[161]},{"1551498":[162]},{"1551500":[255]},{"1551502":[255,127,117]},{"1551506":[255]},{"1551508":[255]},{"1551510":[185]},{"1551512":[181]},{"1551514":[170]},{"1551516":[194]},{"1551518":[174]},{"1551520":[187]},{"1551522":[255]},{"1551524":[163]},{"1551526":[161]},{"1551528":[163]},{"1551530":[255]},{"1551532":[255,127,117]},{"1551536":[255]},{"1551538":[255]},{"1551540":[185]},{"1551542":[181]},{"1551544":[170]},{"1551546":[194]},{"1551548":[174]},{"1551550":[187]},{"1551552":[255]},{"1551554":[163]},{"1551556":[161]},{"1551558":[164]},{"1551560":[255]},{"1551562":[255,127,117]},{"1551566":[255]},{"1551568":[255]},{"1551570":[185]},{"1551572":[181]},{"1551574":[170]},{"1551576":[194]},{"1551578":[174]},{"1551580":[187]},{"1551582":[255]},{"1551584":[163]},{"1551586":[161]},{"1551588":[165]},{"1551590":[255]},{"1551592":[255,127,117]},{"1551596":[255]},{"1551598":[255]},{"1551600":[185]},{"1551602":[181]},{"1551604":[170]},{"1551606":[194]},{"1551608":[174]},{"1551610":[187]},{"1551612":[255]},{"1551614":[163]},{"1551616":[161]},{"1551618":[166]},{"1551620":[255]},{"1551622":[255,127,117]},{"1551626":[255]},{"1551628":[255]},{"1551630":[185]},{"1551632":[181]},{"1551634":[170]},{"1551636":[194]},{"1551638":[174]},{"1551640":[187]},{"1551642":[255]},{"1551644":[163]},{"1551646":[161]},{"1551648":[167]},{"1551650":[255]},{"1551652":[255,127,117]},{"1551656":[255]},{"1551658":[255]},{"1551660":[185]},{"1551662":[181]},{"1551664":[170]},{"1551666":[194]},{"1551668":[174]},{"1551670":[187]},{"1551672":[255]},{"1551674":[163]},{"1551676":[161]},{"1551678":[168]},{"1551680":[255]},{"1551682":[255,127,117]},{"1551686":[255]},{"1551688":[255]},{"1551690":[185]},{"1551692":[181]},{"1551694":[170]},{"1551696":[194]},{"1551698":[174]},{"1551700":[187]},{"1551702":[255]},{"1551704":[163]},{"1551706":[161]},{"1551708":[169]},{"1551710":[255]},{"1551712":[255,127,117]},{"1551716":[255]},{"1551718":[255]},{"1551720":[185]},{"1551722":[181]},{"1551724":[170]},{"1551726":[194]},{"1551728":[174]},{"1551730":[187]},{"1551732":[255]},{"1551734":[163]},{"1551736":[162]},{"1551738":[160]},{"1551740":[255]},{"1551742":[255,127,117]},{"1551746":[255]},{"1551748":[255]},{"1551750":[185]},{"1551752":[181]},{"1551754":[170]},{"1551756":[194]},{"1551758":[174]},{"1551760":[187]},{"1551762":[255]},{"1551764":[163]},{"1551766":[162]},{"1551768":[161]},{"1551770":[255]},{"1551772":[255,127,117]},{"1551776":[255]},{"1551778":[255]},{"1551780":[185]},{"1551782":[181]},{"1551784":[170]},{"1551786":[194]},{"1551788":[174]},{"1551790":[187]},{"1551792":[255]},{"1551794":[163]},{"1551796":[162]},{"1551798":[162]},{"1551800":[255]},{"1551802":[255,127,117]},{"1551806":[255]},{"1551808":[255]},{"1551810":[185]},{"1551812":[181]},{"1551814":[170]},{"1551816":[194]},{"1551818":[174]},{"1551820":[187]},{"1551822":[255]},{"1551824":[163]},{"1551826":[162]},{"1551828":[163]},{"1551830":[255]},{"1551832":[255,127,117]},{"1551836":[255]},{"1551838":[255]},{"1551840":[185]},{"1551842":[181]},{"1551844":[170]},{"1551846":[194]},{"1551848":[174]},{"1551850":[187]},{"1551852":[255]},{"1551854":[163]},{"1551856":[162]},{"1551858":[164]},{"1551860":[255]},{"1551862":[255,127,117]},{"1551866":[255]},{"1551868":[255]},{"1551870":[185]},{"1551872":[181]},{"1551874":[170]},{"1551876":[194]},{"1551878":[174]},{"1551880":[187]},{"1551882":[255]},{"1551884":[163]},{"1551886":[162]},{"1551888":[165]},{"1551890":[255]},{"1551892":[255,127,117]},{"1551896":[255]},{"1551898":[255]},{"1551900":[185]},{"1551902":[181]},{"1551904":[170]},{"1551906":[194]},{"1551908":[174]},{"1551910":[187]},{"1551912":[255]},{"1551914":[163]},{"1551916":[162]},{"1551918":[166]},{"1551920":[255]},{"1551922":[255,127,117]},{"1551926":[255]},{"1551928":[255]},{"1551930":[185]},{"1551932":[181]},{"1551934":[170]},{"1551936":[194]},{"1551938":[174]},{"1551940":[187]},{"1551942":[255]},{"1551944":[163]},{"1551946":[162]},{"1551948":[167]},{"1551950":[255]},{"1551952":[255,127,117]},{"1551956":[255]},{"1551958":[255]},{"1551960":[185]},{"1551962":[181]},{"1551964":[170]},{"1551966":[194]},{"1551968":[174]},{"1551970":[187]},{"1551972":[255]},{"1551974":[163]},{"1551976":[162]},{"1551978":[168]},{"1551980":[255]},{"1551982":[255,127,117]},{"1551986":[255]},{"1551988":[255]},{"1551990":[185]},{"1551992":[181]},{"1551994":[170]},{"1551996":[194]},{"1551998":[174]},{"1552000":[187]},{"1552002":[255]},{"1552004":[163]},{"1552006":[162]},{"1552008":[169]},{"1552010":[255]},{"1552012":[255,127,117]},{"1552016":[255]},{"1552018":[255]},{"1552020":[185]},{"1552022":[181]},{"1552024":[170]},{"1552026":[194]},{"1552028":[174]},{"1552030":[187]},{"1552032":[255]},{"1552034":[163]},{"1552036":[163]},{"1552038":[160]},{"1552040":[255]},{"1552042":[255,127,117]},{"1552046":[255]},{"1552048":[255]},{"1552050":[185]},{"1552052":[181]},{"1552054":[170]},{"1552056":[194]},{"1552058":[174]},{"1552060":[187]},{"1552062":[255]},{"1552064":[163]},{"1552066":[163]},{"1552068":[161]},{"1552070":[255]},{"1552072":[255,127,117]},{"1552076":[255]},{"1552078":[255]},{"1552080":[185]},{"1552082":[181]},{"1552084":[170]},{"1552086":[194]},{"1552088":[174]},{"1552090":[187]},{"1552092":[255]},{"1552094":[163]},{"1552096":[163]},{"1552098":[162]},{"1552100":[255]},{"1552102":[255,127,117]},{"1552106":[255]},{"1552108":[255]},{"1552110":[185]},{"1552112":[181]},{"1552114":[170]},{"1552116":[194]},{"1552118":[174]},{"1552120":[187]},{"1552122":[255]},{"1552124":[163]},{"1552126":[163]},{"1552128":[163]},{"1552130":[255]},{"1552132":[255,127,117]},{"1552136":[255]},{"1552138":[255]},{"1552140":[185]},{"1552142":[181]},{"1552144":[170]},{"1552146":[194]},{"1552148":[174]},{"1552150":[187]},{"1552152":[255]},{"1552154":[163]},{"1552156":[163]},{"1552158":[164]},{"1552160":[255]},{"1552162":[255,127,117]},{"1552166":[255]},{"1552168":[255]},{"1552170":[185]},{"1552172":[181]},{"1552174":[170]},{"1552176":[194]},{"1552178":[174]},{"1552180":[187]},{"1552182":[255]},{"1552184":[163]},{"1552186":[163]},{"1552188":[165]},{"1552190":[255]},{"1552192":[255,127,117]},{"1552196":[255]},{"1552198":[255]},{"1552200":[185]},{"1552202":[181]},{"1552204":[170]},{"1552206":[194]},{"1552208":[174]},{"1552210":[187]},{"1552212":[255]},{"1552214":[163]},{"1552216":[163]},{"1552218":[166]},{"1552220":[255]},{"1552222":[255,127,117]},{"1552226":[255]},{"1552228":[255]},{"1552230":[185]},{"1552232":[181]},{"1552234":[170]},{"1552236":[194]},{"1552238":[174]},{"1552240":[187]},{"1552242":[255]},{"1552244":[163]},{"1552246":[163]},{"1552248":[167]},{"1552250":[255]},{"1552252":[255,127,117]},{"1552256":[255]},{"1552258":[255]},{"1552260":[185]},{"1552262":[181]},{"1552264":[170]},{"1552266":[194]},{"1552268":[174]},{"1552270":[187]},{"1552272":[255]},{"1552274":[163]},{"1552276":[163]},{"1552278":[168]},{"1552280":[255]},{"1552282":[255,127,117]},{"1552286":[255]},{"1552288":[255]},{"1552290":[185]},{"1552292":[181]},{"1552294":[170]},{"1552296":[194]},{"1552298":[174]},{"1552300":[187]},{"1552302":[255]},{"1552304":[163]},{"1552306":[163]},{"1552308":[169]},{"1552310":[255]},{"1552312":[255,127,117]},{"1552316":[255]},{"1552318":[255]},{"1552320":[185]},{"1552322":[181]},{"1552324":[170]},{"1552326":[194]},{"1552328":[174]},{"1552330":[187]},{"1552332":[255]},{"1552334":[163]},{"1552336":[164]},{"1552338":[160]},{"1552340":[255]},{"1552342":[255,127,117]},{"1552346":[255]},{"1552348":[255]},{"1552350":[185]},{"1552352":[181]},{"1552354":[170]},{"1552356":[194]},{"1552358":[174]},{"1552360":[187]},{"1552362":[255]},{"1552364":[163]},{"1552366":[164]},{"1552368":[161]},{"1552370":[255]},{"1552372":[255,127,117]},{"1552376":[255]},{"1552378":[255]},{"1552380":[185]},{"1552382":[181]},{"1552384":[170]},{"1552386":[194]},{"1552388":[174]},{"1552390":[187]},{"1552392":[255]},{"1552394":[163]},{"1552396":[164]},{"1552398":[162]},{"1552400":[255]},{"1552402":[255,127,117]},{"1552406":[255]},{"1552408":[255]},{"1552410":[185]},{"1552412":[181]},{"1552414":[170]},{"1552416":[194]},{"1552418":[174]},{"1552420":[187]},{"1552422":[255]},{"1552424":[163]},{"1552426":[164]},{"1552428":[163]},{"1552430":[255]},{"1552432":[255,127,117]},{"1552436":[255]},{"1552438":[255]},{"1552440":[185]},{"1552442":[181]},{"1552444":[170]},{"1552446":[194]},{"1552448":[174]},{"1552450":[187]},{"1552452":[255]},{"1552454":[163]},{"1552456":[164]},{"1552458":[164]},{"1552460":[255]},{"1552462":[255,127,117]},{"1552466":[255]},{"1552468":[255]},{"1552470":[185]},{"1552472":[181]},{"1552474":[170]},{"1552476":[194]},{"1552478":[174]},{"1552480":[187]},{"1552482":[255]},{"1552484":[163]},{"1552486":[164]},{"1552488":[165]},{"1552490":[255]},{"1552492":[255,127,117]},{"1552496":[255]},{"1552498":[255]},{"1552500":[185]},{"1552502":[181]},{"1552504":[170]},{"1552506":[194]},{"1552508":[174]},{"1552510":[187]},{"1552512":[255]},{"1552514":[163]},{"1552516":[164]},{"1552518":[166]},{"1552520":[255]},{"1552522":[255,127,117]},{"1552526":[255]},{"1552528":[255]},{"1552530":[185]},{"1552532":[181]},{"1552534":[170]},{"1552536":[194]},{"1552538":[174]},{"1552540":[187]},{"1552542":[255]},{"1552544":[163]},{"1552546":[164]},{"1552548":[167]},{"1552550":[255]},{"1552552":[255,127,117]},{"1552556":[255]},{"1552558":[255]},{"1552560":[185]},{"1552562":[181]},{"1552564":[170]},{"1552566":[194]},{"1552568":[174]},{"1552570":[187]},{"1552572":[255]},{"1552574":[163]},{"1552576":[164]},{"1552578":[168]},{"1552580":[255]},{"1552582":[255,127,117]},{"1552586":[255]},{"1552588":[255]},{"1552590":[185]},{"1552592":[181]},{"1552594":[170]},{"1552596":[194]},{"1552598":[174]},{"1552600":[187]},{"1552602":[255]},{"1552604":[163]},{"1552606":[164]},{"1552608":[169]},{"1552610":[255]},{"1552612":[255,127,117]},{"1552616":[255]},{"1552618":[255]},{"1552620":[185]},{"1552622":[181]},{"1552624":[170]},{"1552626":[194]},{"1552628":[174]},{"1552630":[187]},{"1552632":[255]},{"1552634":[163]},{"1552636":[165]},{"1552638":[160]},{"1552640":[255]},{"1552642":[255,127,117]},{"1552646":[255]},{"1552648":[255]},{"1552650":[185]},{"1552652":[181]},{"1552654":[170]},{"1552656":[194]},{"1552658":[174]},{"1552660":[187]},{"1552662":[255]},{"1552664":[163]},{"1552666":[165]},{"1552668":[161]},{"1552670":[255]},{"1552672":[255,127,117]},{"1552676":[255]},{"1552678":[255]},{"1552680":[185]},{"1552682":[181]},{"1552684":[170]},{"1552686":[194]},{"1552688":[174]},{"1552690":[187]},{"1552692":[255]},{"1552694":[163]},{"1552696":[165]},{"1552698":[162]},{"1552700":[255]},{"1552702":[255,127,117]},{"1552706":[255]},{"1552708":[255]},{"1552710":[185]},{"1552712":[181]},{"1552714":[170]},{"1552716":[194]},{"1552718":[174]},{"1552720":[187]},{"1552722":[255]},{"1552724":[163]},{"1552726":[165]},{"1552728":[163]},{"1552730":[255]},{"1552732":[255,127,117]},{"1552736":[255]},{"1552738":[255]},{"1552740":[185]},{"1552742":[181]},{"1552744":[170]},{"1552746":[194]},{"1552748":[174]},{"1552750":[187]},{"1552752":[255]},{"1552754":[163]},{"1552756":[165]},{"1552758":[164]},{"1552760":[255]},{"1552762":[255,127,117]},{"1552766":[255]},{"1552768":[255]},{"1552770":[185]},{"1552772":[181]},{"1552774":[170]},{"1552776":[194]},{"1552778":[174]},{"1552780":[187]},{"1552782":[255]},{"1552784":[163]},{"1552786":[165]},{"1552788":[165]},{"1552790":[255]},{"1552792":[255,127,117]},{"1552796":[255]},{"1552798":[255]},{"1552800":[185]},{"1552802":[181]},{"1552804":[170]},{"1552806":[194]},{"1552808":[174]},{"1552810":[187]},{"1552812":[255]},{"1552814":[163]},{"1552816":[165]},{"1552818":[166]},{"1552820":[255]},{"1552822":[255,127,117]},{"1552826":[255]},{"1552828":[255]},{"1552830":[185]},{"1552832":[181]},{"1552834":[170]},{"1552836":[194]},{"1552838":[174]},{"1552840":[187]},{"1552842":[255]},{"1552844":[163]},{"1552846":[165]},{"1552848":[167]},{"1552850":[255]},{"1552852":[255,127,117]},{"1552856":[255]},{"1552858":[255]},{"1552860":[185]},{"1552862":[181]},{"1552864":[170]},{"1552866":[194]},{"1552868":[174]},{"1552870":[187]},{"1552872":[255]},{"1552874":[163]},{"1552876":[165]},{"1552878":[168]},{"1552880":[255]},{"1552882":[255,127,117]},{"1552886":[255]},{"1552888":[255]},{"1552890":[185]},{"1552892":[181]},{"1552894":[170]},{"1552896":[194]},{"1552898":[174]},{"1552900":[187]},{"1552902":[255]},{"1552904":[163]},{"1552906":[165]},{"1552908":[169]},{"1552910":[255]},{"1552912":[255,127,117]},{"1552916":[255]},{"1552918":[255]},{"1552920":[185]},{"1552922":[181]},{"1552924":[170]},{"1552926":[194]},{"1552928":[174]},{"1552930":[187]},{"1552932":[255]},{"1552934":[163]},{"1552936":[166]},{"1552938":[160]},{"1552940":[255]},{"1552942":[255,127,117]},{"1552946":[255]},{"1552948":[255]},{"1552950":[185]},{"1552952":[181]},{"1552954":[170]},{"1552956":[194]},{"1552958":[174]},{"1552960":[187]},{"1552962":[255]},{"1552964":[163]},{"1552966":[166]},{"1552968":[161]},{"1552970":[255]},{"1552972":[255,127,117]},{"1552976":[255]},{"1552978":[255]},{"1552980":[185]},{"1552982":[181]},{"1552984":[170]},{"1552986":[194]},{"1552988":[174]},{"1552990":[187]},{"1552992":[255]},{"1552994":[163]},{"1552996":[166]},{"1552998":[162]},{"1553000":[255]},{"1553002":[255,127,117]},{"1553006":[255]},{"1553008":[255]},{"1553010":[185]},{"1553012":[181]},{"1553014":[170]},{"1553016":[194]},{"1553018":[174]},{"1553020":[187]},{"1553022":[255]},{"1553024":[163]},{"1553026":[166]},{"1553028":[163]},{"1553030":[255]},{"1553032":[255,127,117]},{"1553036":[255]},{"1553038":[255]},{"1553040":[185]},{"1553042":[181]},{"1553044":[170]},{"1553046":[194]},{"1553048":[174]},{"1553050":[187]},{"1553052":[255]},{"1553054":[163]},{"1553056":[166]},{"1553058":[164]},{"1553060":[255]},{"1553062":[255,127,117]},{"1553066":[255]},{"1553068":[255]},{"1553070":[185]},{"1553072":[181]},{"1553074":[170]},{"1553076":[194]},{"1553078":[174]},{"1553080":[187]},{"1553082":[255]},{"1553084":[163]},{"1553086":[166]},{"1553088":[165]},{"1553090":[255]},{"1553092":[255,127,117]},{"1553096":[255]},{"1553098":[255]},{"1553100":[185]},{"1553102":[181]},{"1553104":[170]},{"1553106":[194]},{"1553108":[174]},{"1553110":[187]},{"1553112":[255]},{"1553114":[163]},{"1553116":[166]},{"1553118":[166]},{"1553120":[255]},{"1553122":[255,127,117]},{"1553126":[255]},{"1553128":[255]},{"1553130":[185]},{"1553132":[181]},{"1553134":[170]},{"1553136":[194]},{"1553138":[174]},{"1553140":[187]},{"1553142":[255]},{"1553144":[163]},{"1553146":[166]},{"1553148":[167]},{"1553150":[255]},{"1553152":[255,127,117]},{"1553156":[255]},{"1553158":[255]},{"1553160":[185]},{"1553162":[181]},{"1553164":[170]},{"1553166":[194]},{"1553168":[174]},{"1553170":[187]},{"1553172":[255]},{"1553174":[163]},{"1553176":[166]},{"1553178":[168]},{"1553180":[255]},{"1553182":[255,127,117]},{"1553186":[255]},{"1553188":[255]},{"1553190":[185]},{"1553192":[181]},{"1553194":[170]},{"1553196":[194]},{"1553198":[174]},{"1553200":[187]},{"1553202":[255]},{"1553204":[163]},{"1553206":[166]},{"1553208":[169]},{"1553210":[255]},{"1553212":[255,127,117]},{"1553216":[255]},{"1553218":[255]},{"1553220":[185]},{"1553222":[181]},{"1553224":[170]},{"1553226":[194]},{"1553228":[174]},{"1553230":[187]},{"1553232":[255]},{"1553234":[163]},{"1553236":[167]},{"1553238":[160]},{"1553240":[255]},{"1553242":[255,127,117]},{"1553246":[255]},{"1553248":[255]},{"1553250":[185]},{"1553252":[181]},{"1553254":[170]},{"1553256":[194]},{"1553258":[174]},{"1553260":[187]},{"1553262":[255]},{"1553264":[163]},{"1553266":[167]},{"1553268":[161]},{"1553270":[255]},{"1553272":[255,127,117]},{"1553276":[255]},{"1553278":[255]},{"1553280":[185]},{"1553282":[181]},{"1553284":[170]},{"1553286":[194]},{"1553288":[174]},{"1553290":[187]},{"1553292":[255]},{"1553294":[163]},{"1553296":[167]},{"1553298":[162]},{"1553300":[255]},{"1553302":[255,127,117]},{"1553306":[255]},{"1553308":[255]},{"1553310":[185]},{"1553312":[181]},{"1553314":[170]},{"1553316":[194]},{"1553318":[174]},{"1553320":[187]},{"1553322":[255]},{"1553324":[163]},{"1553326":[167]},{"1553328":[163]},{"1553330":[255]},{"1553332":[255,127,117]},{"1553336":[255]},{"1553338":[255]},{"1553340":[185]},{"1553342":[181]},{"1553344":[170]},{"1553346":[194]},{"1553348":[174]},{"1553350":[187]},{"1553352":[255]},{"1553354":[163]},{"1553356":[167]},{"1553358":[164]},{"1553360":[255]},{"1553362":[255,127,117]},{"1553366":[255]},{"1553368":[255]},{"1553370":[185]},{"1553372":[181]},{"1553374":[170]},{"1553376":[194]},{"1553378":[174]},{"1553380":[187]},{"1553382":[255]},{"1553384":[163]},{"1553386":[167]},{"1553388":[165]},{"1553390":[255]},{"1553392":[255,127,117]},{"1553396":[255]},{"1553398":[255]},{"1553400":[185]},{"1553402":[181]},{"1553404":[170]},{"1553406":[194]},{"1553408":[174]},{"1553410":[187]},{"1553412":[255]},{"1553414":[163]},{"1553416":[167]},{"1553418":[166]},{"1553420":[255]},{"1553422":[255,127,117]},{"1553426":[255]},{"1553428":[255]},{"1553430":[185]},{"1553432":[181]},{"1553434":[170]},{"1553436":[194]},{"1553438":[174]},{"1553440":[187]},{"1553442":[255]},{"1553444":[163]},{"1553446":[167]},{"1553448":[167]},{"1553450":[255]},{"1553452":[255,127,117]},{"1553456":[255]},{"1553458":[255]},{"1553460":[185]},{"1553462":[181]},{"1553464":[170]},{"1553466":[194]},{"1553468":[174]},{"1553470":[187]},{"1553472":[255]},{"1553474":[163]},{"1553476":[167]},{"1553478":[168]},{"1553480":[255]},{"1553482":[255,127,117]},{"1553486":[255]},{"1553488":[255]},{"1553490":[185]},{"1553492":[181]},{"1553494":[170]},{"1553496":[194]},{"1553498":[174]},{"1553500":[187]},{"1553502":[255]},{"1553504":[163]},{"1553506":[167]},{"1553508":[169]},{"1553510":[255]},{"1553512":[255,127,117]},{"1553516":[255]},{"1553518":[255]},{"1553520":[185]},{"1553522":[181]},{"1553524":[170]},{"1553526":[194]},{"1553528":[174]},{"1553530":[187]},{"1553532":[255]},{"1553534":[163]},{"1553536":[168]},{"1553538":[160]},{"1553540":[255]},{"1553542":[255,127,117]},{"1553546":[255]},{"1553548":[255]},{"1553550":[185]},{"1553552":[181]},{"1553554":[170]},{"1553556":[194]},{"1553558":[174]},{"1553560":[187]},{"1553562":[255]},{"1553564":[163]},{"1553566":[168]},{"1553568":[161]},{"1553570":[255]},{"1553572":[255,127,117]},{"1553576":[255]},{"1553578":[255]},{"1553580":[185]},{"1553582":[181]},{"1553584":[170]},{"1553586":[194]},{"1553588":[174]},{"1553590":[187]},{"1553592":[255]},{"1553594":[163]},{"1553596":[168]},{"1553598":[162]},{"1553600":[255]},{"1553602":[255,127,117]},{"1553606":[255]},{"1553608":[255]},{"1553610":[185]},{"1553612":[181]},{"1553614":[170]},{"1553616":[194]},{"1553618":[174]},{"1553620":[187]},{"1553622":[255]},{"1553624":[163]},{"1553626":[168]},{"1553628":[163]},{"1553630":[255]},{"1553632":[255,127,117]},{"1553636":[255]},{"1553638":[255]},{"1553640":[185]},{"1553642":[181]},{"1553644":[170]},{"1553646":[194]},{"1553648":[174]},{"1553650":[187]},{"1553652":[255]},{"1553654":[163]},{"1553656":[168]},{"1553658":[164]},{"1553660":[255]},{"1553662":[255,127,117]},{"1553666":[255]},{"1553668":[255]},{"1553670":[185]},{"1553672":[181]},{"1553674":[170]},{"1553676":[194]},{"1553678":[174]},{"1553680":[187]},{"1553682":[255]},{"1553684":[163]},{"1553686":[168]},{"1553688":[165]},{"1553690":[255]},{"1553692":[255,127,117]},{"1553696":[255]},{"1553698":[255]},{"1553700":[185]},{"1553702":[181]},{"1553704":[170]},{"1553706":[194]},{"1553708":[174]},{"1553710":[187]},{"1553712":[255]},{"1553714":[163]},{"1553716":[168]},{"1553718":[166]},{"1553720":[255]},{"1553722":[255,127,117]},{"1553726":[255]},{"1553728":[255]},{"1553730":[185]},{"1553732":[181]},{"1553734":[170]},{"1553736":[194]},{"1553738":[174]},{"1553740":[187]},{"1553742":[255]},{"1553744":[163]},{"1553746":[168]},{"1553748":[167]},{"1553750":[255]},{"1553752":[255,127,117]},{"1553756":[255]},{"1553758":[255]},{"1553760":[185]},{"1553762":[181]},{"1553764":[170]},{"1553766":[194]},{"1553768":[174]},{"1553770":[187]},{"1553772":[255]},{"1553774":[163]},{"1553776":[168]},{"1553778":[168]},{"1553780":[255]},{"1553782":[255,127,117]},{"1553786":[255]},{"1553788":[255]},{"1553790":[185]},{"1553792":[181]},{"1553794":[170]},{"1553796":[194]},{"1553798":[174]},{"1553800":[187]},{"1553802":[255]},{"1553804":[163]},{"1553806":[168]},{"1553808":[169]},{"1553810":[255]},{"1553812":[255,127,117]},{"1553816":[255]},{"1553818":[255]},{"1553820":[185]},{"1553822":[181]},{"1553824":[170]},{"1553826":[194]},{"1553828":[174]},{"1553830":[187]},{"1553832":[255]},{"1553834":[163]},{"1553836":[169]},{"1553838":[160]},{"1553840":[255]},{"1553842":[255,127,117]},{"1553846":[255]},{"1553848":[255]},{"1553850":[185]},{"1553852":[181]},{"1553854":[170]},{"1553856":[194]},{"1553858":[174]},{"1553860":[187]},{"1553862":[255]},{"1553864":[163]},{"1553866":[169]},{"1553868":[161]},{"1553870":[255]},{"1553872":[255,127,117]},{"1553876":[255]},{"1553878":[255]},{"1553880":[185]},{"1553882":[181]},{"1553884":[170]},{"1553886":[194]},{"1553888":[174]},{"1553890":[187]},{"1553892":[255]},{"1553894":[163]},{"1553896":[169]},{"1553898":[162]},{"1553900":[255]},{"1553902":[255,127,117]},{"1553906":[255]},{"1553908":[255]},{"1553910":[185]},{"1553912":[181]},{"1553914":[170]},{"1553916":[194]},{"1553918":[174]},{"1553920":[187]},{"1553922":[255]},{"1553924":[163]},{"1553926":[169]},{"1553928":[163]},{"1553930":[255]},{"1553932":[255,127,117]},{"1553936":[255]},{"1553938":[255]},{"1553940":[185]},{"1553942":[181]},{"1553944":[170]},{"1553946":[194]},{"1553948":[174]},{"1553950":[187]},{"1553952":[255]},{"1553954":[163]},{"1553956":[169]},{"1553958":[164]},{"1553960":[255]},{"1553962":[255,127,117]},{"1553966":[255]},{"1553968":[255]},{"1553970":[185]},{"1553972":[181]},{"1553974":[170]},{"1553976":[194]},{"1553978":[174]},{"1553980":[187]},{"1553982":[255]},{"1553984":[163]},{"1553986":[169]},{"1553988":[165]},{"1553990":[255]},{"1553992":[255,127,117]},{"1553996":[255]},{"1553998":[255]},{"1554000":[185]},{"1554002":[181]},{"1554004":[170]},{"1554006":[194]},{"1554008":[174]},{"1554010":[187]},{"1554012":[255]},{"1554014":[163]},{"1554016":[169]},{"1554018":[166]},{"1554020":[255]},{"1554022":[255,127,117]},{"1554026":[255]},{"1554028":[255]},{"1554030":[185]},{"1554032":[181]},{"1554034":[170]},{"1554036":[194]},{"1554038":[174]},{"1554040":[187]},{"1554042":[255]},{"1554044":[163]},{"1554046":[169]},{"1554048":[167]},{"1554050":[255]},{"1554052":[255,127,117]},{"1554056":[255]},{"1554058":[255]},{"1554060":[185]},{"1554062":[181]},{"1554064":[170]},{"1554066":[194]},{"1554068":[174]},{"1554070":[187]},{"1554072":[255]},{"1554074":[163]},{"1554076":[169]},{"1554078":[168]},{"1554080":[255]},{"1554082":[255,127,117]},{"1554086":[255]},{"1554088":[255]},{"1554090":[185]},{"1554092":[181]},{"1554094":[170]},{"1554096":[194]},{"1554098":[174]},{"1554100":[187]},{"1554102":[255]},{"1554104":[163]},{"1554106":[169]},{"1554108":[169]},{"1554110":[255]},{"1554112":[255,127,117]},{"1554116":[255]},{"1554118":[255]},{"1554120":[185]},{"1554122":[181]},{"1554124":[170]},{"1554126":[194]},{"1554128":[174]},{"1554130":[187]},{"1554132":[255]},{"1554134":[164]},{"1554136":[160]},{"1554138":[160]},{"1554140":[255]},{"1554142":[255,127,117]},{"1554146":[255]},{"1554148":[255]},{"1554150":[185]},{"1554152":[181]},{"1554154":[170]},{"1554156":[194]},{"1554158":[174]},{"1554160":[187]},{"1554162":[255]},{"1554164":[164]},{"1554166":[160]},{"1554168":[161]},{"1554170":[255]},{"1554172":[255,127,117]},{"1554176":[255]},{"1554178":[255]},{"1554180":[185]},{"1554182":[181]},{"1554184":[170]},{"1554186":[194]},{"1554188":[174]},{"1554190":[187]},{"1554192":[255]},{"1554194":[164]},{"1554196":[160]},{"1554198":[162]},{"1554200":[255]},{"1554202":[255,127,117]},{"1554206":[255]},{"1554208":[255]},{"1554210":[185]},{"1554212":[181]},{"1554214":[170]},{"1554216":[194]},{"1554218":[174]},{"1554220":[187]},{"1554222":[255]},{"1554224":[164]},{"1554226":[160]},{"1554228":[163]},{"1554230":[255]},{"1554232":[255,127,117]},{"1554236":[255]},{"1554238":[255]},{"1554240":[185]},{"1554242":[181]},{"1554244":[170]},{"1554246":[194]},{"1554248":[174]},{"1554250":[187]},{"1554252":[255]},{"1554254":[164]},{"1554256":[160]},{"1554258":[164]},{"1554260":[255]},{"1554262":[255,127,117]},{"1554266":[255]},{"1554268":[255]},{"1554270":[185]},{"1554272":[181]},{"1554274":[170]},{"1554276":[194]},{"1554278":[174]},{"1554280":[187]},{"1554282":[255]},{"1554284":[164]},{"1554286":[160]},{"1554288":[165]},{"1554290":[255]},{"1554292":[255,127,117]},{"1554296":[255]},{"1554298":[255]},{"1554300":[185]},{"1554302":[181]},{"1554304":[170]},{"1554306":[194]},{"1554308":[174]},{"1554310":[187]},{"1554312":[255]},{"1554314":[164]},{"1554316":[160]},{"1554318":[166]},{"1554320":[255]},{"1554322":[255,127,117]},{"1554326":[255]},{"1554328":[255]},{"1554330":[185]},{"1554332":[181]},{"1554334":[170]},{"1554336":[194]},{"1554338":[174]},{"1554340":[187]},{"1554342":[255]},{"1554344":[164]},{"1554346":[160]},{"1554348":[167]},{"1554350":[255]},{"1554352":[255,127,117]},{"1554356":[255]},{"1554358":[255]},{"1554360":[185]},{"1554362":[181]},{"1554364":[170]},{"1554366":[194]},{"1554368":[174]},{"1554370":[187]},{"1554372":[255]},{"1554374":[164]},{"1554376":[160]},{"1554378":[168]},{"1554380":[255]},{"1554382":[255,127,117]},{"1554386":[255]},{"1554388":[255]},{"1554390":[185]},{"1554392":[181]},{"1554394":[170]},{"1554396":[194]},{"1554398":[174]},{"1554400":[187]},{"1554402":[255]},{"1554404":[164]},{"1554406":[160]},{"1554408":[169]},{"1554410":[255]},{"1554412":[255,127,117]},{"1554416":[255]},{"1554418":[255]},{"1554420":[185]},{"1554422":[181]},{"1554424":[170]},{"1554426":[194]},{"1554428":[174]},{"1554430":[187]},{"1554432":[255]},{"1554434":[164]},{"1554436":[161]},{"1554438":[160]},{"1554440":[255]},{"1554442":[255,127,117]},{"1554446":[255]},{"1554448":[255]},{"1554450":[185]},{"1554452":[181]},{"1554454":[170]},{"1554456":[194]},{"1554458":[174]},{"1554460":[187]},{"1554462":[255]},{"1554464":[164]},{"1554466":[161]},{"1554468":[161]},{"1554470":[255]},{"1554472":[255,127,117]},{"1554476":[255]},{"1554478":[255]},{"1554480":[185]},{"1554482":[181]},{"1554484":[170]},{"1554486":[194]},{"1554488":[174]},{"1554490":[187]},{"1554492":[255]},{"1554494":[164]},{"1554496":[161]},{"1554498":[162]},{"1554500":[255]},{"1554502":[255,127,117]},{"1554506":[255]},{"1554508":[255]},{"1554510":[185]},{"1554512":[181]},{"1554514":[170]},{"1554516":[194]},{"1554518":[174]},{"1554520":[187]},{"1554522":[255]},{"1554524":[164]},{"1554526":[161]},{"1554528":[163]},{"1554530":[255]},{"1554532":[255,127,117]},{"1554536":[255]},{"1554538":[255]},{"1554540":[185]},{"1554542":[181]},{"1554544":[170]},{"1554546":[194]},{"1554548":[174]},{"1554550":[187]},{"1554552":[255]},{"1554554":[164]},{"1554556":[161]},{"1554558":[164]},{"1554560":[255]},{"1554562":[255,127,117]},{"1554566":[255]},{"1554568":[255]},{"1554570":[185]},{"1554572":[181]},{"1554574":[170]},{"1554576":[194]},{"1554578":[174]},{"1554580":[187]},{"1554582":[255]},{"1554584":[164]},{"1554586":[161]},{"1554588":[165]},{"1554590":[255]},{"1554592":[255,127,117]},{"1554596":[255]},{"1554598":[255]},{"1554600":[185]},{"1554602":[181]},{"1554604":[170]},{"1554606":[194]},{"1554608":[174]},{"1554610":[187]},{"1554612":[255]},{"1554614":[164]},{"1554616":[161]},{"1554618":[166]},{"1554620":[255]},{"1554622":[255,127,117]},{"1554626":[255]},{"1554628":[255]},{"1554630":[185]},{"1554632":[181]},{"1554634":[170]},{"1554636":[194]},{"1554638":[174]},{"1554640":[187]},{"1554642":[255]},{"1554644":[164]},{"1554646":[161]},{"1554648":[167]},{"1554650":[255]},{"1554652":[255,127,117]},{"1554656":[255]},{"1554658":[255]},{"1554660":[185]},{"1554662":[181]},{"1554664":[170]},{"1554666":[194]},{"1554668":[174]},{"1554670":[187]},{"1554672":[255]},{"1554674":[164]},{"1554676":[161]},{"1554678":[168]},{"1554680":[255]},{"1554682":[255,127,117]},{"1554686":[255]},{"1554688":[255]},{"1554690":[185]},{"1554692":[181]},{"1554694":[170]},{"1554696":[194]},{"1554698":[174]},{"1554700":[187]},{"1554702":[255]},{"1554704":[164]},{"1554706":[161]},{"1554708":[169]},{"1554710":[255]},{"1554712":[255,127,117]},{"1554716":[255]},{"1554718":[255]},{"1554720":[185]},{"1554722":[181]},{"1554724":[170]},{"1554726":[194]},{"1554728":[174]},{"1554730":[187]},{"1554732":[255]},{"1554734":[164]},{"1554736":[162]},{"1554738":[160]},{"1554740":[255]},{"1554742":[255,127,117]},{"1554746":[255]},{"1554748":[255]},{"1554750":[185]},{"1554752":[181]},{"1554754":[170]},{"1554756":[194]},{"1554758":[174]},{"1554760":[187]},{"1554762":[255]},{"1554764":[164]},{"1554766":[162]},{"1554768":[161]},{"1554770":[255]},{"1554772":[255,127,117]},{"1554776":[255]},{"1554778":[255]},{"1554780":[185]},{"1554782":[181]},{"1554784":[170]},{"1554786":[194]},{"1554788":[174]},{"1554790":[187]},{"1554792":[255]},{"1554794":[164]},{"1554796":[162]},{"1554798":[162]},{"1554800":[255]},{"1554802":[255,127,117]},{"1554806":[255]},{"1554808":[255]},{"1554810":[185]},{"1554812":[181]},{"1554814":[170]},{"1554816":[194]},{"1554818":[174]},{"1554820":[187]},{"1554822":[255]},{"1554824":[164]},{"1554826":[162]},{"1554828":[163]},{"1554830":[255]},{"1554832":[255,127,117]},{"1554836":[255]},{"1554838":[255]},{"1554840":[185]},{"1554842":[181]},{"1554844":[170]},{"1554846":[194]},{"1554848":[174]},{"1554850":[187]},{"1554852":[255]},{"1554854":[164]},{"1554856":[162]},{"1554858":[164]},{"1554860":[255]},{"1554862":[255,127,117]},{"1554866":[255]},{"1554868":[255]},{"1554870":[185]},{"1554872":[181]},{"1554874":[170]},{"1554876":[194]},{"1554878":[174]},{"1554880":[187]},{"1554882":[255]},{"1554884":[164]},{"1554886":[162]},{"1554888":[165]},{"1554890":[255]},{"1554892":[255,127,117]},{"1554896":[255]},{"1554898":[255]},{"1554900":[185]},{"1554902":[181]},{"1554904":[170]},{"1554906":[194]},{"1554908":[174]},{"1554910":[187]},{"1554912":[255]},{"1554914":[164]},{"1554916":[162]},{"1554918":[166]},{"1554920":[255]},{"1554922":[255,127,117]},{"1554926":[255]},{"1554928":[255]},{"1554930":[185]},{"1554932":[181]},{"1554934":[170]},{"1554936":[194]},{"1554938":[174]},{"1554940":[187]},{"1554942":[255]},{"1554944":[164]},{"1554946":[162]},{"1554948":[167]},{"1554950":[255]},{"1554952":[255,127,117]},{"1554956":[255]},{"1554958":[255]},{"1554960":[185]},{"1554962":[181]},{"1554964":[170]},{"1554966":[194]},{"1554968":[174]},{"1554970":[187]},{"1554972":[255]},{"1554974":[164]},{"1554976":[162]},{"1554978":[168]},{"1554980":[255]},{"1554982":[255,127,117]},{"1554986":[255]},{"1554988":[255]},{"1554990":[185]},{"1554992":[181]},{"1554994":[170]},{"1554996":[194]},{"1554998":[174]},{"1555000":[187]},{"1555002":[255]},{"1555004":[164]},{"1555006":[162]},{"1555008":[169]},{"1555010":[255]},{"1555012":[255,127,117]},{"1555016":[255]},{"1555018":[255]},{"1555020":[185]},{"1555022":[181]},{"1555024":[170]},{"1555026":[194]},{"1555028":[174]},{"1555030":[187]},{"1555032":[255]},{"1555034":[164]},{"1555036":[163]},{"1555038":[160]},{"1555040":[255]},{"1555042":[255,127,117]},{"1555046":[255]},{"1555048":[255]},{"1555050":[185]},{"1555052":[181]},{"1555054":[170]},{"1555056":[194]},{"1555058":[174]},{"1555060":[187]},{"1555062":[255]},{"1555064":[164]},{"1555066":[163]},{"1555068":[161]},{"1555070":[255]},{"1555072":[255,127,117]},{"1555076":[255]},{"1555078":[255]},{"1555080":[185]},{"1555082":[181]},{"1555084":[170]},{"1555086":[194]},{"1555088":[174]},{"1555090":[187]},{"1555092":[255]},{"1555094":[164]},{"1555096":[163]},{"1555098":[162]},{"1555100":[255]},{"1555102":[255,127,117]},{"1555106":[255]},{"1555108":[255]},{"1555110":[185]},{"1555112":[181]},{"1555114":[170]},{"1555116":[194]},{"1555118":[174]},{"1555120":[187]},{"1555122":[255]},{"1555124":[164]},{"1555126":[163]},{"1555128":[163]},{"1555130":[255]},{"1555132":[255,127,117]},{"1555136":[255]},{"1555138":[255]},{"1555140":[185]},{"1555142":[181]},{"1555144":[170]},{"1555146":[194]},{"1555148":[174]},{"1555150":[187]},{"1555152":[255]},{"1555154":[164]},{"1555156":[163]},{"1555158":[164]},{"1555160":[255]},{"1555162":[255,127,117]},{"1555166":[255]},{"1555168":[255]},{"1555170":[185]},{"1555172":[181]},{"1555174":[170]},{"1555176":[194]},{"1555178":[174]},{"1555180":[187]},{"1555182":[255]},{"1555184":[164]},{"1555186":[163]},{"1555188":[165]},{"1555190":[255]},{"1555192":[255,127,117]},{"1555196":[255]},{"1555198":[255]},{"1555200":[185]},{"1555202":[181]},{"1555204":[170]},{"1555206":[194]},{"1555208":[174]},{"1555210":[187]},{"1555212":[255]},{"1555214":[164]},{"1555216":[163]},{"1555218":[166]},{"1555220":[255]},{"1555222":[255,127,117]},{"1555226":[255]},{"1555228":[255]},{"1555230":[185]},{"1555232":[181]},{"1555234":[170]},{"1555236":[194]},{"1555238":[174]},{"1555240":[187]},{"1555242":[255]},{"1555244":[164]},{"1555246":[163]},{"1555248":[167]},{"1555250":[255]},{"1555252":[255,127,117]},{"1555256":[255]},{"1555258":[255]},{"1555260":[185]},{"1555262":[181]},{"1555264":[170]},{"1555266":[194]},{"1555268":[174]},{"1555270":[187]},{"1555272":[255]},{"1555274":[164]},{"1555276":[163]},{"1555278":[168]},{"1555280":[255]},{"1555282":[255,127,117]},{"1555286":[255]},{"1555288":[255]},{"1555290":[185]},{"1555292":[181]},{"1555294":[170]},{"1555296":[194]},{"1555298":[174]},{"1555300":[187]},{"1555302":[255]},{"1555304":[164]},{"1555306":[163]},{"1555308":[169]},{"1555310":[255]},{"1555312":[255,127,117]},{"1555316":[255]},{"1555318":[255]},{"1555320":[185]},{"1555322":[181]},{"1555324":[170]},{"1555326":[194]},{"1555328":[174]},{"1555330":[187]},{"1555332":[255]},{"1555334":[164]},{"1555336":[164]},{"1555338":[160]},{"1555340":[255]},{"1555342":[255,127,117]},{"1555346":[255]},{"1555348":[255]},{"1555350":[185]},{"1555352":[181]},{"1555354":[170]},{"1555356":[194]},{"1555358":[174]},{"1555360":[187]},{"1555362":[255]},{"1555364":[164]},{"1555366":[164]},{"1555368":[161]},{"1555370":[255]},{"1555372":[255,127,117]},{"1555376":[255]},{"1555378":[255]},{"1555380":[185]},{"1555382":[181]},{"1555384":[170]},{"1555386":[194]},{"1555388":[174]},{"1555390":[187]},{"1555392":[255]},{"1555394":[164]},{"1555396":[164]},{"1555398":[162]},{"1555400":[255]},{"1555402":[255,127,117]},{"1555406":[255]},{"1555408":[255]},{"1555410":[185]},{"1555412":[181]},{"1555414":[170]},{"1555416":[194]},{"1555418":[174]},{"1555420":[187]},{"1555422":[255]},{"1555424":[164]},{"1555426":[164]},{"1555428":[163]},{"1555430":[255]},{"1555432":[255,127,117]},{"1555436":[255]},{"1555438":[255]},{"1555440":[185]},{"1555442":[181]},{"1555444":[170]},{"1555446":[194]},{"1555448":[174]},{"1555450":[187]},{"1555452":[255]},{"1555454":[164]},{"1555456":[164]},{"1555458":[164]},{"1555460":[255]},{"1555462":[255,127,117]},{"1555466":[255]},{"1555468":[255]},{"1555470":[185]},{"1555472":[181]},{"1555474":[170]},{"1555476":[194]},{"1555478":[174]},{"1555480":[187]},{"1555482":[255]},{"1555484":[164]},{"1555486":[164]},{"1555488":[165]},{"1555490":[255]},{"1555492":[255,127,117]},{"1555496":[255]},{"1555498":[255]},{"1555500":[185]},{"1555502":[181]},{"1555504":[170]},{"1555506":[194]},{"1555508":[174]},{"1555510":[187]},{"1555512":[255]},{"1555514":[164]},{"1555516":[164]},{"1555518":[166]},{"1555520":[255]},{"1555522":[255,127,117]},{"1555526":[255]},{"1555528":[255]},{"1555530":[185]},{"1555532":[181]},{"1555534":[170]},{"1555536":[194]},{"1555538":[174]},{"1555540":[187]},{"1555542":[255]},{"1555544":[164]},{"1555546":[164]},{"1555548":[167]},{"1555550":[255]},{"1555552":[255,127,117]},{"1555556":[255]},{"1555558":[255]},{"1555560":[185]},{"1555562":[181]},{"1555564":[170]},{"1555566":[194]},{"1555568":[174]},{"1555570":[187]},{"1555572":[255]},{"1555574":[164]},{"1555576":[164]},{"1555578":[168]},{"1555580":[255]},{"1555582":[255,127,117]},{"1555586":[255]},{"1555588":[255]},{"1555590":[185]},{"1555592":[181]},{"1555594":[170]},{"1555596":[194]},{"1555598":[174]},{"1555600":[187]},{"1555602":[255]},{"1555604":[164]},{"1555606":[164]},{"1555608":[169]},{"1555610":[255]},{"1555612":[255,127,117]},{"1555616":[255]},{"1555618":[255]},{"1555620":[185]},{"1555622":[181]},{"1555624":[170]},{"1555626":[194]},{"1555628":[174]},{"1555630":[187]},{"1555632":[255]},{"1555634":[164]},{"1555636":[165]},{"1555638":[160]},{"1555640":[255]},{"1555642":[255,127,117]},{"1555646":[255]},{"1555648":[255]},{"1555650":[185]},{"1555652":[181]},{"1555654":[170]},{"1555656":[194]},{"1555658":[174]},{"1555660":[187]},{"1555662":[255]},{"1555664":[164]},{"1555666":[165]},{"1555668":[161]},{"1555670":[255]},{"1555672":[255,127,117]},{"1555676":[255]},{"1555678":[255]},{"1555680":[185]},{"1555682":[181]},{"1555684":[170]},{"1555686":[194]},{"1555688":[174]},{"1555690":[187]},{"1555692":[255]},{"1555694":[164]},{"1555696":[165]},{"1555698":[162]},{"1555700":[255]},{"1555702":[255,127,117]},{"1555706":[255]},{"1555708":[255]},{"1555710":[185]},{"1555712":[181]},{"1555714":[170]},{"1555716":[194]},{"1555718":[174]},{"1555720":[187]},{"1555722":[255]},{"1555724":[164]},{"1555726":[165]},{"1555728":[163]},{"1555730":[255]},{"1555732":[255,127,117]},{"1555736":[255]},{"1555738":[255]},{"1555740":[185]},{"1555742":[181]},{"1555744":[170]},{"1555746":[194]},{"1555748":[174]},{"1555750":[187]},{"1555752":[255]},{"1555754":[164]},{"1555756":[165]},{"1555758":[164]},{"1555760":[255]},{"1555762":[255,127,117]},{"1555766":[255]},{"1555768":[255]},{"1555770":[185]},{"1555772":[181]},{"1555774":[170]},{"1555776":[194]},{"1555778":[174]},{"1555780":[187]},{"1555782":[255]},{"1555784":[164]},{"1555786":[165]},{"1555788":[165]},{"1555790":[255]},{"1555792":[255,127,117]},{"1555796":[255]},{"1555798":[255]},{"1555800":[185]},{"1555802":[181]},{"1555804":[170]},{"1555806":[194]},{"1555808":[174]},{"1555810":[187]},{"1555812":[255]},{"1555814":[164]},{"1555816":[165]},{"1555818":[166]},{"1555820":[255]},{"1555822":[255,127,117]},{"1555826":[255]},{"1555828":[255]},{"1555830":[185]},{"1555832":[181]},{"1555834":[170]},{"1555836":[194]},{"1555838":[174]},{"1555840":[187]},{"1555842":[255]},{"1555844":[164]},{"1555846":[165]},{"1555848":[167]},{"1555850":[255]},{"1555852":[255,127,117]},{"1555856":[255]},{"1555858":[255]},{"1555860":[185]},{"1555862":[181]},{"1555864":[170]},{"1555866":[194]},{"1555868":[174]},{"1555870":[187]},{"1555872":[255]},{"1555874":[164]},{"1555876":[165]},{"1555878":[168]},{"1555880":[255]},{"1555882":[255,127,117]},{"1555886":[255]},{"1555888":[255]},{"1555890":[185]},{"1555892":[181]},{"1555894":[170]},{"1555896":[194]},{"1555898":[174]},{"1555900":[187]},{"1555902":[255]},{"1555904":[164]},{"1555906":[165]},{"1555908":[169]},{"1555910":[255]},{"1555912":[255,127,117]},{"1555916":[255]},{"1555918":[255]},{"1555920":[185]},{"1555922":[181]},{"1555924":[170]},{"1555926":[194]},{"1555928":[174]},{"1555930":[187]},{"1555932":[255]},{"1555934":[164]},{"1555936":[166]},{"1555938":[160]},{"1555940":[255]},{"1555942":[255,127,117]},{"1555946":[255]},{"1555948":[255]},{"1555950":[185]},{"1555952":[181]},{"1555954":[170]},{"1555956":[194]},{"1555958":[174]},{"1555960":[187]},{"1555962":[255]},{"1555964":[164]},{"1555966":[166]},{"1555968":[161]},{"1555970":[255]},{"1555972":[255,127,117]},{"1555976":[255]},{"1555978":[255]},{"1555980":[185]},{"1555982":[181]},{"1555984":[170]},{"1555986":[194]},{"1555988":[174]},{"1555990":[187]},{"1555992":[255]},{"1555994":[164]},{"1555996":[166]},{"1555998":[162]},{"1556000":[255]},{"1556002":[255,127,117]},{"1556006":[255]},{"1556008":[255]},{"1556010":[185]},{"1556012":[181]},{"1556014":[170]},{"1556016":[194]},{"1556018":[174]},{"1556020":[187]},{"1556022":[255]},{"1556024":[164]},{"1556026":[166]},{"1556028":[163]},{"1556030":[255]},{"1556032":[255,127,117]},{"1556036":[255]},{"1556038":[255]},{"1556040":[185]},{"1556042":[181]},{"1556044":[170]},{"1556046":[194]},{"1556048":[174]},{"1556050":[187]},{"1556052":[255]},{"1556054":[164]},{"1556056":[166]},{"1556058":[164]},{"1556060":[255]},{"1556062":[255,127,117]},{"1556066":[255]},{"1556068":[255]},{"1556070":[185]},{"1556072":[181]},{"1556074":[170]},{"1556076":[194]},{"1556078":[174]},{"1556080":[187]},{"1556082":[255]},{"1556084":[164]},{"1556086":[166]},{"1556088":[165]},{"1556090":[255]},{"1556092":[255,127,117]},{"1556096":[255]},{"1556098":[255]},{"1556100":[185]},{"1556102":[181]},{"1556104":[170]},{"1556106":[194]},{"1556108":[174]},{"1556110":[187]},{"1556112":[255]},{"1556114":[164]},{"1556116":[166]},{"1556118":[166]},{"1556120":[255]},{"1556122":[255,127,117]},{"1556126":[255]},{"1556128":[255]},{"1556130":[185]},{"1556132":[181]},{"1556134":[170]},{"1556136":[194]},{"1556138":[174]},{"1556140":[187]},{"1556142":[255]},{"1556144":[164]},{"1556146":[166]},{"1556148":[167]},{"1556150":[255]},{"1556152":[255,127,117]},{"1556156":[255]},{"1556158":[255]},{"1556160":[185]},{"1556162":[181]},{"1556164":[170]},{"1556166":[194]},{"1556168":[174]},{"1556170":[187]},{"1556172":[255]},{"1556174":[164]},{"1556176":[166]},{"1556178":[168]},{"1556180":[255]},{"1556182":[255,127,117]},{"1556186":[255]},{"1556188":[255]},{"1556190":[185]},{"1556192":[181]},{"1556194":[170]},{"1556196":[194]},{"1556198":[174]},{"1556200":[187]},{"1556202":[255]},{"1556204":[164]},{"1556206":[166]},{"1556208":[169]},{"1556210":[255]},{"1556212":[255,127,117]},{"1556216":[255]},{"1556218":[255]},{"1556220":[185]},{"1556222":[181]},{"1556224":[170]},{"1556226":[194]},{"1556228":[174]},{"1556230":[187]},{"1556232":[255]},{"1556234":[164]},{"1556236":[167]},{"1556238":[160]},{"1556240":[255]},{"1556242":[255,127,117]},{"1556246":[255]},{"1556248":[255]},{"1556250":[185]},{"1556252":[181]},{"1556254":[170]},{"1556256":[194]},{"1556258":[174]},{"1556260":[187]},{"1556262":[255]},{"1556264":[164]},{"1556266":[167]},{"1556268":[161]},{"1556270":[255]},{"1556272":[255,127,117]},{"1556276":[255]},{"1556278":[255]},{"1556280":[185]},{"1556282":[181]},{"1556284":[170]},{"1556286":[194]},{"1556288":[174]},{"1556290":[187]},{"1556292":[255]},{"1556294":[164]},{"1556296":[167]},{"1556298":[162]},{"1556300":[255]},{"1556302":[255,127,117]},{"1556306":[255]},{"1556308":[255]},{"1556310":[185]},{"1556312":[181]},{"1556314":[170]},{"1556316":[194]},{"1556318":[174]},{"1556320":[187]},{"1556322":[255]},{"1556324":[164]},{"1556326":[167]},{"1556328":[163]},{"1556330":[255]},{"1556332":[255,127,117]},{"1556336":[255]},{"1556338":[255]},{"1556340":[185]},{"1556342":[181]},{"1556344":[170]},{"1556346":[194]},{"1556348":[174]},{"1556350":[187]},{"1556352":[255]},{"1556354":[164]},{"1556356":[167]},{"1556358":[164]},{"1556360":[255]},{"1556362":[255,127,117]},{"1556366":[255]},{"1556368":[255]},{"1556370":[185]},{"1556372":[181]},{"1556374":[170]},{"1556376":[194]},{"1556378":[174]},{"1556380":[187]},{"1556382":[255]},{"1556384":[164]},{"1556386":[167]},{"1556388":[165]},{"1556390":[255]},{"1556392":[255,127,117]},{"1556396":[255]},{"1556398":[255]},{"1556400":[185]},{"1556402":[181]},{"1556404":[170]},{"1556406":[194]},{"1556408":[174]},{"1556410":[187]},{"1556412":[255]},{"1556414":[164]},{"1556416":[167]},{"1556418":[166]},{"1556420":[255]},{"1556422":[255,127,117]},{"1556426":[255]},{"1556428":[255]},{"1556430":[185]},{"1556432":[181]},{"1556434":[170]},{"1556436":[194]},{"1556438":[174]},{"1556440":[187]},{"1556442":[255]},{"1556444":[164]},{"1556446":[167]},{"1556448":[167]},{"1556450":[255]},{"1556452":[255,127,117]},{"1556456":[255]},{"1556458":[255]},{"1556460":[185]},{"1556462":[181]},{"1556464":[170]},{"1556466":[194]},{"1556468":[174]},{"1556470":[187]},{"1556472":[255]},{"1556474":[164]},{"1556476":[167]},{"1556478":[168]},{"1556480":[255]},{"1556482":[255,127,117]},{"1556486":[255]},{"1556488":[255]},{"1556490":[185]},{"1556492":[181]},{"1556494":[170]},{"1556496":[194]},{"1556498":[174]},{"1556500":[187]},{"1556502":[255]},{"1556504":[164]},{"1556506":[167]},{"1556508":[169]},{"1556510":[255]},{"1556512":[255,127,117]},{"1556516":[255]},{"1556518":[255]},{"1556520":[185]},{"1556522":[181]},{"1556524":[170]},{"1556526":[194]},{"1556528":[174]},{"1556530":[187]},{"1556532":[255]},{"1556534":[164]},{"1556536":[168]},{"1556538":[160]},{"1556540":[255]},{"1556542":[255,127,117]},{"1556546":[255]},{"1556548":[255]},{"1556550":[185]},{"1556552":[181]},{"1556554":[170]},{"1556556":[194]},{"1556558":[174]},{"1556560":[187]},{"1556562":[255]},{"1556564":[164]},{"1556566":[168]},{"1556568":[161]},{"1556570":[255]},{"1556572":[255,127,117]},{"1556576":[255]},{"1556578":[255]},{"1556580":[185]},{"1556582":[181]},{"1556584":[170]},{"1556586":[194]},{"1556588":[174]},{"1556590":[187]},{"1556592":[255]},{"1556594":[164]},{"1556596":[168]},{"1556598":[162]},{"1556600":[255]},{"1556602":[255,127,117]},{"1556606":[255]},{"1556608":[255]},{"1556610":[185]},{"1556612":[181]},{"1556614":[170]},{"1556616":[194]},{"1556618":[174]},{"1556620":[187]},{"1556622":[255]},{"1556624":[164]},{"1556626":[168]},{"1556628":[163]},{"1556630":[255]},{"1556632":[255,127,117]},{"1556636":[255]},{"1556638":[255]},{"1556640":[185]},{"1556642":[181]},{"1556644":[170]},{"1556646":[194]},{"1556648":[174]},{"1556650":[187]},{"1556652":[255]},{"1556654":[164]},{"1556656":[168]},{"1556658":[164]},{"1556660":[255]},{"1556662":[255,127,117]},{"1556666":[255]},{"1556668":[255]},{"1556670":[185]},{"1556672":[181]},{"1556674":[170]},{"1556676":[194]},{"1556678":[174]},{"1556680":[187]},{"1556682":[255]},{"1556684":[164]},{"1556686":[168]},{"1556688":[165]},{"1556690":[255]},{"1556692":[255,127,117]},{"1556696":[255]},{"1556698":[255]},{"1556700":[185]},{"1556702":[181]},{"1556704":[170]},{"1556706":[194]},{"1556708":[174]},{"1556710":[187]},{"1556712":[255]},{"1556714":[164]},{"1556716":[168]},{"1556718":[166]},{"1556720":[255]},{"1556722":[255,127,117]},{"1556726":[255]},{"1556728":[255]},{"1556730":[185]},{"1556732":[181]},{"1556734":[170]},{"1556736":[194]},{"1556738":[174]},{"1556740":[187]},{"1556742":[255]},{"1556744":[164]},{"1556746":[168]},{"1556748":[167]},{"1556750":[255]},{"1556752":[255,127,117]},{"1556756":[255]},{"1556758":[255]},{"1556760":[185]},{"1556762":[181]},{"1556764":[170]},{"1556766":[194]},{"1556768":[174]},{"1556770":[187]},{"1556772":[255]},{"1556774":[164]},{"1556776":[168]},{"1556778":[168]},{"1556780":[255]},{"1556782":[255,127,117]},{"1556786":[255]},{"1556788":[255]},{"1556790":[185]},{"1556792":[181]},{"1556794":[170]},{"1556796":[194]},{"1556798":[174]},{"1556800":[187]},{"1556802":[255]},{"1556804":[164]},{"1556806":[168]},{"1556808":[169]},{"1556810":[255]},{"1556812":[255,127,117]},{"1556816":[255]},{"1556818":[255]},{"1556820":[185]},{"1556822":[181]},{"1556824":[170]},{"1556826":[194]},{"1556828":[174]},{"1556830":[187]},{"1556832":[255]},{"1556834":[164]},{"1556836":[169]},{"1556838":[160]},{"1556840":[255]},{"1556842":[255,127,117]},{"1556846":[255]},{"1556848":[255]},{"1556850":[185]},{"1556852":[181]},{"1556854":[170]},{"1556856":[194]},{"1556858":[174]},{"1556860":[187]},{"1556862":[255]},{"1556864":[164]},{"1556866":[169]},{"1556868":[161]},{"1556870":[255]},{"1556872":[255,127,117]},{"1556876":[255]},{"1556878":[255]},{"1556880":[185]},{"1556882":[181]},{"1556884":[170]},{"1556886":[194]},{"1556888":[174]},{"1556890":[187]},{"1556892":[255]},{"1556894":[164]},{"1556896":[169]},{"1556898":[162]},{"1556900":[255]},{"1556902":[255,127,117]},{"1556906":[255]},{"1556908":[255]},{"1556910":[185]},{"1556912":[181]},{"1556914":[170]},{"1556916":[194]},{"1556918":[174]},{"1556920":[187]},{"1556922":[255]},{"1556924":[164]},{"1556926":[169]},{"1556928":[163]},{"1556930":[255]},{"1556932":[255,127,117]},{"1556936":[255]},{"1556938":[255]},{"1556940":[185]},{"1556942":[181]},{"1556944":[170]},{"1556946":[194]},{"1556948":[174]},{"1556950":[187]},{"1556952":[255]},{"1556954":[164]},{"1556956":[169]},{"1556958":[164]},{"1556960":[255]},{"1556962":[255,127,117]},{"1556966":[255]},{"1556968":[255]},{"1556970":[185]},{"1556972":[181]},{"1556974":[170]},{"1556976":[194]},{"1556978":[174]},{"1556980":[187]},{"1556982":[255]},{"1556984":[164]},{"1556986":[169]},{"1556988":[165]},{"1556990":[255]},{"1556992":[255,127,117]},{"1556996":[255]},{"1556998":[255]},{"1557000":[185]},{"1557002":[181]},{"1557004":[170]},{"1557006":[194]},{"1557008":[174]},{"1557010":[187]},{"1557012":[255]},{"1557014":[164]},{"1557016":[169]},{"1557018":[166]},{"1557020":[255]},{"1557022":[255,127,117]},{"1557026":[255]},{"1557028":[255]},{"1557030":[185]},{"1557032":[181]},{"1557034":[170]},{"1557036":[194]},{"1557038":[174]},{"1557040":[187]},{"1557042":[255]},{"1557044":[164]},{"1557046":[169]},{"1557048":[167]},{"1557050":[255]},{"1557052":[255,127,117]},{"1557056":[255]},{"1557058":[255]},{"1557060":[185]},{"1557062":[181]},{"1557064":[170]},{"1557066":[194]},{"1557068":[174]},{"1557070":[187]},{"1557072":[255]},{"1557074":[164]},{"1557076":[169]},{"1557078":[168]},{"1557080":[255]},{"1557082":[255,127,117]},{"1557086":[255]},{"1557088":[255]},{"1557090":[185]},{"1557092":[181]},{"1557094":[170]},{"1557096":[194]},{"1557098":[174]},{"1557100":[187]},{"1557102":[255]},{"1557104":[164]},{"1557106":[169]},{"1557108":[169]},{"1557110":[255]},{"1557112":[255,127,117]},{"1557116":[255]},{"1557118":[255]},{"1557120":[185]},{"1557122":[181]},{"1557124":[170]},{"1557126":[194]},{"1557128":[174]},{"1557130":[187]},{"1557132":[255]},{"1557134":[165]},{"1557136":[160]},{"1557138":[160]},{"1557140":[255]},{"1557142":[255,127,117]},{"1557146":[255]},{"1557148":[255]},{"1557150":[185]},{"1557152":[181]},{"1557154":[170]},{"1557156":[194]},{"1557158":[174]},{"1557160":[187]},{"1557162":[255]},{"1557164":[165]},{"1557166":[160]},{"1557168":[161]},{"1557170":[255]},{"1557172":[255,127,117]},{"1557176":[255]},{"1557178":[255]},{"1557180":[185]},{"1557182":[181]},{"1557184":[170]},{"1557186":[194]},{"1557188":[174]},{"1557190":[187]},{"1557192":[255]},{"1557194":[165]},{"1557196":[160]},{"1557198":[162]},{"1557200":[255]},{"1557202":[255,127,117]},{"1557206":[255]},{"1557208":[255]},{"1557210":[185]},{"1557212":[181]},{"1557214":[170]},{"1557216":[194]},{"1557218":[174]},{"1557220":[187]},{"1557222":[255]},{"1557224":[165]},{"1557226":[160]},{"1557228":[163]},{"1557230":[255]},{"1557232":[255,127,117]},{"1557236":[255]},{"1557238":[255]},{"1557240":[185]},{"1557242":[181]},{"1557244":[170]},{"1557246":[194]},{"1557248":[174]},{"1557250":[187]},{"1557252":[255]},{"1557254":[165]},{"1557256":[160]},{"1557258":[164]},{"1557260":[255]},{"1557262":[255,127,117]},{"1557266":[255]},{"1557268":[255]},{"1557270":[185]},{"1557272":[181]},{"1557274":[170]},{"1557276":[194]},{"1557278":[174]},{"1557280":[187]},{"1557282":[255]},{"1557284":[165]},{"1557286":[160]},{"1557288":[165]},{"1557290":[255]},{"1557292":[255,127,117]},{"1557296":[255]},{"1557298":[255]},{"1557300":[185]},{"1557302":[181]},{"1557304":[170]},{"1557306":[194]},{"1557308":[174]},{"1557310":[187]},{"1557312":[255]},{"1557314":[165]},{"1557316":[160]},{"1557318":[166]},{"1557320":[255]},{"1557322":[255,127,117]},{"1557326":[255]},{"1557328":[255]},{"1557330":[185]},{"1557332":[181]},{"1557334":[170]},{"1557336":[194]},{"1557338":[174]},{"1557340":[187]},{"1557342":[255]},{"1557344":[165]},{"1557346":[160]},{"1557348":[167]},{"1557350":[255]},{"1557352":[255,127,117]},{"1557356":[255]},{"1557358":[255]},{"1557360":[185]},{"1557362":[181]},{"1557364":[170]},{"1557366":[194]},{"1557368":[174]},{"1557370":[187]},{"1557372":[255]},{"1557374":[165]},{"1557376":[160]},{"1557378":[168]},{"1557380":[255]},{"1557382":[255,127,117]},{"1557386":[255]},{"1557388":[255]},{"1557390":[185]},{"1557392":[181]},{"1557394":[170]},{"1557396":[194]},{"1557398":[174]},{"1557400":[187]},{"1557402":[255]},{"1557404":[165]},{"1557406":[160]},{"1557408":[169]},{"1557410":[255]},{"1557412":[255,127,117]},{"1557416":[255]},{"1557418":[255]},{"1557420":[185]},{"1557422":[181]},{"1557424":[170]},{"1557426":[194]},{"1557428":[174]},{"1557430":[187]},{"1557432":[255]},{"1557434":[165]},{"1557436":[161]},{"1557438":[160]},{"1557440":[255]},{"1557442":[255,127,117]},{"1557446":[255]},{"1557448":[255]},{"1557450":[185]},{"1557452":[181]},{"1557454":[170]},{"1557456":[194]},{"1557458":[174]},{"1557460":[187]},{"1557462":[255]},{"1557464":[165]},{"1557466":[161]},{"1557468":[161]},{"1557470":[255]},{"1557472":[255,127,117]},{"1557476":[255]},{"1557478":[255]},{"1557480":[185]},{"1557482":[181]},{"1557484":[170]},{"1557486":[194]},{"1557488":[174]},{"1557490":[187]},{"1557492":[255]},{"1557494":[165]},{"1557496":[161]},{"1557498":[162]},{"1557500":[255]},{"1557502":[255,127]},{"1572864":[23,23,23,23,23,23,23]},{"1572880":[70,70,29,41,13,78,16,15]},{"1572896":[15]},{"1572898":[1,2,160]},{"1572902":[160]},{"1572904":[3,1,2]},{"1572914":[1,32,10,30,10]},{"1572920":[1,1]},{"1572936":[8]},{"1572943":[1]},{"1572949":[64,64,64,64,64]},{"1572955":[64,64]},{"1572958":[7,7,34]},{"1572964":[107,34]},{"1572969":[107,34]},{"1572974":[107]},{"1572977":[121]},{"1572979":[110]},{"1572981":[111]},{"1572983":[109,105,124,105,108,105,127]},{"1572996":[160,128]},{"1573008":[4,71,3,71,2,71,4,71,2,71]},{"1573024":[1,1,1,1,1]},{"1573056":[49,65,89,38,83,88,151,147]},{"1573120":[178,216,216,216,216,216,216,216,216,217,217,217,217,217,218,218,218,218,218,219,219,219,219,219,220,220,220,220,220,221,221,221,221,221,222,222,222,222,222,223,223,223,223,223,224,224,224,224,224,225,225,225,225,225,226,226,226,226,226,227,227,227,227,227,23,23,23,23,23,23,23,23,23,23,20]},{"1573200":[62,62,62,62,62,62,62,62,62,62]},{"1573216":[36,36,36]},{"1573221":[14,40]},{"1573224":[8,2]},{"1573227":[4,2,1,4,8,16,1]},{"1573235":[1,1]},{"1573238":[10]},{"1573240":[50]},{"1573246":[1]},{"1573248":[3]},{"1573250":[1,44,1]},{"1573268":[1]},{"1573376":[80,70]},{"1573380":[176,185,255,255]},{"1573396":[1]},{"1573398":[1,2,3,4]},{"1573456":[18,1,83,30]},{"1573462":[4,226,6,70,4,88,7,109,4,95,7]},{"1573632":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1578240":[98,101]},{"1578243":[43,45,33,30,159,43,30,45,46,43,39,159,40,31,159,45,33,30,159,36,34,39,32,98,233]},{"1578269":[25,100,117,110,113,104,97,159,95,93,111,112,104,97,99,9]},{"1578286":[25,138,155,148,151,142,135,159,133,131,149,150,142,135,98,104]},{"1578303":[31,45,33,30,159,37,40,50,26,37,159,41,43,34,30,44,45,98,235]},{"1578323":[17,111,93,106,95,112,113,93,110,117,99,11]},{"1578336":[17,149,131,144,133,150,151,131,148,155,98,79]},{"1578349":[1,52,98,101]},{"1578354":[45,44,26,33,26,44,43,26,37,26,33,53,44,159,33,40,38,30,28,40,38,34,39,32,98,233]},{"1578381":[25,103,93,103,93,110,101,103,107,159,112,107,115,106,99,9]},{"1578398":[25,141,131,141,131,148,139,141,145,159,150,145,153,144,98,100]},{"1578415":[47,47,46,37,45,46,43,30,44,159,43,46,37,30,159,45,33,30,159,29,30,44,30,43,45,98,233]},{"1578443":[25,96,97,111,97,110,112,159,108,93,104,93,95,97,99,9]},{"1578460":[25,134,135,149,135,148,150,159,146,131,142,131,133,135,98,100]},{"1578477":[47,45,33,30,159,27,46,37,37,50,159,38,26,36,30,44,159,26,159,31,43,34,30,39,29,98,233]},{"1578505":[27,105,107,113,106,112,93,101,106,159,112,107,115,97,110,99,9]},{"1578523":[27,143,145,151,144,150,131,139,144,159,150,145,153,135,148,98,102]},{"1578541":[37,50,40,46,43,159,46,39,28,37,30,159,43,30,28,40,47,30,43,44,98,235]},{"1578564":[19,117,107,113,110,159,100,107,113,111,97,99,11]},{"1578578":[19,155,145,151,148,159,138,145,151,149,135,98,102]},{"1578592":[39,31,34,39,32,30,43,159,48,30,27,44,159,31,40,43,159,44,26,37,30,98,232]},{"1578616":[31,118,107,110,93,119,111,159,115,93,112,97,110,98,93,104,104,99,8]},{"1578636":[31,156,145,148,131,157,149,159,153,131,150,135,148,136,131,142,142,98,100]},{"1578656":[45,45,33,30,159,48,34,45,28,33,159,26,39,29,159,26,44,44,34,44,45,26,39,45,98,235]},{"1578683":[19,105,93,99,101,95,159,111,100,107,108,99,11]},{"1578697":[19,143,131,137,139,133,159,149,138,145,146,98,104]},{"1578711":[31,45,48,34,39,159,37,46,38,27,30,43,35,26,28,36,44,98,233]},{"1578731":[27,115,107,107,96,111,105,97,106,119,111,159,100,113,112,99,9]},{"1578749":[27,153,145,145,134,149,143,135,144,157,149,159,138,151,150,98,100]},{"1578767":[45,40,28,26,43,34,39,26,159,27,40,50,159,41,37,26,50,44,159,26,32,26,34,39,98,233]},{"1578794":[25,100,93,113,106,112,97,96,159,99,110,107,114,97,99,9]},{"1578811":[25,138,131,151,144,150,135,134,159,137,148,145,152,135,98,100]},{"1578828":[45,47,30,39,46,44,55,159,42,46,30,30,39,159,40,31,159,31,26,30,43,34,30,44,98,234]},{"1578855":[23,115,101,111,100,101,106,99,159,115,97,104,104,99,10]},{"1578871":[23,153,139,149,138,139,144,137,159,153,135,142,142,98,100]},{"1578887":[45,45,33,30,159,29,48,26,43,47,30,39,159,44,48,40,43,29,44,38,34,45,33,44,98,236]},{"1578914":[15,111,105,101,112,100,97,110,117,99,12]},{"1578926":[15,149,143,139,150,138,135,148,155,98,102]},{"1578938":[39,45,33,30,159,27,46,32,54,28,26,45,28,33,34,39,32,159,36,34,29,98,233]},{"1578962":[25,103,93,103,93,110,101,103,107,159,112,107,115,106,99,9]},{"1578979":[25,141,131,141,131,148,139,141,145,159,150,145,153,144,98,72]},{"1578996":[31,45,33,30,159,37,40,44,45,159,40,37,29,159,38,26,39,98,233]},{"1579016":[27,96,97,93,112,100,159,105,107,113,106,112,93,101,106,99,9]},{"1579034":[27,134,135,131,150,138,159,143,145,151,144,150,131,139,144,98,104]},{"1579052":[31,45,33,30,159,31,40,43,30,44,45,159,45,33,34,30,31,98,235]},{"1579072":[19,104,107,111,112,159,115,107,107,96,111,99,11]},{"1579086":[19,142,145,149,150,159,153,145,145,134,149,98,102]},{"1579100":[39,26,39,29,159,45,33,30,159,38,26,44,45,30,43,159,44,48,40,43,29,98,168]},{"1579124":[29,74,67,60,60,71,74,159,56,62,56,64,69,82,82,82,98,236]},{"1579143":[15,98,107,110,97,114,97,110,120,99,12]},{"1579155":[15,136,145,148,135,152,135,148,158]},{"1581056":[8,9,10,11,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,49,54,64,70,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,22,8]},{"1581336":[204,5,212,5,182,11,134,11]},{"1581434":[232,13,152,11,206,20]},{"1581442":[80,28,255,255,102,20]},{"1581450":[182,26,152,11,182,26,14,4,12,156,48,21,152,10]},{"1581476":[22,8,232,13]},{"1581488":[172,9]},{"1581510":[26,4]},{"1581514":[30,9,172,9]},{"1581544":[168,10,170,7]},{"1581572":[170,1,36,129,190,135,88,129]},{"1581640":[190,130]},{"1585196":[24,24]},{"1585199":[255]},{"1585209":[248]},{"1589248":[18,1,53,255,81,6,82,255,83,6,84,255,255,255,255,255]},{"1591296":[1,21,1,93]},{"1591301":[18,4]},{"1591304":[255,255,255,255,255,255,255,255]},{"1591552":[1,81,100]},{"1591556":[7,255]},{"1591560":[1,83,100]},{"1591564":[7,255]},{"1591568":[255,255,255,255,255,255,255,255]},{"1593600":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1595392":[1]},{"1595394":[74,10]},{"1595397":[1]},{"1595399":[243,10]},{"1595402":[2]},{"1595404":[50,12]},{"1595408":[1]},{"1595410":[25,13,52]},{"1595415":[255,255,255,255,255,255,255,255,255,1]},{"1595426":[74,10,112,1]},{"1595431":[243,10,192,2]},{"1595436":[50,12,218,88,1]},{"1595442":[25,13,52]},{"1595447":[255,255,255,255,255,255,255,255,255,1,3,3,3,3,3,3,1,3,1,3,3,3,3,3,3,3,3,1,3,3,3,3,3,1,1,3,3,1,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]},{"1595520":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,13,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,17,17,16,22,22,22,22,22,17,22,22,22,21,21,21,21,21,21,21,21,21,21,21,21,22,2,9]},{"1595584":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,19,214,149,213,154,213,155,213,182,213,183,213,184,213,185,213,186,213,191,213,197,213,198,213,199,213,201,213]},{"1598336":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,127]},{"1598352":[127]},{"1598354":[127]},{"1598356":[127]},{"1598358":[127]},{"1598360":[127]},{"1598362":[127]},{"1598364":[127]},{"1598366":[127]},{"1598368":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,127]},{"1598384":[127]},{"1598386":[127]},{"1598388":[127]},{"1598390":[127]},{"1598392":[127]},{"1598394":[127]},{"1598396":[127]},{"1598398":[127]},{"1598400":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,127]},{"1598416":[127]},{"1598418":[127]},{"1598420":[127]},{"1598422":[127]},{"1598424":[127]},{"1598426":[127]},{"1598428":[127]},{"1598430":[127]},{"1598432":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,127]},{"1598448":[127]},{"1598450":[127]},{"1598452":[127]},{"1598454":[127]},{"1598456":[127]},{"1598458":[127]},{"1598460":[127]},{"1598462":[127]},{"1598464":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,127]},{"1598480":[127]},{"1598482":[127]},{"1598484":[127]},{"1598486":[127]},{"1598488":[127]},{"1598490":[127]},{"1598492":[127]},{"1598494":[127]},{"1598496":[108,41,104,41,93,41,117,41,97,41,110,41,125,41,127]},{"1598512":[127]},{"1598514":[127]},{"1598516":[127]},{"1598518":[127]},{"1598520":[127]},{"1598522":[127]},{"1598524":[127]},{"1598526":[127]},{"1598528":[108,41,104,41,93,41,117,41,97,41,110,41,126,41,127]},{"1598544":[127]},{"1598546":[127]},{"1598548":[127]},{"1598550":[127]},{"1598552":[127]},{"1598554":[127]},{"1598556":[127]},{"1598558":[127]},{"1598560":[108,41,104,41,93,41,117,41,97,41,110,41,127,41,127]},{"1598576":[127]},{"1598578":[127]},{"1598580":[127]},{"1598582":[127]},{"1598584":[127]},{"1598586":[127]},{"1598588":[127]},{"1598590":[127]},{"1598592":[108,41,104,41,93,41,117,41,97,41,110,41,75,41,127]},{"1598608":[127]},{"1598610":[127]},{"1598612":[127]},{"1598614":[127]},{"1598616":[127]},{"1598618":[127]},{"1598620":[127]},{"1598622":[127]},{"1598624":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,119,41,127]},{"1598642":[127]},{"1598644":[127]},{"1598646":[127]},{"1598648":[127]},{"1598650":[127]},{"1598652":[127]},{"1598654":[127]},{"1598656":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,120,41,127]},{"1598674":[127]},{"1598676":[127]},{"1598678":[127]},{"1598680":[127]},{"1598682":[127]},{"1598684":[127]},{"1598686":[127]},{"1598688":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,121,41,127]},{"1598706":[127]},{"1598708":[127]},{"1598710":[127]},{"1598712":[127]},{"1598714":[127]},{"1598716":[127]},{"1598718":[127]},{"1598720":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,122,41,127]},{"1598738":[127]},{"1598740":[127]},{"1598742":[127]},{"1598744":[127]},{"1598746":[127]},{"1598748":[127]},{"1598750":[127]},{"1598752":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,123,41,127]},{"1598770":[127]},{"1598772":[127]},{"1598774":[127]},{"1598776":[127]},{"1598778":[127]},{"1598780":[127]},{"1598782":[127]},{"1598784":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,124,41,127]},{"1598802":[127]},{"1598804":[127]},{"1598806":[127]},{"1598808":[127]},{"1598810":[127]},{"1598812":[127]},{"1598814":[127]},{"1598816":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,125,41,127]},{"1598834":[127]},{"1598836":[127]},{"1598838":[127]},{"1598840":[127]},{"1598842":[127]},{"1598844":[127]},{"1598846":[127]},{"1598848":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,126,41,127]},{"1598866":[127]},{"1598868":[127]},{"1598870":[127]},{"1598872":[127]},{"1598874":[127]},{"1598876":[127]},{"1598878":[127]},{"1598880":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,127,41,127]},{"1598898":[127]},{"1598900":[127]},{"1598902":[127]},{"1598904":[127]},{"1598906":[127]},{"1598908":[127]},{"1598910":[127]},{"1598912":[108,41,104,41,93,41,117,41,97,41,110,41,120,41,75,41,127]},{"1598930":[127]},{"1598932":[127]},{"1598934":[127]},{"1598936":[127]},{"1598938":[127]},{"1598940":[127]},{"1598942":[127]},{"1598944":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,119,41,127]},{"1598962":[127]},{"1598964":[127]},{"1598966":[127]},{"1598968":[127]},{"1598970":[127]},{"1598972":[127]},{"1598974":[127]},{"1598976":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,120,41,127]},{"1598994":[127]},{"1598996":[127]},{"1598998":[127]},{"1599000":[127]},{"1599002":[127]},{"1599004":[127]},{"1599006":[127]},{"1599008":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,121,41,127]},{"1599026":[127]},{"1599028":[127]},{"1599030":[127]},{"1599032":[127]},{"1599034":[127]},{"1599036":[127]},{"1599038":[127]},{"1599040":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,122,41,127]},{"1599058":[127]},{"1599060":[127]},{"1599062":[127]},{"1599064":[127]},{"1599066":[127]},{"1599068":[127]},{"1599070":[127]},{"1599072":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,123,41,127]},{"1599090":[127]},{"1599092":[127]},{"1599094":[127]},{"1599096":[127]},{"1599098":[127]},{"1599100":[127]},{"1599102":[127]},{"1599104":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,124,41,127]},{"1599122":[127]},{"1599124":[127]},{"1599126":[127]},{"1599128":[127]},{"1599130":[127]},{"1599132":[127]},{"1599134":[127]},{"1599136":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,125,41,127]},{"1599154":[127]},{"1599156":[127]},{"1599158":[127]},{"1599160":[127]},{"1599162":[127]},{"1599164":[127]},{"1599166":[127]},{"1599168":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,126,41,127]},{"1599186":[127]},{"1599188":[127]},{"1599190":[127]},{"1599192":[127]},{"1599194":[127]},{"1599196":[127]},{"1599198":[127]},{"1599200":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,127,41,127]},{"1599218":[127]},{"1599220":[127]},{"1599222":[127]},{"1599224":[127]},{"1599226":[127]},{"1599228":[127]},{"1599230":[127]},{"1599232":[108,41,104,41,93,41,117,41,97,41,110,41,121,41,75,41,127]},{"1599250":[127]},{"1599252":[127]},{"1599254":[127]},{"1599256":[127]},{"1599258":[127]},{"1599260":[127]},{"1599262":[127]},{"1599264":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,119,41,127]},{"1599282":[127]},{"1599284":[127]},{"1599286":[127]},{"1599288":[127]},{"1599290":[127]},{"1599292":[127]},{"1599294":[127]},{"1599296":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,120,41,127]},{"1599314":[127]},{"1599316":[127]},{"1599318":[127]},{"1599320":[127]},{"1599322":[127]},{"1599324":[127]},{"1599326":[127]},{"1599328":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,121,41,127]},{"1599346":[127]},{"1599348":[127]},{"1599350":[127]},{"1599352":[127]},{"1599354":[127]},{"1599356":[127]},{"1599358":[127]},{"1599360":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,122,41,127]},{"1599378":[127]},{"1599380":[127]},{"1599382":[127]},{"1599384":[127]},{"1599386":[127]},{"1599388":[127]},{"1599390":[127]},{"1599392":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,123,41,127]},{"1599410":[127]},{"1599412":[127]},{"1599414":[127]},{"1599416":[127]},{"1599418":[127]},{"1599420":[127]},{"1599422":[127]},{"1599424":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,124,41,127]},{"1599442":[127]},{"1599444":[127]},{"1599446":[127]},{"1599448":[127]},{"1599450":[127]},{"1599452":[127]},{"1599454":[127]},{"1599456":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,125,41,127]},{"1599474":[127]},{"1599476":[127]},{"1599478":[127]},{"1599480":[127]},{"1599482":[127]},{"1599484":[127]},{"1599486":[127]},{"1599488":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,126,41,127]},{"1599506":[127]},{"1599508":[127]},{"1599510":[127]},{"1599512":[127]},{"1599514":[127]},{"1599516":[127]},{"1599518":[127]},{"1599520":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,127,41,127]},{"1599538":[127]},{"1599540":[127]},{"1599542":[127]},{"1599544":[127]},{"1599546":[127]},{"1599548":[127]},{"1599550":[127]},{"1599552":[108,41,104,41,93,41,117,41,97,41,110,41,122,41,75,41,127]},{"1599570":[127]},{"1599572":[127]},{"1599574":[127]},{"1599576":[127]},{"1599578":[127]},{"1599580":[127]},{"1599582":[127]},{"1599584":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,119,41,127]},{"1599602":[127]},{"1599604":[127]},{"1599606":[127]},{"1599608":[127]},{"1599610":[127]},{"1599612":[127]},{"1599614":[127]},{"1599616":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,120,41,127]},{"1599634":[127]},{"1599636":[127]},{"1599638":[127]},{"1599640":[127]},{"1599642":[127]},{"1599644":[127]},{"1599646":[127]},{"1599648":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,121,41,127]},{"1599666":[127]},{"1599668":[127]},{"1599670":[127]},{"1599672":[127]},{"1599674":[127]},{"1599676":[127]},{"1599678":[127]},{"1599680":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,122,41,127]},{"1599698":[127]},{"1599700":[127]},{"1599702":[127]},{"1599704":[127]},{"1599706":[127]},{"1599708":[127]},{"1599710":[127]},{"1599712":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,123,41,127]},{"1599730":[127]},{"1599732":[127]},{"1599734":[127]},{"1599736":[127]},{"1599738":[127]},{"1599740":[127]},{"1599742":[127]},{"1599744":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,124,41,127]},{"1599762":[127]},{"1599764":[127]},{"1599766":[127]},{"1599768":[127]},{"1599770":[127]},{"1599772":[127]},{"1599774":[127]},{"1599776":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,125,41,127]},{"1599794":[127]},{"1599796":[127]},{"1599798":[127]},{"1599800":[127]},{"1599802":[127]},{"1599804":[127]},{"1599806":[127]},{"1599808":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,126,41,127]},{"1599826":[127]},{"1599828":[127]},{"1599830":[127]},{"1599832":[127]},{"1599834":[127]},{"1599836":[127]},{"1599838":[127]},{"1599840":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,127,41,127]},{"1599858":[127]},{"1599860":[127]},{"1599862":[127]},{"1599864":[127]},{"1599866":[127]},{"1599868":[127]},{"1599870":[127]},{"1599872":[108,41,104,41,93,41,117,41,97,41,110,41,123,41,75,41,127]},{"1599890":[127]},{"1599892":[127]},{"1599894":[127]},{"1599896":[127]},{"1599898":[127]},{"1599900":[127]},{"1599902":[127]},{"1599904":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,119,41,127]},{"1599922":[127]},{"1599924":[127]},{"1599926":[127]},{"1599928":[127]},{"1599930":[127]},{"1599932":[127]},{"1599934":[127]},{"1599936":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,120,41,127]},{"1599954":[127]},{"1599956":[127]},{"1599958":[127]},{"1599960":[127]},{"1599962":[127]},{"1599964":[127]},{"1599966":[127]},{"1599968":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,121,41,127]},{"1599986":[127]},{"1599988":[127]},{"1599990":[127]},{"1599992":[127]},{"1599994":[127]},{"1599996":[127]},{"1599998":[127]},{"1600000":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,122,41,127]},{"1600018":[127]},{"1600020":[127]},{"1600022":[127]},{"1600024":[127]},{"1600026":[127]},{"1600028":[127]},{"1600030":[127]},{"1600032":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,123,41,127]},{"1600050":[127]},{"1600052":[127]},{"1600054":[127]},{"1600056":[127]},{"1600058":[127]},{"1600060":[127]},{"1600062":[127]},{"1600064":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,124,41,127]},{"1600082":[127]},{"1600084":[127]},{"1600086":[127]},{"1600088":[127]},{"1600090":[127]},{"1600092":[127]},{"1600094":[127]},{"1600096":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,125,41,127]},{"1600114":[127]},{"1600116":[127]},{"1600118":[127]},{"1600120":[127]},{"1600122":[127]},{"1600124":[127]},{"1600126":[127]},{"1600128":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,126,41,127]},{"1600146":[127]},{"1600148":[127]},{"1600150":[127]},{"1600152":[127]},{"1600154":[127]},{"1600156":[127]},{"1600158":[127]},{"1600160":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,127,41,127]},{"1600178":[127]},{"1600180":[127]},{"1600182":[127]},{"1600184":[127]},{"1600186":[127]},{"1600188":[127]},{"1600190":[127]},{"1600192":[108,41,104,41,93,41,117,41,97,41,110,41,124,41,75,41,127]},{"1600210":[127]},{"1600212":[127]},{"1600214":[127]},{"1600216":[127]},{"1600218":[127]},{"1600220":[127]},{"1600222":[127]},{"1600224":[108,41,104,41,93,41,117,41,97,41,110,41,125,41,119,41,127]},{"1600242":[127]},{"1600244":[127]},{"1600246":[127]},{"1600248":[127]},{"1600250":[127]},{"1600252":[127]},{"1600254":[127]},{"1600256":[108,41,104,41,93,41,117,41,97,41,110,41,125,41,120,41,127]},{"1600274":[127]},{"1600276":[127]},{"1600278":[127]},{"1600280":[127]},{"1600282":[127]},{"1600284":[127]},{"1600286":[127]},{"1600288":[108,41,104,41,93,41,117,41,97,41,110,41,125,41,121,41,127]},{"1600306":[127]},{"1600308":[127]},{"1600310":[127]},{"1600312":[127]},{"1600314":[127]},{"1600316":[127]},{"1600318":[127]},{"1600320":[108,41,104,41,93,41,117,41,97,41,110,41,125,41,122,41,127]},{"1600338":[127]},{"1600340":[127]},{"1600342":[127]},{"1600344":[127]},{"1600346":[127]},{"1600348":[127]},{"1600350":[127]},{"1600352":[108,41,104,41,93,41,117,41,97,41,110,41,125,41,123,41,127]},{"1600370":[127]},{"1600372":[127]},{"1600374":[127]},{"1600376":[127]},{"1600378":[127]},{"1600380":[127]},{"1600382":[127]},{"1605632":[224,90,221,29,227,3,63,207,95,224,92,227,188,227,124,195,246,157,62,28,192,224,227,195,131,25,153,24,238,45,252,147,248,7,57,199,11,247,247,158,254,140,126,17,3,7,199,247,251,251,199,132,95,25,238,3,173,11,87,68,232,192,255,128,255,152,120,224,241,243,184,31,7]},{"1605706":[28]},{"1605708":[60,8,28,4,73]},{"1605714":[67]},{"1605716":[195,1,169]},{"1605720":[248]},{"1605722":[255,255,251,36,255,4,92,172,124,140,92,74,172,124,39,15,15,255,100,253,36,125,128,62,210,127,169,239,64,212,137,232,22,34,3,28,1,16,48,102,9,24,231,52,195,82,129,235,32,247,20,253,66,195,126,189,60]},{"1605780":[24,60,28,8,2,62,126,68]},{"1605789":[255,2,254]},{"1605793":[246,68]},{"1605796":[237,18,173]},{"1605800":[175]},{"1605803":[1,9,18,18,82,80]},{"1605810":[255]},{"1605812":[251]},{"1605814":[247]},{"1605816":[183,70]},{"1605819":[111,4,127]},{"1605823":[4,8,72,34,144,6,128,255]},{"1605832":[254,63,225,97,69,222,94,6,220,92,219,91]},{"1605846":[30,36,63,36,255,10,192,255,184,204,75,188,35,252,67,246,29,35]},{"1605865":[3,51,67,3,25,47,255,39]},{"1605874":[20,255,255,191,191,206,206,209,208,239,239,230,231,238,233,239,236]},{"1605892":[64,49,63,31,34,28,27,185,158,115,60,230,121,204,243,152,231,48,207,224,159,192,63,112,224,193,131,7,15,31,63,255]},{"1605925":[129,126,75,141,110,1]},{"1605933":[37,16,224,65,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,254,253,251,247,239,223,191,127,231,156,254,137,253,195,251,231,115,207,243,207,120,231,95,240,24,1,3,7,143,143,199,224,188,243,254,225,255]},{"1605991":[255,8,255,140,255,158,231,167,215,199,99,1,35]},{"1606005":[224,32,24,56,239,159,246,15,217,151,243,142,118,92,191,10,126,36,219,138,31,207,38,12,137,193,195,100,188,96,188,104,180,100,169,67,96,163,7,97,169,96,184,96,31,31,27,36,31,5,95,175,111,144,83,163,138,102]},{"1606064":[1]},{"1606066":[12,36,15,224,71,59,75,28,164,15,211,7,232,3,117,3,184,1,92,1,190,132,67,32,16,136,68,162,65,207,206,63,48,248,199,224,20,192,175,192,23,128,44,128,123,48,192]},{"1606114":[11,16,40,83,132,251,8,159,102,7,248]},{"1606126":[87]},{"1606128":[168]},{"1606130":[245]},{"1606132":[254]},{"1606134":[255,6]},{"1606138":[168,87,10,1]},{"1606143":[67,102,191,224,35,118,159,59,207,61,135,62,83,127,57,111,172,31,31,15,7,67,129,128,16,215,87,214,86,213,85,215,87,205,78,250,123,253,5,255,19,34,63,24,61,53,6,3,1,60,243,30,225,255,24,239,40,223,16,223,145,223,147,255,199,227,225]},{"1606211":[16,34,32,224,56]},{"1606217":[251,251,245,245,174,174,75,74,241,245]},{"1606228":[254,255,251,251,4,4,14,95,255,251,1]},{"1606240":[4,153,158,115,124,230,121,204,115,152,231,48,79,96,31,192,63,120,240,225,195,135,143,159,63,255]},{"1606267":[48,48,206,206,223,223,39,255,3]},{"1606277":[255,49,32,35]},{"1606282":[69,141,110,2,129,98,157,68,126,129]},{"1606293":[255,131,97,1]},{"1606298":[28,35]},{"1606301":[151,104,1,27,94,241,93,243,185,231,249,135,248,103,63,48,127,120,239,44,225,227,199,7,7,192,128,16,47,11,94,16,67,186,36,15,126,32,95,22,90,24,67,2,240,225,197,197,193,225,231,252,131,198,2,10,255]},{"1606359":[49,255,67]},{"1606363":[3,1,9]},{"1606367":[24,134,27,1,133,196,2,3,255]},{"1606377":[129,127,135,208,1,35]},{"1606384":[35,31,7,92,140,252,44,188,204,252,12,35,252,35]},{"1606400":[47,34,15,35,255,224,53,129,66,67,189,62,66]},{"1606414":[189]},{"1606416":[195]},{"1606418":[255]},{"1606420":[203,128,255,60]},{"1606425":[129,66,60]},{"1606429":[52]},{"1606431":[157,93,67,190,63,199,7,120,4,139,4,251,28,227,182,221,62]},{"1606450":[128,115,3,3,25,217,88,226,161,188,195,137,30]},{"1606464":[1,62,29,133,42]},{"1606470":[22,79,140,79,9,78,11,77,11,119,164,104]},{"1606483":[127,128,127,152,48,176,177,179,24,159,7,152,231,2,19,255,146,239,36,223,72,159,16,191,32,191,35,191,39,255,143,12,24,48,96,34,64,224,72]},{"1606523":[127,127,191,191,159,159,175,175,183,183,171,187,141,189,30,126,128,64,96,112,120,100,66,129,255]},{"1606549":[63]},{"1606551":[15,192,7,240,3,248,3,128,1,96,1,56,255,255,63,15,7,127,159,199,128,127,65,62,34,28,85,73,190,182,221,221,235,235,247,247,127,190,221,235,119,62,28,8,47,254,39,1,79,15,255,39]},{"1606604":[67,230,191,224,49,246,159,123,79,189,39,158,19,207,9,103,4,31,31,15,135,195,225,240,248,239,40,207,136,175,8,127,15,247,7,123,3,153,129,204,64,16,48,112,240,248,252,126,63]},{"1606654":[255,253,255,2,2,35,253,1,19,19,67,238,236,7]},{"1606670":[253,255,255,253,17,17,131,67,3,133,66,3,5,17,17,238,238,239,239,134,204,4,24,16,251,8,255,6,7,248]},{"1606701":[31]},{"1606703":[249]},{"1606705":[255]},{"1606707":[79]},{"1606709":[240,6]},{"1606713":[224,6]},{"1606716":[176,15,136,128,4,6,167,222,83,239,41,119,148,131,144,4,13,67,33,16,8,255]},{"1606739":[192,127,191,127,143,111,140,108,67,140,111,131,94,1,2]},{"1606755":[16,19,34,16,134,203,4,131,23,1,132,49,3,35]},{"1606770":[131,23,1,3,141,110,13,238,67,253,254,1,1,2,67,1,254,131,222,2,1]},{"1606793":[131,107,3,152,216,3,2]},{"1606801":[1,254,67,249,250,135,72,5,3]},{"1606812":[4,4,131,107,3,224,39,211,211,185,185,68,124,90,102,185,231,100,219,194,189,129,126,60,126,199,131,1,24,60,126,255]},{"1606845":[252]},{"1606847":[240]},{"1606849":[224,9,192,25,192,27,128,58,128,60,34,255,19,246,230,228,197,195]},{"1606868":[255,126,255,66,255,78,255,81,255,87,255,118,255,13,136,23,1,5,254,254,253,253,243,243,35,239,13,223,223,191,191,127,127,1,2,12,24,16,32,64,128,80]},{"1606911":[255,38]},{"1606914":[255]},{"1607680":[224,90,221,29,227,3,63,207,95,224,92,227,188,227,124,195,246,157,62,28,192,224,227,195,131,25,153,24,238,45,252,147,248,7,57,199,11,247,247,158,254,140,126,17,3,7,199,247,251,251,199,132,95,25,238,3,173,11,87,68,232,192,255,128,255,152,120,224,241,243,184,31,7]},{"1607754":[28]},{"1607756":[60,8,28,4,73]},{"1607762":[67]},{"1607764":[195,1,169]},{"1607768":[248]},{"1607770":[255,255,251,36,255,4,92,172,124,140,92,74,172,124,39,15,15,255,100,253,36,125,128,62,210,127,169,239,64,212,137,232,22,34,3,28,1,16,48,102,9,24,231,52,195,82,129,235,32,247,20,253,66,195,126,189,60]},{"1607828":[24,60,28,8,2,62,126,68]},{"1607837":[255,2,254]},{"1607841":[246,68]},{"1607844":[237,18,173]},{"1607848":[175]},{"1607851":[1,9,18,18,82,80]},{"1607858":[255]},{"1607860":[251]},{"1607862":[247]},{"1607864":[183,70]},{"1607867":[111,4,127]},{"1607871":[4,8,72,34,144,6,128,255]},{"1607880":[254,63,225,97,69,222,94,6,220,92,219,91]},{"1607894":[30,36,63,36,255,10,192,255,184,204,75,188,35,252,67,246,29,35]},{"1607913":[3,51,67,3,25,47,255,39]},{"1607922":[20,255,255,191,191,206,206,209,208,239,239,230,231,238,233,239,236]},{"1607940":[64,49,63,31,34,28,27,185,158,115,60,230,121,204,243,152,231,48,207,224,159,192,63,112,224,193,131,7,15,31,63,255]},{"1607973":[129,126,75,141,110,1]},{"1607981":[37,16,224,65,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,254,253,251,247,239,223,191,127,231,156,254,137,253,195,251,231,115,207,243,207,120,231,95,240,24,1,3,7,143,143,199,224,188,243,254,225,255]},{"1608039":[255,8,255,140,255,158,231,167,215,199,99,1,35]},{"1608053":[224,32,24,56,239,159,246,15,217,151,243,142,118,92,191,10,126,36,219,138,31,207,38,12,137,193,195,100,188,96,188,104,180,100,169,67,96,163,7,97,169,96,184,96,31,31,27,36,31,5,95,175,111,144,83,163,138,102]},{"1608112":[1]},{"1608114":[12,36,15,224,71,59,75,28,164,15,211,7,232,3,117,3,184,1,92,1,190,132,67,32,16,136,68,162,65,207,206,63,48,248,199,224,20,192,175,192,23,128,44,128,123,48,192]},{"1608162":[11,16,40,83,132,251,8,159,102,7,248]},{"1608174":[87]},{"1608176":[168]},{"1608178":[245]},{"1608180":[254]},{"1608182":[255,6]},{"1608186":[168,87,10,1]},{"1608191":[67,102,191,224,35,118,159,59,207,61,135,62,83,127,57,111,172,31,31,15,7,67,129,128,16,215,87,214,86,213,85,215,87,205,78,250,123,253,5,255,19,34,63,24,61,53,6,3,1,60,243,30,225,255,24,239,40,223,16,223,145,223,147,255,199,227,225]},{"1608259":[16,34,32,224,56]},{"1608265":[251,251,245,245,174,174,75,74,241,245]},{"1608276":[254,255,251,251,4,4,14,95,255,251,1]},{"1608288":[4,153,158,115,124,230,121,204,115,152,231,48,79,96,31,192,63,120,240,225,195,135,143,159,63,255]},{"1608315":[48,48,206,206,223,223,39,255,3]},{"1608325":[255,49,32,35]},{"1608330":[69,141,110,2,129,98,157,68,126,129]},{"1608341":[255,131,97,1]},{"1608346":[28,35]},{"1608349":[151,104,1,27,94,241,93,243,185,231,249,135,248,103,63,48,127,120,239,44,225,227,199,7,7,192,128,16,47,11,94,16,67,186,36,15,126,32,95,22,90,24,67,2,240,225,197,197,193,225,231,252,131,198,2,10,255]},{"1608407":[49,255,67]},{"1608411":[3,1,9]},{"1608415":[24,134,27,1,133,196,2,3,255]},{"1608425":[129,127,135,208,1,35]},{"1608432":[35,31,7,92,140,252,44,188,204,252,12,35,252,35]},{"1608448":[47,34,15,35,255,224,53,129,66,67,189,62,66]},{"1608462":[189]},{"1608464":[195]},{"1608466":[255]},{"1608468":[203,128,255,60]},{"1608473":[129,66,60]},{"1608477":[52]},{"1608479":[157,93,67,190,63,199,7,120,4,139,4,251,28,227,182,221,62]},{"1608498":[128,115,3,3,25,217,88,226,161,188,195,137,30]},{"1608512":[1,62,29,133,42]},{"1608518":[22,79,140,79,9,78,11,77,11,119,164,104]},{"1608531":[127,128,127,152,48,176,177,179,24,159,7,152,231,2,19,255,146,239,36,223,72,159,16,191,32,191,35,191,39,255,143,12,24,48,96,34,64,224,32]},{"1608571":[127,127,191,191,159,159,175,175,183,183,171,187,141,189,30,126,128,64,96,112,120,100,66,129,255]},{"1608597":[63]},{"1608599":[15,192,7,240,67,3,248,224,35,1,236,1,196,255,255,63,15,7,7,19,59,128,127,65,62,34,28,85,73,190,182,221,221,235,235,247,247,127,190,221,235,119,62,28,8,47,254,39,1,79,15,255,39]},{"1608653":[67,230,191,224,49,246,159,123,79,189,39,158,19,207,9,103,4,31,31,15,135,195,225,240,248,239,40,207,136,175,8,127,15,247,7,123,3,153,129,204,64,16,48,112,240,248,252,126,63]},{"1608703":[255,253,255,2,2,35,253,1,19,19,67,238,236,7]},{"1608719":[253,255,255,253,17,17,131,67,3,133,66,3,5,17,17,238,238,239,239,134,204,4,24,16,251,8,255,6,7,248]},{"1608750":[31]},{"1608752":[249]},{"1608754":[255]},{"1608756":[79]},{"1608758":[240,6]},{"1608762":[224,6]},{"1608765":[176,15,136,128,4,6,167,222,83,239,41,119,148,131,144,4,13,67,33,16,8,255]},{"1608788":[192,127,191,127,143,111,140,108,67,140,111,131,94,1,2]},{"1608804":[16,19,34,16,134,203,4,131,23,1,132,49,3,35]},{"1608819":[131,23,1,3,141,110,13,238,67,253,254,1,1,2,67,1,254,131,222,2,1]},{"1608842":[131,107,3,152,216,3,2]},{"1608850":[1,254,67,249,250,135,72,5,3]},{"1608861":[4,4,131,107,3,31,211,211,185,185,68,124,90,102,185,231,100,219,194,189,129,126,60,126,199,131,1,24,60,126,255]},{"1608893":[252]},{"1608895":[240,3,224,15,67,192,31,26,128,57,128,48,255,255,252,240,224,224,198,207]},{"1608916":[255,126,255,66,255,78,255,81,255,87,255,118,255,13,136,23,1,5,254,254,253,253,243,243,35,239,13,223,223,191,191,127,127,1,2,12,24,16,32,64,128,80]},{"1608959":[255,38]},{"1608962":[255]},{"1609728":[15,255]},{"1609731":[252,3,248,7,243,15,231,31,207,63,152,127,183,120,39]},{"1609747":[1,220,63,67,35,227,67,220,192,8,206,192,39,224,211,48]},{"1609764":[28,28,34,63,17,31,15,127,128,191,192,159,224,79,112,103,120,48,63,24,31,143,15,34]},{"1609789":[23,128,128,192,224,240,247,74,247,76,218,102,236,115,183,120,152,127,207,63,231,31]},{"1609813":[1,36]},{"1609816":[224,33,226,14,196,28,73,121,19,243,167,103,79,207,158,158,60,60,17,35,134,12,24,48,97,195,112,112,247,240,231,224,207,192,159,128,69,63]},{"1609855":[4,143,15,31,63,127,34,255,9,176,79,24,231,60,243,127,240,47,240,67,12,243,224,33,248,7,79,231,195,128,208,224,1,3,8,247,12,243,31,224,255]},{"1609897":[131,124,1,254,63,255,127,255,247,243,224]},{"1609909":[124,254,192,128,67,65,190,15,193,62,227,28,255]},{"1609923":[199,56,159,124,159,254,190,190,62,28,35]},{"1609935":[27,255]},{"1609938":[15,240,224,255,31,31,128,128,6,6,249]},{"1609950":[255,255]},{"1609953":[240,31,224,127,249,255]},{"1609960":[160,96,199,64,71,199,66,5,191,2,189,60,31,63,35,60,2,124,66,192,67,127,255,5,63,255]},{"1609987":[192,127,254,67,127,255,224,48]},{"1609996":[64,64,63]},{"1610000":[64,65,127]},{"1610004":[24,230,29,231,24,229,14,242,7,249,3,252,1,254]},{"1610019":[255,225,224,226,241,248,252,254,255,253,195,134,249,51,252,113,126,228,251,14,241,255]},{"1610042":[3,252,34]},{"1610047":[128,34]},{"1610050":[224,58,252,195,195,224,224,112,240,184,120,220,60,102,158,51,207,255]},{"1610069":[60,31,15,7,3,1]},{"1610077":[3,252,7,248,8,242,10,243,13,245,10,246,5,251,14,242,252,249,245,244,242,241,240,241,175,112,155,103,183,72,175,80,191,67,69,191,68,39]},{"1610116":[224,40,233,24,148,172,202,86,247,59,127,27,127,11,255,131,127,11,7,67,33]},{"1610138":[128,192,64,128,199,7,224]},{"1610146":[112]},{"1610148":[63]},{"1610150":[31]},{"1610152":[95,64,111,96,112,112,248,35,255,4,191,159,143,227,31,67,155,103,67,248,7,69,31,224,36]},{"1610178":[34,1,224,81,248,248,136,248,40,216,72,152,172,60,14,62,119,79,123,71,7,7,39,103,195,193,128,128,63]},{"1610208":[1]},{"1610210":[60,36,126,66,126,82,46,42,6,6,135,135,255,255,195,129,129,209,249,120,240,15,97,159,79,191,211,51,201,57,196,60,226,30,99,159,7,158,176,44,54,59,29,28,252,252,248,248,240,240,224,224,192,192,131,73,1,6,64]},{"1610270":[3,7,15,31,63,34,255,7,247,102,246,103,247,103,244,100,67,240,96,7,241,96,254,96,24,25,24,27,35,31,23,224,31,224,159,240,207,184,167,28,19,140,139,206,201,238,233,31,31,15,71,227,115,49,21,55]},{"1610327":[6,223,127,160,96,192,127,255,136,135,2,2,64,31,64,132,151,2,9,223,14,239,38,119,147,59,201,29,228,133,38,1,224,97,48,24,140,198,227,241,248,252,111,206,79,206,239,110,247,182,251,218,253,108,255,240,248,7,48,48,16,8,4,130]},{"1610392":[7,255]},{"1610395":[255,112,255,96,246,73,230,25,228,27,197,58,195,60]},{"1610410":[3,15,22,38,36,69,67,255]},{"1610419":[255,14,63,198,15,242,7,248,127,128,159,96,199,56]},{"1610434":[192,48,8,4,124,158,198,52,220,52,212,49,208,57,200,29,228,30,230,26,234,40,216,195,203,131,98,1,23,5,7,5,5,255]},{"1610469":[255,127,247,255,136,136,247,128,247,127,255,192,250,255,127,128,119,127,131,75,1,45]},{"1610492":[39,255,69,170,91]},{"1610498":[174,70,95,160,1,191,64,34,4,36]},{"1610509":[224,41,22,234,26,238,26,234,8,240,9,244,27,230,42,214,46,214,225,225,229,231,227,225,193,193,206,60,141,124,201,120,203,120,235,120,223,92,141,76,165,100,3,3,34,7,2,35,51,27,67,99,159,16,223,63,191,127,176,112,224,96,239,96,224,96,28,28,32,64,79,34,31,69,64]},{"1610585":[9,124]},{"1610588":[127]},{"1610590":[131]},{"1610592":[120,120,252,252,37,255,1,135,3,35,243]},{"1610604":[247,72,243,118,1,246,115,34,12]},{"1610614":[140,35,12,10,255,254,193,254,129,254,31,252,51,240,243,68,112,251,3]},{"1610634":[28,28]},{"1610637":[35,12,15,251,124,247,120,247,122,177,114,93,190,237,30,173,30,205,78,34]},{"1610658":[24,12]},{"1610662":[64,48,5,255,28,255,62,255,127,255,253,255,250,254,249,255,252,255,248,224,192,128,131,89]},{"1610687":[224,33,1,255,48,255,38,239,15,127,60,254,186,254,89,127,92,127]},{"1610707":[16,128,1,1,128,128,1,255,20,223,54,255,15,255,125,255,134,42,4]},{"1610727":[32,34]},{"1610730":[26,1,128,128,3,252,7,249,14,242,29,228,59,201,119,147,239,38,223,14]},{"1610752":[1,3,6,12,24,48,79]},{"1610760":[255,39,255,15,72,184,75,184,107,184,123,184,105,168,68,164,218,50,204,56,35,7,24,23,27,13,7,176,195,171,192,173,192,189,210,154,232,255,243,255,124,255]},{"1610803":[28,23,18]},{"1610807":[5,132,213]},{"1610811":[68,255]},{"1610814":[8,14,255,31,251,31,241,31,245,31,34]},{"1610826":[4,14,31,27,17,17,79,170,91,39,4,77,245,31,1,187,91,38,17,6,21,137,96,151,112,187,120,67,189,124,5,158,126,198,62,240,15,131,97,1,2,3,1,1,68]},{"1610872":[2,11,4]},{"1610876":[11,3,20,7,44,15,92,31,185,190,34,255,14,252,251,243,227,70,255]},{"1610896":[191,63,223,95,255,96,240,96,67,247,103,17,246,102]},{"1610911":[64,32,31,31,24,24,25,224,31,247,8,255]},{"1610924":[207,48,67,231,24,5,238,17,255]},{"1610934":[31,8,37]},{"1610938":[11,115,252,135,120,255]},{"1610945":[243,12,241,14,113,142,67,63,192]},{"1610955":[140,134,15]},{"1610959":[5,253,126,253,70,253,86,69,253,70,2,185,70,255,35]},{"1610975":[35,16,7]},{"1610979":[172,239,63,255,2,254,1,72,255]},{"1610989":[4,16,128,193,252,254,34,255,15,158,255,31,255,15,255,128,255,169,239,58,254,1,191]},{"1611013":[199,35]},{"1611016":[18,16,1,64,56,158,255,63,255,15,255,38,255,81,223,50,254,1,255,192,132,126,5,3,32,1]},{"1611044":[73,228,251,5,204,243,24,231,240,15,36,24]},{"1611057":[48,133,215,1,147,52,3,255]},{"1611776":[15,255]},{"1611779":[252,3,248,7,243,15,231,31,207,63,152,127,183,120,39]},{"1611795":[1,220,63,67,35,227,67,220,192,8,206,192,39,224,211,48]},{"1611812":[28,28,34,63,17,31,15,127,128,191,192,159,224,79,112,103,120,48,63,24,31,143,15,34]},{"1611837":[23,128,128,192,224,240,247,74,247,76,218,102,236,115,183,120,152,127,207,63,231,31]},{"1611861":[1,36]},{"1611864":[224,33,226,14,196,28,73,121,19,243,167,103,79,207,158,158,60,60,17,35,134,12,24,48,97,195,112,112,247,240,231,224,207,192,159,128,69,63]},{"1611903":[4,143,15,31,63,127,34,255,9,176,79,24,231,60,243,127,240,47,240,67,12,243,224,33,248,7,79,231,195,128,208,224,1,3,8,247,12,243,31,224,255]},{"1611945":[131,124,1,254,63,255,127,255,247,243,224]},{"1611957":[124,254,192,128,67,65,190,15,193,62,227,28,255]},{"1611971":[199,56,159,124,159,254,190,190,62,28,35]},{"1611983":[27,255]},{"1611986":[15,240,224,255,31,31,128,128,6,6,249]},{"1611998":[255,255]},{"1612001":[240,31,224,127,249,255]},{"1612008":[160,96,199,64,71,199,66,5,191,2,189,60,31,63,35,60,2,124,66,192,67,127,255,5,63,255]},{"1612035":[192,127,254,67,127,255,224,48]},{"1612044":[64,64,63]},{"1612048":[64,65,127]},{"1612052":[24,230,29,231,24,229,14,242,7,249,3,252,1,254]},{"1612067":[255,225,224,226,241,248,252,254,255,253,195,134,249,51,252,113,126,228,251,14,241,255]},{"1612090":[3,252,34]},{"1612095":[128,34]},{"1612098":[224,58,252,195,195,224,224,112,240,184,120,220,60,102,158,51,207,255]},{"1612117":[60,31,15,7,3,1]},{"1612125":[3,252,7,248,8,242,10,243,13,245,10,246,5,251,14,242,252,249,245,244,242,241,240,241,175,112,155,103,183,72,175,80,191,67,69,191,68,39]},{"1612164":[224,40,233,24,148,172,202,86,247,59,127,27,127,11,255,131,127,11,7,67,33]},{"1612186":[128,192,64,128,199,7,224]},{"1612194":[112]},{"1612196":[63]},{"1612198":[31]},{"1612200":[95,64,111,96,112,112,248,35,255,4,191,159,143,227,31,67,155,103,67,248,7,69,31,224,36]},{"1612226":[34,1,224,81,248,248,136,248,40,216,72,152,172,60,14,62,119,79,123,71,7,7,39,103,195,193,128,128,63]},{"1612256":[1]},{"1612258":[60,36,126,66,126,82,46,42,6,6,135,135,255,255,195,129,129,209,249,120,240,15,97,159,79,191,211,51,201,57,196,60,226,30,99,159,7,158,176,44,54,59,29,28,252,252,248,248,240,240,224,224,192,192,131,73,1,6,64]},{"1612318":[3,7,15,31,63,34,255,7,247,102,246,103,247,103,244,100,67,240,96,7,241,96,254,96,24,25,24,27,35,31,23,224,31,224,159,240,207,184,167,28,19,140,139,206,201,238,233,31,31,15,71,227,115,49,21,55]},{"1612375":[6,223,127,160,96,192,127,255,136,135,2,2,64,31,64,132,151,2,9,223,14,239,38,119,147,59,201,29,228,133,38,1,224,39,48,24,140,198,227,241,248,252,111,206,79,206,239,110,247,182,251,218,253,108,255,240,248,7,48,48,16,8,4,130]},{"1612440":[7,255]},{"1612443":[255,112,253,98,241,78,67,227,28,67,199,56,15]},{"1612457":[3,13,17,35,35,71,71,255]},{"1612466":[255,14,63,198,15,242,67,7,248,29,3,252,243,12]},{"1612481":[192,48,8,4,4,2,242,52,220,52,212,49,208,57,200,29,228,30,230,26,234,40,216,195,203,131,98,1,23,5,7,5,5,255]},{"1612516":[255,127,247,255,136,136,247,128,247,127,255,192,250,255,127,128,119,127,131,75,1,45]},{"1612539":[39,255,69,170,91]},{"1612545":[174,70,95,160,1,191,64,34,4,36]},{"1612556":[224,41,22,234,26,238,26,234,8,240,9,244,27,230,42,214,46,214,225,225,229,231,227,225,193,193,206,60,141,124,201,120,203,120,235,120,223,92,141,76,165,100,3,3,34,7,2,35,51,27,67,99,159,16,223,63,191,127,176,112,224,96,239,96,224,96,28,28,32,64,79,34,31,69,64]},{"1612632":[9,124]},{"1612635":[127]},{"1612637":[131]},{"1612639":[120,120,252,252,37,255,1,135,3,35,243]},{"1612651":[247,72,243,118,1,246,115,34,12]},{"1612661":[140,35,12,10,255,254,193,254,129,254,31,252,51,240,243,68,112,251,3]},{"1612681":[28,28]},{"1612684":[35,12,15,251,124,247,120,247,122,177,114,93,190,237,30,173,30,205,78,34]},{"1612705":[24,12]},{"1612709":[64,48,5,255,28,255,62,255,127,255,253,255,250,254,249,255,252,255,248,224,192,128,131,89]},{"1612734":[224,33,1,255,48,255,38,239,15,127,60,254,186,254,89,127,92,127]},{"1612754":[16,128,1,1,128,128,1,255,20,223,54,255,15,255,125,255,134,42,4]},{"1612774":[32,34]},{"1612777":[26,1,128,128,3,252,7,249,14,242,29,228,59,201,119,147,239,38,223,14]},{"1612799":[1,3,6,12,24,48,79]},{"1612807":[255,39,255,15,72,184,75,184,107,184,123,184,105,168,68,164,218,50,204,56,35,7,24,23,27,13,7,176,195,171,192,173,192,189,210,154,232,255,243,255,124,255]},{"1612850":[28,23,18]},{"1612854":[5,132,213]},{"1612858":[68,255]},{"1612861":[8,14,255,31,251,31,241,31,245,31,34]},{"1612873":[4,14,31,27,17,17,79,170,91,39,4,77,245,31,1,187,91,38,17,6,21,137,96,151,112,187,120,67,189,124,5,158,126,198,62,240,15,131,97,1,2,3,1,1,68]},{"1612919":[2,11,4]},{"1612923":[11,3,20,7,44,15,92,31,185,190,34,255,14,252,251,243,227,70,255]},{"1612943":[191,63,223,95,255,96,240,96,67,247,103,17,246,102]},{"1612958":[64,32,31,31,24,24,25,224,31,247,8,255]},{"1612971":[207,48,67,231,24,5,238,17,255]},{"1612981":[31,8,37]},{"1612985":[11,115,252,135,120,255]},{"1612992":[243,12,241,14,113,142,67,63,192]},{"1613002":[140,134,15]},{"1613006":[5,253,126,253,70,253,86,69,253,70,2,185,70,255,35]},{"1613022":[35,16,7]},{"1613026":[172,239,63,255,2,254,1,72,255]},{"1613036":[4,16,128,193,252,254,34,255,15,158,255,31,255,15,255,128,255,169,239,58,254,1,191]},{"1613060":[199,35]},{"1613063":[18,16,1,64,56,158,255,63,255,15,255,38,255,81,223,50,254,1,255,192,132,126,5,3,32,1]},{"1613091":[73,228,251,5,204,243,24,231,240,15,36,24]},{"1613104":[48,133,215,1,147,52,3,255]},{"1613824":[34,255,12,192,215,136,248,151,220,171,234,145,229,152,227,157,34,255,2]},{"1613844":[255]},{"1613846":[67]},{"1613848":[255,67,255]},{"1613852":[9,255,255,3]},{"1613857":[28,3,34,29,66,61,67,192,63,19,164,27,170,17,240]},{"1613873":[15,240]},{"1613876":[255,113,142,81,142,74,132,85,128,91,128,133,48]},{"1613890":[224,67,207,48,88,32,87,32,84,35,87,32,31]},{"1613904":[224,31]},{"1613907":[255,231,24,52,8,213,8,85,136,213,8,128]},{"1613920":[127,128,6,249,254,1,12,3,244,3,20,227,244,3,63,1,70,56,142,112,20,224,56,192,68,184,4,248,66,252,24,24,36,60,68,124,132,252,100,124,69,36,60,4,60,60,66,126,129,69,255,153,6,255,105,111,18,30,12,12,67,18,30,69,34,62,67,82,126,1,126,126,67,129,255,9,158,254,144,240,156,252,130,254,129,255,131,160]},{"1614009":[1,34,62,131,130]},{"1614015":[6,72,120,140,252,130,254,126,132,177]},{"1614026":[3,121,127,9,15,69,18,30]},{"1614035":[60,138,145]},{"1614039":[67,153,255,133,208]},{"1614045":[131,182]},{"1614048":[133,184]},{"1614051":[79,231,153,47,255,19,51]},{"1614059":[20,3,56,7,104,23,96,31,254,1,249]},{"1614071":[192]},{"1614073":[95,128,213,10,67,81,142,8,241,14,192,63,143,112,112]},{"1614089":[80,132,73]},{"1614093":[10,84,35,220,35]},{"1614099":[255,113,14,15]},{"1614104":[20,132,89]},{"1614108":[224,37,85,136,119,136,1,254,128,127,255]},{"1614120":[12,3,248,7]},{"1614125":[255,1,255,3,255,7,255,31,255,248,248,114,252,254,254,252,252,248,248,240,240,192,192,35]},{"1614150":[77,36,60,1,24,24,131,196]},{"1614159":[67,72,120,1,142,254,67,129,255,3,126,126,82,126,67,178,254,67,129,255,1,114,126,131,158]},{"1614185":[131,154]},{"1614188":[11,9,15,105,111,153,255,129,255,66,126,60,60,137,228]},{"1614204":[133,186,1,141,224]},{"1614210":[3,66,126,124,124,131,188]},{"1614218":[69,153,255,69,130,254,1,156,252,73,144,240,1,96,96,73,153,255,18,129,255,130,254,124,124,253,255,250,255,253,255,239,255,215,255,251,255,253,38,255,8,150,255,244,255,247,255,239,255,158,34,255,67,215,255,8,57,255,223,255,95,255,190,255,121,38,255,67,95,255,4,79,255,215,255,223,34,255]},{"1614297":[127,34,255,2,243,255,227,67,255,243,1,255,97,35,255,11,127,255,255,227,255,217,255,243,255,231,255,65,38,255,140,84,2,34,255,143,100,2,2,195,255,249,131,147,2,1,255,67,34,255,8,195,255,153,255,249,255,227,255,231,34,255,131,168,2,37,255]},{"1614365":[248,132,39,2,2,238,255,241,34,255,8,31,255,111,255,247,255,123,255,187,67,255,221,17,255,251,255,231,249,199,248,206,241,225,222,247,200,255,225,255,255,221,69,255,189,1,255,219,132,167,2,37,255,4,225,255,205,255,253,131,207,2,36,255,4,242,255,243,253,247,67,255,248,4,255,203,255,199,252,131,95,2,11,111,191,111,255,159,247,247,255,251,15,255,247,39]},{"1614463":[123,69,123,74]},{"1614468":[123,39]},{"1614472":[255,67,255,9,134,59,2,8,104,255,111,255,110,255,221,255,187,38,255,8,97,255,77,255,245,255,123,255,167,38,255,69,175,255,2,171,255,103,50,255,39]},{"1614515":[127,67,127,72,1,127,73,67,127,255,132,83,2,4,211,255,193,255,115,131,16]},{"1614537":[38]},{"1614540":[252,67,252,36,18,252,228,252,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,143,176,3,2,251,255,225,71,255,192,131,220,2,35,255,12,199,215,171,215,41,239,17,215,41,215,171,255,71,47,255,6,227,255,224,255,242,255,252,132,7,3]},{"1614607":[254,34,255,7,15,251,7,255,119,255,255,143,67,255,151,3,255,31,255,255,71,74,123]},{"1614631":[78,67,127,66,34,127,8,121,255,28,255,20,247,116,247,122,67,251,10,34,251,1,255,254,67,255,252,1,255,248,132,17,2,3,253,255,254,127,67,255,63,4,255,31,255,127,159,132,81,4,1,127,255,67,255,254,3,255,252,255,253,132,97,4,131,95,2,133,82,4]},{"1614702":[31,67,255,191,131,79,2,1,127,255,140,147,2,1,73,127,67,152,255,2,153,255,41,67,239,40,34,239]},{"1614731":[228,67,252,100,67,252,228]},{"1614739":[252,67,33,255,4,255,255,126,126,198,67,254,186,7,254,194,254,250,254,134,254,252,144,175,3,12,130,130,69,199,74,207,118,255,110,255,95,255,191,132,157,3,1,192,192,67,160,224,7,32,224,163,224,166,225,212,243,135,224,3,10,199,57,239,17,239,147,239,87,255,255,172,67,255,171,5,255,139,255,171,255,172,36,255,2,189,255,185,134,225,2]},{"1614831":[136,134,13,5,6,186,255,190,255,189,255,187,142,27,5,2,190,255,137,36,255,4,216,255,141,255,173,131,67,5,1,255,173,36,255,2,157,255,169,69,255,173,1,255,152,134,77,5,6,170,255,174,255,173,255,171,142,91,5,1,174,255,133,15,1,131,82,5,5,165,255,160,255,173,255,131,15]},{"1614909":[4,255,255,152,255,171,132,119,5]},{"1614919":[170,134,139,5,4,156,255,171,255,169,67,255,170,136,139,5,133,100,5,135,138,5]},{"1614942":[200,132,225,2,4,173,255,181,255,205,34,255,1,124,124,131,178,4,15,170,238,186,254,130,254,186,254,238,238,252,252,134,254,186,254,131,226,5,131,228,5,1,252,252,133,208,5,67,166,230,5,186,254,198,254,124,124,133,224,5,67,170,238,133,234,5,4,254,254,130,254,190,131,17,6,132,19,6,35,254,135,18,6,67,160,224,1,224,224,133,208,5,4,190,254,166,254,178,132,251,5]},{"1615044":[238,67,238,170,134,215,5]},{"1615052":[170,34,238,131,16,6,1,238,254,67,40,56]},{"1615065":[238,136,27,6,2,246,254,244,67,252,180,1,252,132,34,252,5,238,238,186,254,182,254,67,136,248]},{"1615092":[182,132,219,5]},{"1615097":[224,71,224,160]},{"1615102":[224,137,26,6,73,170,254,1,254,254,131,112,6,67,154,254,67,170,254]},{"1615122":[178,134,29,6,135,4,6,135,28,6,131,216,5,141,40,6,131,214,5,5,182,254,202,254,126,126,131,16,6,131,216,5]},{"1615155":[182,132,5,6,11,238,238,126,126,194,254,190,254,204,252,118,126,134,186,4,136,81,6,67,40,56,1,56,56,133,64,6,137,182,6,137,16,7,6,214,254,108,124,56,56,254,138,147,6,133,28,7,1,186,254,131,42,7,2,108,124,214,132,219,5,135,64,7,7,104,120,216,248,176,240,224,224,131,16,6,6,250,254,52,60,108,124,222,132,27,6,135,208,5,131,214,5,131,252,5,5,248,248,136,248,232,248,137,86,6,131,224,5,5,250,254,102,126,220,252,133,26,6,133,144,7,131,98,7,133,186,4,135,64,6,4,194,254,122,126,10,34,14,133,16,6,2,198,254,122,134,249,6,133,240,6,133,230,5]},{"1615315":[198,134,13,6,11,250,254,26,30,22,30,52,60,44,60,56,56,133,208,5,131,218,5,133,250,5,255]},{"1615872":[39]},{"1615874":[7,3]},{"1615877":[15,2,31,13,27,14,35]},{"1615885":[3,3,15,31,31,35]},{"1615892":[11,96]},{"1615895":[146]},{"1615897":[204]},{"1615899":[240,64,248,176,184,80,35]},{"1615907":[10,64,240,248,216,8]},{"1615914":[28]},{"1615916":[38,24,28,68,8,20,67,28]},{"1615925":[2,8,20,58,34,28,1,20,20,57]},{"1615936":[9,126]},{"1615939":[227,98,247,118,126]},{"1615945":[60,24,67,52,16,9]},{"1615952":[126,157,137,126,36,44,44]},{"1615961":[131,48]},{"1615965":[60,70]},{"1615968":[28,5,62]},{"1615973":[8,20,36,34,20]},{"1615979":[62,240,49,96]},{"1615984":[240,45,2]},{"1615988":[240,95]},{"1615992":[240,47,48]},{"1615996":[3,57,31,61,30,67,59,28,19,31,12,31,14,15]},{"1616011":[3]},{"1616013":[63,63,62,62,30,31,14,3,124,136,238,16,73,255]},{"1616028":[224,36,206]},{"1616032":[140,222,49,245,53,181,49,206,20,8,55,8,119,8,95,32,127,40,127,8,75]},{"1616054":[1]},{"1616056":[28,63,92,119,126,126,74,1]},{"1616066":[156,70]},{"1616069":[254,67,190]},{"1616073":[224,34,28]},{"1616078":[156,98,106,234,170,162,28,126]},{"1616087":[118,60,255,66,255,126,195,66,231,102,126,60,60]},{"1616101":[126,126,189,129,189,153,66,60,127,68]},{"1616112":[62,16,30]},{"1616116":[62]},{"1616118":[60]},{"1616120":[62]},{"1616122":[28]},{"1616124":[65,62,34,26,34,44,34,158,223,1,133,250,1,19,14]},{"1616140":[4]},{"1616142":[65,62,42,42,34,26,10,4,57,31,60,31,59,31,57,30,132,136,1]},{"1616162":[3,131,142,1,19,63,63,30,31,15,3,124,136,46,208,223,96,222,32,255]},{"1616183":[255,48,255,64,131,166,1,5,241,118,49,125,241,206,131,64,2,7,63,27,63,16,31]},{"1616207":[31,1,134,76,2,2,59,17,27,131,86,2,1,110,144,141,156,1,13,177,53,181,181,177,206,20,8,54,8,117,10,95,34,131,184,1]},{"1616244":[73,34]},{"1616247":[5,28,62,95,119,126,127,131,172,2,21,14]},{"1616260":[159]},{"1616262":[222]},{"1616264":[255]},{"1616266":[207]},{"1616268":[159]},{"1616270":[14]},{"1616273":[14,145,86,49,77,145,14,134,160,2,67,32,127,1]},{"1616288":[77,133,173,2,2,123,113,123,131,220,2]},{"1616300":[78,74]},{"1616303":[255,3,78]},{"1616308":[78,132,154,2]},{"1616313":[78,240,49,48]},{"1616318":[41]},{"1616320":[2,1]},{"1616323":[27,38]},{"1616326":[1,1,26,35]},{"1616331":[131,124]},{"1616334":[6,124]},{"1616337":[248]},{"1616339":[240]},{"1616341":[224,34]},{"1616344":[5,28,36,68,136,16,32,141,48,3,1,63,1,37]},{"1616359":[25,1,62,15]},{"1616364":[31,14,59,26,119,54,238,108,220,88,248,240,240,192,15,17,37,73,146,164,8,48,240,70,96,3]},{"1616391":[63,132,120,3,6,30,119,62,238,124,220,120,132,132,3,6,31,63,127,254,252,248,240,228,54]},{"1616417":[67,1]},{"1616420":[67,3]},{"1616424":[7,34]},{"1616427":[3,1,1,3,3,131,47,4,37]},{"1616437":[67,128]},{"1616440":[67,192]},{"1616443":[34]},{"1616445":[3,128,128,192,192,131,41,4,19,7]},{"1616456":[6,1,28,3,250,5,242,13,66,61,1,2,4,5,27,229,143,127,131,63,4,67,64,128,15,48,192,142,112,134,124,140,120]},{"1616490":[128,192,192,240,126,254,252,141,176,1,16]},{"1616503":[28,63,94,118,126,126,75]},{"1616511":[128]},{"1616513":[198]},{"1616515":[239]},{"1616517":[255,132,155,4,23,94]},{"1616524":[12]},{"1616526":[128,70,169,53,169,189,82,12,31]},{"1616536":[31,8,31,4,63,26,127,56,120,48,131,143,3,224,62,20,18,25,36,71,72,48]},{"1616559":[192]},{"1616561":[140]},{"1616563":[30]},{"1616565":[190]},{"1616567":[158]},{"1616569":[30]},{"1616571":[63]},{"1616573":[30]},{"1616575":[64,140,18,162,146,18,33,30,63]},{"1616585":[27,4,17,14,59,4,127]},{"1616593":[249]},{"1616595":[240]},{"1616597":[96]},{"1616599":[35,17,16,40,70,137,144,96,192,128,156]},{"1616611":[190]},{"1616613":[255,68]},{"1616616":[190,131,248,1,7,64,156,162,217,178,166,65,62,153,224,4,4,188]},{"1616635":[254]},{"1616637":[191,132,43,5,5,126]},{"1616644":[60]},{"1616646":[64,188,67,194,185,8,66,60,63]},{"1616656":[31,4,31,14,63,146,231,4,21,140]},{"1616667":[158]},{"1616669":[190]},{"1616671":[254]},{"1616673":[255]},{"1616675":[62]},{"1616677":[12]},{"1616679":[192,140,146,162,210,193,50,12,228,48]},{"1616691":[7,68]},{"1616694":[15,67,31]},{"1616698":[67,63]},{"1616701":[8,127,7,15,15,31,31,63,63,127,68]},{"1616713":[224,67,240]},{"1616717":[67,248]},{"1616720":[12,252]},{"1616723":[254,224,224,240,240,248,248,252,254,32,31,67,16,15,6,35,31,47,28,124,56,120,34]},{"1616748":[63,131,179,5,15,124,120]},{"1616756":[56,240,112,224,48,224,56,240,152,112,124,56,60,34]},{"1616772":[248,131,202,5,2,124,60]},{"1616780":[255]},{"1617920":[12,130,130,69,199,74,207,118,255,110,255,95,255,191,34,255,3]},{"1617939":[192,192,67,160,224,224,39,32,224,163,224,166,225,212,243,1,1,3,2,6,5,12,11,13,10,15,11,15,8,15,15,240,240,16,240,112,144,240,80,176,208,96,160,192,64,128,128,35]},{"1617988":[67,4,28,7,2,126,76,124,8,56,48,48,39]},{"1618002":[3,2,126,124,124,39]},{"1618009":[67,4,28,1,24,24,67,8,56,21,48,48,20,60,18,126,17,255,29,255,1,255,130,254,68,124,56,56,9,123,52,127,69,37,111,13,9,123,115,115]},{"1618051":[33,127,175,255,34,254,174,254,67,40,120,8,120,120]},{"1618067":[9,59,53,127,36,68,111,37,16,73,123,51,51]},{"1618082":[41,123,42,126,36,252,170,254,45,127,41,34,123,5]},{"1618098":[16,112,104,248,69,72,216,21,144,240,96,96]},{"1618112":[24,8,60,4,255,41,126,42,126,2,255,17,239,41,198,198,133,206]},{"1618131":[3,60,4,126,2,68,255,1]},{"1618140":[255,68,51]},{"1618144":[67,255,51,134,241]},{"1618150":[34,255]},{"1618153":[225,68,255,237]},{"1618158":[193,68,255,159,35,255,25,69,255,1,255,171,255,199,255,207,255,199,255,223,27,231,175,95,243,31,239,63,233,63,237,63,19,34,255,7,27,231,191,95,227,63,237,63,131,52,1]},{"1618206":[45,142,45,1]},{"1618211":[35,34,255,12,35,255,123,255,247,127,119,255,193,255,247,255,23,52,255]},{"1618231":[199,72,255,231]},{"1618236":[195,134,109,1,8,179,255,243,255,231,255,207,255,131,36,255,2,135,255,243,132,145,1,2,179,255,135,36,255,67,179,255,6,183,255,131,255,231,255,199,36,255,2,195,255,159,132,145,1,131,148,1,35,255,4,227,255,207,255,135,68,255,179,133,156,1,4,195,255,147,255,187,134,133,1,135,126,1]},{"1618315":[131,68,255,179,133,172,1,131,130,1,131,228,1]},{"1618329":[243,134,171,1,11,255,231,255,219,255,165,231,189,255,219,255,231,36,255,8,231,247,203,239,213,239,149,223,169,131,123,1,12,222,253,219,230,215,249,221,230,215,248,230,251,248,34,255,12,163,127,99,223,195,63,107,215,251,151,167,127,31,34,255,67,223,255,133,32,2,1,229,254,131,44,2,67,227,255,7,163,127,107,215,219,47,103,223,131,60,2,8,255,255,254,255,252,255,249,255,147,132,113,1,137,238,1,135,232,1,146,240]},{"1618443":[255,70,255,252,4,254,255,253,255,252,36,255,20,59,127,131,143,115,255,3,255,255,143,251,254,253,253,254,254,251,253,227,243,204,68,255,128,14,255,255,115,127,131,255,7,127,135,255,11,255,3,255,35,150,126,2,36,255,17,248,255,250,255,248,255,255,139,255,127,195,255,121,255,195,255,249,127,131,124,1,15]},{"1618526":[1,7,2,14,4,28,8,56,16,112,32,224,192,192,34]},{"1618542":[10,28,24,62,16,51,32,103,34,111,5,125,131,156]},{"1618557":[13]},{"1618559":[56,50,126,66,206,132,156,68,220,8,248,240,240,133,145,2,9,243,252,239,243,239,247,215,239,223,237,35,255,8,63,255,207,255,183,255,23,255,187,67,255,219,7,246,213,239,236,243,224,255,240,134,158,2,10,203,255,251,127,247,175,247,15,207,63,63,136,227,2,10,243,255,240,255,248,255,247,255,239,255,223,34,255,24,31,255,207,255,15,255,31,255,239,255,215,255,235,255,217,255,221,254,223,252,221,255,223,255,231,131,237,2,7,255,35,255,99,255,227,127,99,132,10,2,133,92,2,31,253,251,189,243,190,249,215,252,227,255,214,255,191,249,255,255,223,127,187,207,183,217,255,3,255,231,31,255,255,231,191,240,72,255,224,132,88,3,13,143,115,135,121,199,57,207,49,255,1,255,3,255,15,39,255]},{"1618743":[129,42,255,12,240,255,229,255,202,255,133,255,138,255,133,255,192,34,255,14,127,255,31,255,175,255,87,255,163,255,93,255,61,255,224,132,152,2,3,254,243,255,227,132,24,1,3,255,125,255,251,132,121,3,133,92,2,134,93,2]},{"1618804":[248,68,255,240,2,224,255,192,132,188,2,12,127,255,31,191,79,31,239,143,119,239,19,231,25,68,255,128,1,192,251,68,255,240,131,44,2,6,255,1,255,97,159,243,31,68,255,15,134,172,3,132,49,4,131,122,3,67,239,255,12,251,254,255,253,206,251,159,247,251,239,243,255,247,37,255,19,225,255,241,255,49,255,45,255,223,255,167,255,103,255,139,255,31,243,255,35,67,255,243,1,63,225,42,255,1,129,126,70,255]},{"1618915":[139,197,4,2]},{"1618920":[255]},{"1618922":[139,212,4,68,255]},{"1618928":[5,139,255,63,227,255,89,131,133,1,1,127,193,132,13]},{"1618944":[35]},{"1618946":[3,1,1,3,3,67,4,7,1,8,15,133]},{"1618960":[6,119,255,110,255,94,255,190,136,253,4,9,128,128,192,192,35,224,38,225,20,243,131,126,3,8,103,255,171,255,107,255,170,255,167,34,255,79,9,15,138,112,3,3,254,239,252,210,34,255,135,203,4,37]},{"1619015":[12,211,255,213,254,219,254,215,252,221,255,231,255,249,34,255,79,149,243,4,148,243,150,241,147,74,240,144,12,203,255,171,127,219,127,235,63,123,255,103,255,95,136,253,4,35]},{"1619062":[1,255]},{"1619065":[137,102,5,35]},{"1619070":[4,192]},{"1619073":[96,128,32,80,192,160,80,255]},{"1619082":[143,189,4,45,255]},{"1619088":[254,136,227,2,6,224,255,135,255,31,255,127,133,111,3,9,253,231,250,207,244,159,249,158,243,157,133,127,3,8,63,231,95,179,207,121,143,249,47,131,124,5,143,4,6,12,241,251,229,247,201,239,147,223,167,255,15,255,63,134,50,3]},{"1619151":[240,67,223,224,3,185,198,144,239,132,66,3,2,63,247,15,67,251,7,3,237,19,197,59,133,49,3,12,251,207,251,143,251,15,253,7,254,147,255,255,141,70,255,181]},{"1619196":[142,38,255,8,173,255,165,255,161,255,169,255,109,38,255,8,152,255,123,255,72,255,107,255,152,38,255]},{"1619224":[205,68,255,180,2,181,255,205,38,255,67,191,255,67,63,255,131,12]},{"1619243":[35,255,4,68,255,109,255,108,132,227,6,37,255,8,93,255,201,255,85,255,221,255,93,135,143,2,67,249,255,67,243,255,68,231,255,3,30,30,63,33,67,63,45,15,127,65,254,158,240,144,96,96,246,155,248,207,253,231,255,243,132,97,2,7,252,255,255,111,249,223,243,191,131,136,1]},{"1619319":[127,68,255,63,11,255,227,255,245,251,254,241,236,251,198,255,143,132,12,1,7,244,255,250,247,253,251,254,229,133,42,4,133,145,2,3,242,253,238,241,67,220,227,67,184,199,139,112,6,7,253,3,13,243,255,209,255,224,132,154,3,133,154,3,34,255,8,140,255,187,255,138,255,187,255,140,38,255]},{"1619398":[218,70,255,90]},{"1619403":[166,38,255]},{"1619407":[141,132,197,6,2,141,255,189,38,255,8,209,255,151,255,81,255,215,255,209,38,255,13,252,255,240,255,233,246,217,230,219,228,186,197,188,195,137,112,6,5,131,127,97,159,57,199,47]},{"1619456":[255]},{"1622016":[19,254,6,253,44,251,24,247,56,231,108,219,198,189,131,126]},{"1622033":[255]},{"1622035":[255]},{"1622037":[255]},{"1622039":[255]},{"1622041":[255]},{"1622043":[255]},{"1622045":[255]},{"1622047":[255,230]},{"1622050":[217]},{"1622052":[157]},{"1622054":[110]},{"1622056":[118]},{"1622058":[185]},{"1622060":[155]},{"1622062":[103]},{"1622064":[230,230,217,217,157,157,110,110,118,118,185,185,155,155,103,103,1,252,35,249,7,243,143,231,23,207,39,159,67,63,129,126,2,255,4,255,8,255,16,255,32,255,64,255,128,255,1,255,253,252,251,249,215,211,119,111,224,216,218,188,237,46,254,125,2,255,4,255,40,255,144,255,39,255,67,255,145,255,2,255,193,124,99,185,55,211,155,103,201,55,196,59,254,1,255]},{"1622160":[2,255,4,255,8,255]},{"1622167":[255]},{"1622169":[255]},{"1622171":[255]},{"1622173":[255]},{"1622175":[255,245,243,203,199,20,12,36,24,90,60,230,103,193,193,3,1,12,255,56,255,243,255,231,255,195,255,153,255,62,255,254,255,129]},{"1622210":[195,129,102,66,60,36,24]},{"1622218":[60,24,102,36,195,66,129,129,195,195,102,102,60,60,24,24,60,60,102,102,195,195]},{"1622272":[239,28,219,54,172,123,114,205,186,229,75,180,235,20,239,16,223,255,183,255,123,255,205,255,229,255,180,255,23,255,219,255,253,10,246,41,223,32,254,1,253,2,247,8,255]},{"1622318":[255]},{"1622320":[255,255,169,255,166,255,159,255,254,255,233,255,243,255,255,255,63,188,124,115,240,239,41,223,89,63,219,191,186,127,188,127,67,252,143,240,31,224,63,192,255,128,127,128,255]},{"1622366":[255]},{"1622368":[220,29,56,203,200,246,247,251,251,253,130,252,97,254,57,254,226,63,244,15,249,7,252,3,254,1,255,1,255]},{"1622398":[255]},{"1622400":[56,185,11,200,100,2,153,167,251,231,223,227,53,75,99,28,70,255,52,255,153,255,64,255]},{"1622425":[255]},{"1622427":[255,128,255,128,255,24,217,176,51,64,134,33,93,153,165,156,160,178,204,233,30,38,255,76,255,57,255,130,255,66,255,67,255,1,255]},{"1622463":[255,56,185,11,200,100,2,153,167,251,231,223,227,53,75,99,28,70,255,52,255,153,255,64,255]},{"1622489":[255]},{"1622491":[255,128,255,128,255,24,217,176,51,64,134,33,93,153,165,156,160,178,204,233,30,38,255,76,255,57,255,130,255,66,255,67,255,1,255]},{"1622527":[255,126,129,195,126,165,126,163,126,137,126,161,126,195,126,126,129]},{"1622545":[255,126,255,126,255,126,255,126,255,126,255,126,255]},{"1622559":[255,1,252,66,249,55,243,111,231,219,195,191,153,125,62,238,111,2,255,4,255,8,255,16,255,36,255,66,255,129,255,16,255,56,186,9,205,131,235,195,243,195,239,146,210,30,159,8,203,69,255,50,255,20,255,12,255,16,255,45,255,96,255,52,255,62,127,159,191,195,211,131,187,1,101,24,218,8,185,72,75,128,255,64,255,44,255,68,255,154,255,37,255,70,255,180,255,56,186,9,205,131,235,195,243,195,239,146,210,30,159,8,203,69,255,50,255,20,255,12,255,16,255,45,255,96,255,52,255,62,127,159,191,195,211,131,187,1,101,24,218,8,185,72,75,128,255,64,255,44,255,68,255,154,255,37,255,70,255,180,255,129,103,65,189,35,91,145,173,232,246,228,235,242,245,249,250,24,255,2,255,132,255,66,255,1,255,16,255,8,255,4,255,241,246,226,237,132,154,137,181,19,107,33,221,88,190,188,127,8,255,16,255,97,255,66,255,132,255,2,255,1,255]},{"1622783":[255,223,60,249,118,253,50,205,50,161,94,167,88,143,112,175,80,189,255,118,255,50,255,50,255,94,255,89,255,115,255,87,255,255]},{"1622818":[189,66,27,228,207,48,231,24,243,12,247,8,255]},{"1622832":[255,255,254,255,253,255,59,255,159,255,207,255,235,255,231,255,156,127,134,127,65,191,95,63,175,159,147,175,12,99,11,200,255]},{"1622866":[255]},{"1622868":[127,128,255,128,127,192,95,224,159,240,55,252,61,254,93,254,218,252,155,253,151,251,9,245,51,195,206,46,255]},{"1622898":[255]},{"1622900":[255,1,254,1,252,3,250,7,252,15,209,63,195,60,74,188,34,92,154,172,146,172,158,160,34,65,29,220]},{"1622929":[255,1,255,129,255,65,255,65,255,65,255,156,255,34,255,37,30,209,206,238,224,233,229,225,233,193,221]},{"1622957":[54,200,43,192,255,32,255,17,255,18,255,22,255,34,255,201,255,20,255,195,60,74,188,34,92,154,172,146,172,158,160,34,65,29,220]},{"1622993":[255,1,255,129,255,65,255,65,255,65,255,156,255,34,255,37,30,209,206,238,224,233,229,225,233,193,221]},{"1623021":[54,200,43,192,255,32,255,17,255,18,255,22,255,34,255,201,255,20,255,127,128,224,96,207,64,155,8,156,8,156,8,156,8,156,8]},{"1623057":[255,31,255,48,255,103,255,103,255,103,255,103,255,103,255,251,38,229]},{"1623076":[253]},{"1623078":[253,60,225]},{"1623082":[129,126,129,126,255]},{"1623088":[88,255,90,255,66,255,66,255,126,255]},{"1623099":[255]},{"1623101":[255]},{"1623103":[255,128,127]},{"1623107":[128,96,128,191,63,191,63,192,127,128,127,255]},{"1623121":[255,127,255,127,255,64,255,64,255]},{"1623131":[255]},{"1623133":[255]},{"1623135":[255,181,66,231,36,165,102,165,102,165,102,165,102,165,102,165,126,24,255,24,255,24,255,24,255,24,255,24,255,24,255]},{"1623167":[255,156,127,128,127,192,63,255,64,179,127,192,63,255]},{"1623182":[127,128]},{"1623185":[255]},{"1623187":[255]},{"1623189":[255]},{"1623191":[255]},{"1623193":[255]},{"1623195":[255]},{"1623197":[255]},{"1623199":[255,1,254,3,252,255]},{"1623206":[159,254,1,254,255]},{"1623212":[255]},{"1623214":[255]},{"1623217":[255]},{"1623219":[255]},{"1623221":[255]},{"1623223":[255]},{"1623225":[255]},{"1623227":[255]},{"1623229":[255]},{"1623231":[255,64,191,160,223,228,12,162,14,178,86,178,86,180,70,176,90]},{"1623249":[255]},{"1623251":[255,19,255,81,255,73,255,73,255,73,255,69,255,255]},{"1623266":[255]},{"1623268":[255,63,240,48,225,33,236,44,228,36,240,48]},{"1623281":[255,127,255,64,255,79,255,94,255,83,255,91,255,79,255,2,6,5,12,7,16,3,36,25,66,60,129,126]},{"1623310":[253]},{"1623312":[253,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,49,191,35,191,7,191,39,191,63,222,14,255,64,249,61,226,78,255,92,255,120,255,88,255,97,255,113,255,63,255,29,255,249,246,225,222,129,254,9,254,13,254,15,254,64,241,144,111,15,255,63,255,127,255,247,255,243,255,241,255,190,255,144,255,129,103,65,189,35,91,145,173,232,246,228,235,242,245,249,250,24,255,2,255,132,255,66,255,1,255,16,255,8,255,4,255,255,255,191,191,95,127,57,249,224,241,238,255,240,254,253,253]},{"1623441":[255,64,255,128,255,6,255,14,255]},{"1623451":[255,1,255,2,255,224,227,209,223,175,191,71,103,39,127,62,126,190,255,127,255,28,255,32,255,64,255,152,255,128,255,129,255]},{"1623485":[255]},{"1623487":[255,56,185,8,203]},{"1623493":[102,129,189,195,219,193,221,131,179,14,110,70,255,52,255,153,255,66,255,36,255,34,255,76,255,145,255,62,255,31,159,27,219,3,99,129,185,128,188]},{"1623533":[102,8,203]},{"1623537":[255,96,255,36,255,156,255,70,255,67,255,153,255,52,255,155,8,159,15,153,15,143,16,192,64,255,96,191,112,156,108,103,255,96,255,96,255,96,255,63,255,31,255]},{"1623581":[255,3,255,155,8,159,15,153,15,143,16,192,64,255,96,191,127,156,127,103,255,96,255,96,255,96,255,63,255,31,255]},{"1623613":[255]},{"1623615":[255,159,1,1,1,1,1,1,1,51,51,254,255,254,255,206,255,254,255,254,255,254,255,254,255,204,255]},{"1623643":[255]},{"1623645":[255]},{"1623647":[255,177,80,217,56,155,120,147,112,147,112,153,120,158,126,129,120,15,255,7,255,7,255,15,255,15,255,7,255,1,255,7,255,255]},{"1623683":[255,254,255,1,1,1,1,243,1,255,1,255,1]},{"1623697":[255]},{"1623699":[255]},{"1623701":[255,254,255,254,255,254,255,254,255,254,255,240,15,225,30,195,60,135,121,14,243,30,227,63,201,119,156,240,255,224,255,192,255,128,255,1,255,1,255]},{"1623741":[255,8,255,160,87,168,90,165,95,181,111,184,119,191,56,128,31,255]},{"1623760":[72,255,69,255,64,255,96,255,112,255,120,255,127,255]},{"1623775":[255,224,32,230,38,246,54,255]},{"1623784":[191,127,234,85,149,63,224,64,95,255,89,255,73,255,127,255]},{"1623801":[255]},{"1623803":[255,64,255,63,255,227,24,140,115,24,231,40,215,71,187,157,127,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,57,198]},{"1623843":[241,62,223,39,190,3,191,35,191,56,183,63,191,57,255,127,255,97,255,89,255,120,255,92,255,79,255,64,255,128,127,1,130,121,254,56,255,24,255,141,254,226,223,248,247,128,255,255,255,135,255,198,255,230,255,115,255,60,255,15,255,241,246,226,237,132,154,137,181,19,107,33,221,88,190,188,127,8,255,16,255,97,255,66,255,132,255,2,255,1,255]},{"1623935":[255,226,227,209,223,175,191,95,127,48,121,49,127,63,255,127,255,28,255,32,255,64,255,128,255,134,255,128,255]},{"1623965":[255]},{"1623967":[255,231,231,139,207,155,223,199,255,252,253,253,255,158,222,204,253,24,255,48,255,32,255]},{"1623991":[255,2,255]},{"1623995":[255,33,255,2,255,28,221,24,219]},{"1624005":[102,131,191,193,221,224,230,248,251,252,253,34,255,36,255,153,255,64,255,34,255,25,255,4,255,2,255,60,189,120,123,240,246,33,237,33,41,193,221]},{"1624045":[54,8,235,66,255,132,255,9,255,18,255,214,255,34,255,201,255,20,255,17,17,17,18,17,3,19,17,17,17,17,18,17,3,19,17,17,17,17]},{"1624128":[49,17,17,17,17,35,51,23,1,51,51,17,17,1,16]},{"1624144":[49,17,17,17,17,35,51,23,17,17,17,18,17,1,16]},{"1624160":[17,17,17,18,17,1,17,49,49,17,17,17,17,19,51,19,49,17,17,17,17,35,51,39,17,17,17,18,17,3,19,50,17,17,17,17,17,1,17,49,65,17,18,16,33,1,51,23,49,17,17,17,33,35,51,23,1,17,17,19,35,32,3,39]},{"1624237":[16]},{"1624248":[17,17,17,17,17,34,34,39,1,17,17,18,17,35,19,55,17,18,17,18,17,1,19,35]},{"1624280":[34,34,34,34,34,2,34,50]},{"1624320":[49,17,17,17,1,35,51,23]},{"1624336":[49,17,17,17,17,35,51,39,1,17,17,18,17,3,35,35,1,17,17,18,17,3,35,35]},{"1624368":[1,17,17,3,49]},{"1624374":[3,19]},{"1624381":[32]},{"1624383":[7]},{"1624405":[16]},{"1624560":[17,17,17,17,17,33,34,39]},{"1624569":[33,17,17,17,1,17,17]},{"1624577":[17,17]},{"1624584":[49,17,17,17,17,3,19,23,49,17,17,17,17,35,51,23,49,67,17,17,17,3,3,23,49,17,17,17,17,3,3,23,49,67,17,17,17,3,3,23,49,17,17,17,17,3,51,23,49,17,17,17,17,3,19,39,49,67,17,17,17,3,3,23,49,67,17,17,17,3,3,39,49,67,17,17,17,3,51,23,49,17,17,17,17,35,51,23,17,17,17,33,17,1,19,51,17,17,17,17,17,3,35,35,49,17,17,18,17,35,51,23,49,17,17,18,17,35,51,23]},{"1624712":[49,17,17,33,17,1,51,51]},{"1624728":[19,51,51,48,17,1,16]},{"1624736":[1,51,51,16,17,1,16]},{"1624744":[17,17,17,17,17,3,19,33,49,17,17,17,17,3,19,33]},{"1624768":[49,17,17,19,17,33,51,23]},{"1624798":[3,3]},{"1624806":[3,3]},{"1624864":[17,17,17,17,17,1,19,51]},{"1624912":[81,49,17,17,17,3,3,23,49,17,17,17,17,1,17,17]},{"1624936":[49,17,17,18,17,35,51,23,49,17,17,18,17,35,51,23,17,17,17,18,17,3,51,19]},{"1624968":[49,17,17,19,17,3,51,19]},{"1625032":[17,17,17,18,17,17,17,49]},{"1625056":[1,17,17,16,33,3,51,51]},{"1625096":[1,17,17,18,17,3,50,50]},{"1625112":[1,18,33,32,18]},{"1625123":[16,1]},{"1625128":[17,17,17,17,17,1,35,35,1,17,17,16,1,1,51,23]},{"1625152":[1,17]},{"1625157":[4]},{"1625176":[49,17,17]},{"1625180":[17,3,51,35]},{"1625185":[17,17,16,1,1,16]},{"1625193":[17,17]},{"1625196":[17,1,16]},{"1625200":[17,17,17,17,33,1,50,35,49,17,17,18,33,3,51,18,17,17,17,16,17,1,19,50,17,17,17]},{"1625233":[17,17,16,17]},{"1625248":[17,17,17,18,17,3,19,35]},{"1625288":[17,17,17,18,33,1,3,18,17,17,17,18,17,2,50,17,1,17,17,16,1,1,18,50,1,17,17,18,17,3,35,34,1,17,17,18,17,3,35,34]},{"1625354":[17]},{"1625357":[2,2]},{"1625361":[17,17]},{"1625365":[5]},{"1625373":[1,2]},{"1625376":[1,17,17,16,17,3,1,49,49,17,17,17,33,3,51,19,49,17,17,17,33,3,51,19,17,17,17,17,17,33,35,39,1,17,17,18,17,3,51,17,1,17,17,18,17,3,51,17,17,17,17,17,17,3,19,19,17,17,17,17,17,1,16]},{"1625488":[17,17,17,18,17,1,17,49]},{"1625577":[17,17,48,17]},{"1625585":[17,17,48,17]},{"1625624":[1,17,17,48,17]},{"1625646":[1,49]},{"1625654":[1,49,1,17,17,16,18,3,19,19]},{"1625672":[81,17,17,48,33,3,49,49,80]},{"1625689":[17,17]},{"1625697":[17,17]},{"1625702":[64]},{"1625705":[17,17]},{"1625709":[4]},{"1625712":[1,17,17]},{"1625720":[17,17,17,18,17,1,17,33]},{"1625729":[1,17]},{"1625732":[2]},{"1625741":[16,2,34]},{"1625749":[32]},{"1625751":[7,17,17,17,17,17,33,17,39]},{"1625777":[3,51]},{"1625788":[2]},{"1625792":[255,252,253,250,255,241,255,227,255,199,255,143,255,159,255,255,191,115,255,127,255,255,255,255,255,255,255,255,255,255,255,255,249,198,225,158,253,159,251,157,223,186,239,220,255,227,255,255,231,155,195,191,195,63,131,127,135,127,135,127,255,135,255,255,255,24,255,24,255,24,255,24,255,24,255]},{"1625868":[255,129,255,195,255,231,255,231,255,231,255,231,255,231,255,231,255,231,255,231,255,24,255]},{"1625892":[255]},{"1625894":[255,24,255,24,255,24,255,24,255,24]},{"1625906":[63,63,127,68,111,80,114,79,115,109,126,74,124,68]},{"1625922":[255,255,255]},{"1625926":[255]},{"1625929":[255,255,255]},{"1625936":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,255,249,255,229,255,253,255,79,255,127,255,127,255]},{"1625970":[1,1,2,3,1,1,3,3,5,7,5,7,8,15,255,255,255,1,255,1,1,255,255,255,255,255,255,255,255,255,255,255,255]},{"1626004":[255]},{"1626007":[255,255,255,255,255,255,255,255,255]},{"1626018":[192,192,32,224,160,224,32,224,227,224,38,225,212,243,15,15,63,48,119,72,120,71,215,175,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,255,255,255,255,255,255,247,255,240,255,244,251,247,248,247,248,246,249,247,249,251,252,253,254,254,255,255,255,255,255,255,255,255,255,252,255,240,255,231,248,239,240,223,224,219,228,217,230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,255,128,255,184,159,254,207,255,231,255,243,255,255,255,255,225,255,241,255,49,255,45,255,223,255,167,255,103,250,255,253,255,250,207,247,159,239,251,255,243,255,247,255,255,255,255,225,255,241,255,241,63,237,63,223,255,191,231,127,231,255,255,255,255,255,255,192,255,255,191,255,128,255,192,255,255,255,255,255,255,255,255,15,255,231,255,247,31,247,31,247,31,255,255,252,255,240,255,233,246,217,230,219,228,186,197,188,195,255,255,252,255,242,253,238,241,220,227,220,227,184,199,184,199,255,255,252,255,243,252,239,240,223,224,223,224,185,198,144,239,255,255,253,251,189,243,190,249,215,252,227,255,214,255,191,249,255,255,223,127,187,207,183,217,255,3,255,231,31,255,255,231,255,255,255,255,255,255,254,253,255,242,255,225,247,232,255,192,255,255,159,255,109,255,115,191,255,79,255,135,207,55,231,27,255,255,254,255,191,250,191,226,255,146,255,146,255,202,255,202,255,255,127,255,125,223,253,71,255,73,255,73,255,83,255,83,255,255,255,199,223,163,219,37,239,145,119,137,127,195,159,247,251,254,255,253,206,251,159,247,251,239,243,255,247,255,255,255,255,227,255,243,127,243,63,249,159,249,207,249,239,243,255,255,254,255,253,255,251,207,247,159,239,251,255,243,255,247,255,255,255,255,225,255,241,255,241,255,237,255,223,255,191,255,127,255,255,255,225,255,249,255,229,255,253,255,79,255,127,255,127,255,247,159,247,159,247,159,247,159,247,159,247,159,255,207,255,255,156,227,134,249,193,254,223,224,239,240,243,252,252,255,255,255,176,207,191,192,223,224,223,224,239,240,243,252,252,255,255,255,163,220,183,200,223,224,223,224,239,240,243,252,252,255,255,255,191,240,255,224,255,224,255,224,255,224,255,240,255,252,255,255,143,115,135,121,199,57,207,49,255,1,255,3,255,15,255,255,239,208,239,208,255,192,255,224,255,224,255,240,255,252,255,255,255,255,255,255,255,255,255,254,255,254,255,254,255,254,255,252,255,255,255,135,255,3,255,49,255,121,255,121,127,241,191,97,255,35,255,7,255,135,255,199,255,207,191,207,127,159,255,63,255,255,255,255,255,255,255,255,254,255,253,255,253,255,254,255,255,255,255,193,221,227,221,163,227,157,119,137,111,215,159,255,255,254,255,252,254,249,253,242,251,228,255,224,255,240,255,248,255,127,247,63,115,159,57,207,159,103,207,51,255,1,243,12,255,255,255,255,255,255,255,255,255,255,247,255,231,255,195,254,255,255,255,231,247,203,255,225,223,225,191,203,127,159,255,63,255,255,255,255,255,255,255,254,255,250,255,240,249,238,247,232,255,255,255,255,255,195,255,11,127,163,255,7,255,135,255,15,255,255,240,255,229,255,202,255,133,255,138,255,133,255,192,255,255,255,127,255,31,255,175,255,87,255,163,255,93,255,61,255,255,255,255,224,255,192,248,199,248,199,255,192,255,192,255,192,255,255,255,7,255,7,31,231,31,231,255,7,255,7,255,7,255,255,254,255,252,255,253,255,255,240,255,224,247,255,247,254,255,252,253,250,255,241,255,227,255,199,255,143,255,159,255,255,191,115,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,255,51,255,7,255,7,255,47,255,103,255,71,252,255,248,255,245,255,239,243,223,231,191,207,255,159,255,255,111,255,159,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,243,254,225,255,193,255,131,255,135,255,207,255,255,255,251,4,255,1,255,3,255,135,255,207,255,255,255,255,255,255,199,252,135,252,131,255,168,255,176,255,152,255,193,255,255,255,255,127,255,255,127,255,31,255,63,255,127,255,255,255,255,255,255,192,255,208,255,193,255,192,255,193,255,227,255,255,255,255,255,15,255,223,255,63,255,31,255,95,255,191,255,255,255,255,224,255,252,255,254,255,254,243,255,227,255,199,255,207,255,255,125,255,251,255,247,255,239,255,31,255,255,255,255,255,255,255,255,197,255,192,255,192,255,207,248,223,255,207,255,224,255,255,255,87,255,7,255,7,255,255,15,255,255,255,255,7,255,255,247,254,247,254,247,252,247,252,247,254,243,254,255,224,255,255,47,255,47,255,239,63,175,127,175,127,207,127,255,7,255,255,255,240,255,252,255,254,255,254,255,254,255,254,255,254,255,255,255,15,255,63,255,127,255,31,255,63,255,31,255,127,255,255,255,255,248,255,243,255,240,255,248,255,247,255,239,255,223,255,255,255,31,255,207,255,15,255,31,255,239,255,215,255,235,255,255,255,248,255,243,255,240,255,248,255,247,255,239,255,215,239,27,231,191,95,227,63,237,63,227,63,237,63,45,255,255,255,27,231,175,95,243,31,239,63,233,63,237,63,19,255,255,255,27,231,191,95,227,63,237,63,227,63,237,63,35,255,255,255,35,255,123,255,247,127,119,255,193,255,247,255,23,255,255,255,255,255,31,255,207,255,15,255,31,255,239,127,247,63,75,255,255,255,255,255,255,143,159,224,231,248,185,222,222,231,223,225,255,255,255,191,255,31,255,31,255,63,191,111,127,207,255,143,255,255,255,248,255,243,253,231,250,207,244,159,249,158,243,157,255,255,255,31,255,207,63,231,95,179,207,121,143,249,47,249,255,255,255,255,255,252,255,252,255,252,255,254,255,253,255,252,255,255,255,255,255,59,127,131,143,115,255,3,255,255,143,251,255,255,242,255,243,253,247,255,248,255,248,255,203,255,199,252,255,255,127,255,111,191,111,255,159,247,247,255,251,15,255,247,223,255,223,255,223,255,223,255,223,255,231,255,248,255,255,255,227,255,227,255,227,255,235,255,219,255,231,255,31,255,255,255,216,231,223,224,223,224,223,224,222,225,231,248,248,255,255,255,27,231,163,95,227,31,235,23,219,39,231,31,31,255,255,255,217,255,221,254,223,252,221,255,223,255,231,255,248,255,255,255,35,255,99,255,227,127,99,255,219,255,231,255,31,255,255,255,211,255,213,254,219,254,215,252,221,255,231,255,249,255,255,255,203,255,171,127,219,127,235,63,123,255,103,255,95,255,255,255,223,224,223,224,191,192,191,192,191,192,206,241,240,255,255,255,255,15,255,135,255,65,61,227,99,255,127,255,255,255,255,255,246,155,248,207,253,231,255,243,255,254,255,252,255,252,255,255,111,249,223,243,191,231,255,207,255,127,255,63,255,63,255,255,254,253,253,254,254,251,253,227,243,204,255,128,255,128,255,255,255,115,127,131,255,7,127,135,255,11,255,3,255,35,255,255,227,255,224,255,242,255,252,255,248,255,248,255,254,255,255,255,15,251,7,255,119,255,255,143,255,151,255,151,255,31,255,255,255,255,255,242,253,243,255,247,255,248,255,248,255,203,252,199,255,255,255,127,191,111,255,111,247,159,255,247,15,251,247,255,255,255,255,254,255,248,255,240,255,240,255,224,255,192,255,128,255,255,255,127,255,31,191,79,31,239,143,119,239,19,231,25,255,255,255,255,252,255,243,252,239,243,239,247,215,239,223,237,255,255,255,255,63,255,207,255,183,255,23,255,187,255,219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,231,255,199,255,143,255,31,255,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,241,251,229,247,201,239,147,223,167,255,15,255,63,255,127,255,255,195,255,249,255,195,255,249,255,67,255,255,255,255,255,255,255,255,255,247,255,240,255,244,251,247,248,247,248,255,255,252,255,240,255,231,248,239,240,223,224,219,228,217,230,255,255,199,255,192,255,216,255,223,239,220,239,217,239,211,238,255,255,243,239,43,255,239,255,131,125,239,255,171,127,123,175,255,255,255,252,255,243,251,207,251,143,251,15,253,7,254,147,255,227,255,224,255,242,255,252,255,248,255,248,255,254,255,255,251,15,255,7,255,119,143,255,151,255,151,255,31,255,255,255,255,128,255,128,255,192,251,255,240,255,240,255,248,255,255,255,255,1,255,97,159,243,31,255,15,255,15,255,31,255,255,255,219,246,213,239,236,243,224,255,240,255,252,255,255,255,255,255,203,255,251,127,247,175,247,15,207,63,63,255,255,255,255,255,244,255,250,247,253,251,254,229,255,199,255,207,255,255,255,255,127,255,255,255,243,255,227,255,243,255,243,255,97,255,255,255,227,255,245,251,254,241,236,251,198,255,143,255,159,255,255,255,255,127,255,255,227,255,217,255,243,255,231,255,65,255,255,255,255,127,255,255,243,255,227,255,211,255,193,255,115,255,255,255,246,249,247,249,251,252,253,254,254,255,255,255,255,255,255,255,220,231,220,227,238,243,239,241,247,248,249,254,254,255,255,255,222,229,221,226,251,228,239,249,198,187,233,255,252,239,255,255,251,55,219,119,187,247,119,239,239,223,223,63,63,255,255,255,255,209,255,224,231,255,248,255,255,231,255,248,255,255,255,255,255,255,255,255,227,255,221,255,190,255,191,255,191,255,191,255,255,255,255,255,227,255,221,227,190,193,191,192,191,192,191,192,255,255,255,248,254,241,252,243,254,225,248,231,252,227,240,207,255,255,255,127,247,59,103,185,123,189,127,173,255,77,239,85,255,255,248,255,231,255,223,254,223,252,191,248,185,255,184,255,255,255,255,255,255,255,248,255,247,255,239,255,238,255,241,255,255,255,31,255,111,255,247,255,123,255,187,255,221,255,221,255,255,255,254,255,254,255,252,255,253,255,254,255,254,255,255,255,127,255,63,255,63,255,31,255,31,255,191,255,191,255,127,255,255,255,255,255,199,255,223,248,255,231,251,255,227,255,255,255,255,255,255,227,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,255,249,255,248,255,248,255,252,255,255,255,255,63,255,255,191,191,95,191,95,255,31,255,63,255,255,255,255,255,225,255,237,255,237,255,193,255,159,255,159,255,255,255,255,255,69,255,1,255,171,255,199,255,207,255,199,255,223,255,255,201,255,182,201,190,193,190,193,221,227,235,247,247,255,223,255,239,255,247,255,251,255,253,255,254,255,255,255,255,255,223,224,239,240,247,248,251,252,253,254,254,255,255,255,255,255,249,198,225,158,253,159,251,157,223,186,239,220,255,227,255,255,231,155,195,191,195,63,131,127,135,127,135,127,255,135,255,255,220,191,222,191,231,159,248,199,255,192,255,224,255,248,255,255,251,255,231,249,199,248,206,241,225,222,247,200,255,225,255,255,221,255,189,255,189,255,189,255,219,255,231,255,255,255,255,255,255,254,255,252,255,252,255,248,255,250,255,253,255,253,255,254,127,255,63,255,63,255,31,255,127,159,255,63,255,63,255,127,255,255,255,255,255,199,248,223,231,255,255,251,255,227,255,255,255,255,227,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,253,252,251,253,250,255,251,255,248,255,255,255,255,31,255,127,159,255,95,191,223,127,191,255,127,255,255,255,255,255,231,255,219,255,165,231,189,255,219,255,231,255,255,255,255,255,231,247,203,239,213,239,149,223,169,255,195,255,255,255,255,255,255,235,255,213,235,221,227,235,247,247,255,255,255,255,255,227,255,217,255,217,255,179,255,179,255,135,255,255,255,255,255,227,255,243,255,231,255,231,255,207,255,135,255,255,255,255,255,227,255,217,255,243,255,231,255,197,255,147,255,255,255,255,255,193,255,243,255,199,255,243,255,179,255,135,255,255,255,255,255,217,255,209,255,179,255,129,255,231,255,199,255,255,255,255,255,225,255,207,255,199,255,243,255,243,255,135,255,255,255,255,255,241,255,231,255,199,255,147,255,179,255,135,255,255,255,255,255,227,255,217,255,185,255,243,255,231,255,207,255,255,255,255,255,227,255,217,255,193,255,179,255,179,255,135,255,255,255,255,255,227,255,217,255,217,255,195,255,243,255,135,255,255,255,255,255,255,255,231,255,231,255,255,255,207,255,207,255,255,255,255,255,254,255,252,255,249,255,147,255,199,255,231,255,255,255,255,255,255,255,231,255,231,255,131,255,207,255,207,255,255,255,255,255,255,255,255,255,255,255,131,255,255,255,255,255,255,255,215,255,147,255,17,255,29,255,1,255,131,255,199,255,255,255,255,255,201,255,182,255,190,255,190,255,221,255,235,255,247,255,255,239,255,199,255,41,255,171,255,131,255,17,255,57,255,255,255,255,255,239,255,199,255,199,255,131,255,1,255,1,255,255,251,255,225,255,192,255,192,255,192,255,192,255,225,255,255,255,255,139,255,31,243,255,35,255,243,255,243,63,225,255,255,255,255,139,255,63,227,255,89,255,243,255,231,127,193,255,255,255,255,139,255,127,195,255,121,255,195,255,249,127,195,255,255,255,255,255,255,223,239,191,247,159,251,207,253,231,254,243,254,243,249,255,252,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,31,255,143,255,199,255,231,255,254,255,253,207,251,159,247,251,239,243,255,247,255,255,255,255,255,255,225,255,241,255,241,255,237,255,223,255,191,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,248,255,224,255,135,255,31,255,127,255,252,255,249,255,249,255,243,255,243,255,231,255,231,255,231]},{"1630208":[75,190,126,3,188,124,185,121,37,1,3,3,6,255,255,42]},{"1630225":[1,255,127,38,255]},{"1630232":[132,38]},{"1630235":[3,179,179,243,243,35,255,1,223,223,42,255,14]},{"1630250":[255,239,16,220,39,178,79,97,159,192,63,128,127,39]},{"1630265":[131,72]},{"1630268":[131,72]},{"1630271":[69]},{"1630273":[255,137,24]},{"1630277":[67,255]},{"1630280":[10,191]},{"1630283":[159]},{"1630285":[207]},{"1630287":[224]},{"1630289":[127]},{"1630291":[245,34]},{"1630294":[5,123,123,59,31,128,138,69,127,255,5,120,248,183,127,192,63,67,255]},{"1630314":[3,63,31,15,7,133,92]},{"1630322":[3,128,127,255,127,67,128]},{"1630330":[132,96]},{"1630333":[131,25]},{"1630337":[127,131,87]},{"1630341":[11,112,143,112,144,227,35,199,68,143,136,159,144,67,191,160,224,39]},{"1630360":[15,28,56,114,102,70,70,74,181,177,251,65,115,189,191,244,117,251,11,255,71,255,64]},{"1630384":[132,204,124,14,7,32,48,127,128,95,160,159,96,127,224,71,159,128,35]},{"1630404":[35,96,4,255,222,255,237,253,34,241,2,243,146,187,68]},{"1630420":[63,7,33,51,63,63,94,196,192,192,38,255,7,179,255,77,77,12,76]},{"1630440":[206,35]},{"1630443":[20,76,254,191,179,49,96,159,76,179,174,113,126,225,182,169,186,173,189,174,172,191,35]},{"1630467":[35,64,224,38,7]},{"1630473":[12,4,25,8,59,24,115,48,241,112,176,48,188,60]},{"1630488":[3,7,7,15,15,79,67,2]},{"1630497":[34]},{"1630499":[28]},{"1630501":[24]},{"1630503":[28]},{"1630505":[36]},{"1630507":[98]},{"1630509":[2,40]},{"1630512":[7,179,115,167,103,143,79,159,95,67,191,127,13,158,126,206,62,12,24,48,32]},{"1630535":[1,1,223,222,67,95,94,1,63,62,67,47,46,3,31,30,23,22,35,224,34,240]},{"1630558":[248,140,24]},{"1630562":[34]},{"1630564":[39,255,5,155,103,205,51,235,20,69,233,23,3,105,151,185,199,37,112,13,48,16,128,127,15,255,224,241,1,242,3,132,5,200,67,135,202,7]},{"1630604":[14,12,120,50,48,48,73,255]},{"1630613":[15,191]},{"1630616":[223]},{"1630618":[224]},{"1630620":[138,128,27,59,59,123,59,31,36,60,67,66,102,4,90,126,219,255,231,131,107]},{"1630642":[4]},{"1630644":[195,153,153,129,35]},{"1630650":[7,128]},{"1630653":[128,127,192,64,159,31,67,166,39,13,191,63,143,63,127]},{"1630669":[63,96,88,88,64,64,111,160,67,127,176,11,119,184,127,159,127,128,64,191,255,63,22,7,132,163]},{"1630696":[8]},{"1630698":[255,65,255,33,255,35,255,7,99,253,131,108]},{"1630711":[2,60,28,24,36]},{"1630717":[5,159,128,255,224,255]},{"1630724":[67,31,32,23,159,160,223,96,223,32,96]},{"1630737":[192,192,64]},{"1630742":[255,254,254,252,252,224,241,144,243,112,68,255,248,6,254,1,3,31,126,252,120,132,101]},{"1630766":[26,184,255,240,247,224,231,192,207,136,255,112,255,227]},{"1630782":[8,24,56,120,240,96,169,190,242,237,246,9,67,158,161,6,190,161,254,97,252,35,64,131,74,1,8,72,8]},{"1630812":[158,30,135,7,195,67,67,248,120,15,124,60,63,15,127,7,97,120,60,7,7,3]},{"1630836":[232,247,67,240,239,1,208,239,67,224,223,67,160,223,39]},{"1630852":[15,246,207,214,239,254,231,234,247,253,243,254,249,255,252,255,254,141,180,1,132,27,3,134,190,1,41]},{"1630880":[12,253,254,2,252,254]},{"1630887":[255,1,2,253,255,252,255,98,255]},{"1630897":[1,34]},{"1630900":[3,190,126,254,62,67,62,94,3,190,222,222,62,67,190,126,3,1,1,129,129,36,1]},{"1630924":[254,149,98]},{"1630928":[79,190,126,39,1,5,255,255,15,15,3,3,35,1,141,186,1,3,142,62,192,64,67,128,127,2,255]},{"1630956":[255,132,173,3,1,65,63,37]},{"1630965":[224,47,191,184,247,244,251,10,60,4,190,130,159,135,207,64,239,32,122,12,6,195,73,96,48,22,127,1,191,129,95,65,47,33,23,17,243,241,255,1,255,65,184,220,236,244,248,12]},{"1631014":[60,71,95,160,3,122,133,96,159,131,76,2,138,112]},{"1631030":[49,68,255,243,67,247,255,1,227,255,136,247,2,55]},{"1631045":[11,122,167,117,174,107,188,119,184,74,181,112,143,139,252,3,10,80,96,240,208,160,192,96,160,192,64,128,132,255]},{"1631076":[23,143,15,31,31,63,127,255,255,102,158,50,206,153,231,204,243,231,248,243,252,248,255,127,255,135,152,3,2,63,255,31,68,255,15]},{"1631112":[159,36,255]},{"1631116":[127,137,111]},{"1631120":[46,255,39]},{"1631124":[69,189,126,69,161,126,67,189,126,137,184,1,5,1,1,2,2,6,6,35,14,35,30,17,255,255,253,249,241,241,225,225,255]},{"1631158":[3,252,254,1,3,253,2,252,132,96,3,132,25]},{"1631172":[131,68,3,11,255,254,253,254,254,253,250,253,252,251,244,251,67,248,247,39]},{"1631193":[19,221,227,222,233,213,230,242,235,232,247,239,240,239,242,236,243]},{"1631212":[8,4,133,188,1,13,127,255,159,127,224,31,31,224,128,127,231,31,242,14,38]},{"1631234":[1,97,253,68,222,241,3,253,222,1]},{"1631245":[67,1,254,133,25]},{"1631251":[131,15,3,224,44,224,97,163,98,113,178,89,186,188,221,174,222,215,239,219,231,30,28,12,4,2,1]},{"1631280":[135,63,167,63,151,95,143,111,128,112,192,63,224,31,255]},{"1631296":[64,64,32,16,15,132,49,3,9,251,252,246,249,237,243,251,231,223,231,67,247,207,137,184,1]},{"1631322":[3,131,97,1,26,12,12,11,5,3,5,251,253,250,255,255,252,248,251,251,3,251,253,250,252,251,254,249,3]},{"1631352":[248,248,133,30,3,34,251]},{"1631360":[252,131,163]},{"1631364":[67,190,126,11,254,62,62,222,30,238,14,246,6,254,253,253,38,1]},{"1631383":[3,35,62,3,254,254,62,254,71,190,126,1,193,193,37,1,255]},{"1638400":[116]},{"1638402":[194]},{"1638404":[184]},{"1638406":[190]},{"1638408":[255]},{"1638410":[177]},{"1638412":[170]},{"1638414":[191]},{"1638416":[174]},{"1638418":[255]},{"1638420":[175]},{"1638422":[184]},{"1638424":[190]},{"1638426":[183]},{"1638428":[173,117]},{"1638431":[189]},{"1638433":[177]},{"1638435":[174]},{"1638437":[255]},{"1638439":[182]},{"1638441":[170]},{"1638443":[185]},{"1638445":[255]},{"1638447":[184]},{"1638449":[175,127,127,116]},{"1638454":[194]},{"1638456":[184]},{"1638458":[190]},{"1638460":[255]},{"1638462":[177]},{"1638464":[170]},{"1638466":[191]},{"1638468":[174]},{"1638470":[255]},{"1638472":[175]},{"1638474":[184]},{"1638476":[190]},{"1638478":[183]},{"1638480":[173,117]},{"1638483":[189]},{"1638485":[177]},{"1638487":[174]},{"1638489":[255]},{"1638491":[172]},{"1638493":[184]},{"1638495":[182]},{"1638497":[185]},{"1638499":[170]},{"1638501":[188]},{"1638503":[188]},{"1638505":[255]},{"1638507":[184]},{"1638509":[175,127,127,116]},{"1638514":[184]},{"1638516":[177]},{"1638518":[255]},{"1638520":[181]},{"1638522":[184]},{"1638524":[184]},{"1638526":[180]},{"1638528":[199]},{"1638530":[255]},{"1638532":[178]},{"1638534":[189]},{"1638536":[216]},{"1638538":[188,117]},{"1638541":[189]},{"1638543":[177]},{"1638545":[174]},{"1638547":[255]},{"1638549":[171]},{"1638551":[178]},{"1638553":[176]},{"1638555":[255]},{"1638557":[180]},{"1638559":[174]},{"1638561":[194]},{"1638563":[255]},{"1638565":[184]},{"1638567":[175,127,127,116]},{"1638572":[189]},{"1638574":[177]},{"1638576":[178]},{"1638578":[188]},{"1638580":[255]},{"1638582":[178]},{"1638584":[188]},{"1638586":[255]},{"1638588":[170,117]},{"1638591":[188]},{"1638593":[182]},{"1638595":[170]},{"1638597":[181]},{"1638599":[181]},{"1638601":[255]},{"1638603":[180]},{"1638605":[174]},{"1638607":[194]},{"1638609":[255]},{"1638611":[189]},{"1638613":[184,127,127,118]},{"1638618":[181]},{"1638620":[178]},{"1638622":[176]},{"1638624":[177]},{"1638626":[189]},{"1638628":[255]},{"1638630":[192]},{"1638632":[184]},{"1638634":[187]},{"1638636":[181]},{"1638638":[173,127,127,118]},{"1638643":[173]},{"1638645":[170]},{"1638647":[187]},{"1638649":[180]},{"1638651":[255]},{"1638653":[192]},{"1638655":[184]},{"1638657":[187]},{"1638659":[181]},{"1638661":[173,127,127,118]},{"1638666":[176]},{"1638668":[170]},{"1638670":[183]},{"1638672":[184]},{"1638674":[183]},{"1638676":[188]},{"1638678":[255]},{"1638680":[189]},{"1638682":[184]},{"1638684":[192]},{"1638686":[174]},{"1638688":[187,127,127,118]},{"1638693":[189]},{"1638695":[190]},{"1638697":[187]},{"1638699":[189]},{"1638701":[181]},{"1638703":[174]},{"1638705":[255]},{"1638707":[187]},{"1638709":[184]},{"1638711":[172]},{"1638713":[180,127,127,118]},{"1638718":[189]},{"1638720":[177]},{"1638722":[178]},{"1638724":[174]},{"1638726":[191]},{"1638728":[174]},{"1638730":[188]},{"1638732":[255]},{"1638734":[189]},{"1638736":[184]},{"1638738":[192]},{"1638740":[183,127,127,118]},{"1638745":[189]},{"1638747":[184]},{"1638749":[192]},{"1638751":[174]},{"1638753":[187]},{"1638755":[255]},{"1638757":[184]},{"1638759":[175]},{"1638761":[255]},{"1638763":[177]},{"1638765":[174]},{"1638767":[187]},{"1638769":[170,127,127,118]},{"1638774":[178]},{"1638776":[172]},{"1638778":[174]},{"1638780":[255]},{"1638782":[185]},{"1638784":[170]},{"1638786":[181]},{"1638788":[170]},{"1638790":[172]},{"1638792":[174,127,127,118]},{"1638797":[188]},{"1638799":[180]},{"1638801":[190]},{"1638803":[181]},{"1638805":[181]},{"1638807":[255]},{"1638809":[192]},{"1638811":[184]},{"1638813":[184]},{"1638815":[173]},{"1638817":[188,127,127,118]},{"1638822":[182]},{"1638824":[178]},{"1638826":[188]},{"1638828":[174]},{"1638830":[187]},{"1638832":[194]},{"1638834":[255]},{"1638836":[182]},{"1638838":[178]},{"1638840":[187]},{"1638842":[174,127,127,118]},{"1638847":[173]},{"1638849":[170]},{"1638851":[187]},{"1638853":[180]},{"1638855":[255]},{"1638857":[185]},{"1638859":[170]},{"1638861":[181]},{"1638863":[170]},{"1638865":[172]},{"1638867":[174,127,127,118]},{"1638872":[188]},{"1638874":[192]},{"1638876":[170]},{"1638878":[182]},{"1638880":[185]},{"1638882":[255]},{"1638884":[185]},{"1638886":[170]},{"1638888":[181]},{"1638890":[170]},{"1638892":[172]},{"1638894":[174,127,127,118]},{"1638899":[172]},{"1638901":[170]},{"1638903":[188]},{"1638905":[189]},{"1638907":[181]},{"1638909":[174]},{"1638911":[255]},{"1638913":[189]},{"1638915":[184]},{"1638917":[192]},{"1638919":[174]},{"1638921":[187,127,127,118]},{"1638926":[173]},{"1638928":[174]},{"1638930":[188]},{"1638932":[174]},{"1638934":[187]},{"1638936":[189]},{"1638938":[255]},{"1638940":[185]},{"1638942":[170]},{"1638944":[181]},{"1638946":[170]},{"1638948":[172]},{"1638950":[174,127,127,118]},{"1638955":[174]},{"1638957":[170]},{"1638959":[188]},{"1638961":[189]},{"1638963":[174]},{"1638965":[187]},{"1638967":[183]},{"1638969":[255]},{"1638971":[185]},{"1638973":[170]},{"1638975":[181]},{"1638977":[170]},{"1638979":[172]},{"1638981":[174,127,127,118]},{"1638986":[177]},{"1638988":[194]},{"1638990":[187]},{"1638992":[190]},{"1638994":[181]},{"1638996":[174]},{"1638998":[255]},{"1639000":[172]},{"1639002":[170]},{"1639004":[188]},{"1639006":[189]},{"1639008":[181]},{"1639010":[174,127,127,118]},{"1639015":[177]},{"1639017":[194]},{"1639019":[187]},{"1639021":[190]},{"1639023":[181]},{"1639025":[174]},{"1639027":[255]},{"1639029":[172]},{"1639031":[170]},{"1639033":[188]},{"1639035":[189]},{"1639037":[181]},{"1639039":[174,127,127,118]},{"1639044":[189]},{"1639046":[177]},{"1639048":[178]},{"1639050":[188]},{"1639052":[255]},{"1639054":[173]},{"1639056":[190]},{"1639058":[183]},{"1639060":[176]},{"1639062":[174]},{"1639064":[184]},{"1639066":[183,127,127]},{"1671170":[152,1,181,86]},{"1671178":[24]},{"1671180":[255,127]},{"1671186":[188,2,255,127]},{"1671194":[201,105,255,127]},{"1671202":[198,24,173,57]},{"1671210":[184]},{"1671212":[61,67]},{"1671218":[4,23,255,127]},{"1671228":[255,127]},{"1675264":[23,224]},{"1675267":[216,64,222,88,231,174,225,175,116,223,250,47,125,215,224,184,190,215,209,104,244,186,37]},{"1675291":[3,128]},{"1675294":[192,128,67,96,192,1,48,224,131,27]},{"1675305":[3,192,96,96,48,43]},{"1675312":[3,1]},{"1675315":[3,1,134,54]},{"1675321":[3,133,56]},{"1675325":[17,31]},{"1675328":[127,28,255,120,255,224,127,192]},{"1675338":[1,31,127,223,191,127,35]},{"1675346":[17,240]},{"1675349":[254,48,255,206,139,247,120,255,125,255]},{"1675361":[240,254,255,139,41]},{"1675367":[7,128]},{"1675370":[224,128,112,224,24,240,35]},{"1675378":[12,128,224,112,24]},{"1675385":[3]},{"1675387":[7,3,4]},{"1675391":[44,67,4,92,224,81,12,94,14]},{"1675401":[3,4,7,43,123,115,113]},{"1675410":[192]},{"1675412":[224,192,32]},{"1675416":[212]},{"1675418":[218]},{"1675420":[26,16,58,48]},{"1675425":[192,32,224,52,62,238,206]},{"1675434":[96]},{"1675436":[144,96,208,96,232,48,116,24,252,96,155,116]},{"1675449":[96,240,240,248,124,252,254]},{"1675458":[6]},{"1675460":[9,6,11,6,23,12,46,24,63,6,217,46]},{"1675473":[6,15,15,31,62,63,132,95]},{"1675482":[131,194]},{"1675485":[13,216,96,252,48,244,88,254,96]},{"1675496":[96,240,248,252,131,214]},{"1675503":[133,216]},{"1675506":[16,27,6,63,12,47,26,127,6]},{"1675517":[6,15,31,63,63,127,1,131,58]},{"1675527":[18,131,1,131,3,199,66,247,100,251,126,249]},{"1675540":[1,131,131,199,246,248,248,36]},{"1675549":[18,130]},{"1675552":[130,128,198,132,222,92,190,252,62]},{"1675563":[130,130,198,222,62,62,36]},{"1675571":[18,16]},{"1675574":[40]},{"1675577":[4,16,24,100,244,11]},{"1675585":[16,40]},{"1675588":[16,100,11,36]},{"1675593":[224,50,64]},{"1675597":[32]},{"1675599":[12,12,80,80,163,163,76]},{"1675608":[64,32,12,80,163,76,44,180,46,251,124,75,78,115,78,251,60,82,188,234,125,208,203,12,189,141,13,191,49,99,176,224,56,240,152,240,248,208,67,220,232,7,220,240,60,240,48,56,24,56,34,28,224,108,60,6,3,14,7,28,14,53,28,37,30,83,60,71,59,93,39,6,12,27,51,41,67,71,92,255,128,205,51,186,103,180,77,249,27,199,6,127,193,131,179,255,204,153,179,230,249,127,124,128,30,26,126,255,1,255,86,228,187,231,91,156,254,64,211,253,161,62,63,100,228,129,45,152,240,76,248,172,248,198,124,230,164,249,88,255,166,95,184,24,140,76,166,222,231,121,223,111,39,63,25,31,13,30,4,30,2,15,1,67,7]},{"1675774":[19,88,32,18,19,17,8,4,4,246,228,252,152,248,176,120,32,120,64,240,128,67,224]},{"1675798":[20,26,4,72,200,136,16,32,32,253,10,158,9,254,97,125,18,124,35,55,11,15,34]},{"1675822":[20,255,250,150,119,119,63,15]},{"1675831":[191,80,121,144,127,134,254,72,126,204,236,144,176,131,77,2,224,62,95,105,238,238,252,176]},{"1675856":[187,68,205,2,126,49,126,1,125,50,36,27,31,3,7]},{"1675872":[254,255,74,126,119,63,31,7,221,34,179,64,94,172,126,144,254,28,124,152,216,160,224]},{"1675896":[127,255,114,94,222,220,248,224,58,253,20,191,2,151,2,23,67,1,3,19]},{"1675917":[1,1]},{"1675920":[248,188,150,22,3,3,1]},{"1675928":[184,126,80,250,128,210,128,208,67]},{"1675938":[128,35]},{"1675941":[13,62,122,210,208,128,128]},{"1675950":[19,228,39,16]},{"1675955":[39,34]},{"1675958":[2,4]},{"1675961":[2,35]},{"1675964":[17,228,16,39]},{"1675969":[4,2]},{"1675973":[174,17,50,140,128,50]},{"1675980":[128]},{"1675982":[48,133,218,2,224,32,17,140,50,128,48,2]},{"1675996":[243,222,229,182,107,44,87,24,93,146,93,134,115,76,191,193,109,89,211,231,237,249,243,63,252,67]},{"1676023":[248]},{"1676025":[16,67,248,48,6,240,96,240,224,96,192,252,35,248,2,208,176,96,37]},{"1676045":[131,146]},{"1676048":[5,13,7,27,15,31,14,131,51,3,9,4,9,19,31,15]},{"1676065":[60,7,248,45,67,241,218,13,232,187,208,119,146,242,15,60,251,118,246,231,207,141,131,57]},{"1676090":[6,1,2,16,1]},{"1676097":[4,134,54]},{"1676102":[2,134,63]},{"1676106":[34]},{"1676109":[144,131,98,1,2]},{"1676116":[16,67,16]},{"1676120":[3]},{"1676122":[144,40,16,131,131,3,39]},{"1676130":[2,2,2,5,133,218,2,3]},{"1676140":[2,5,134,157,3,38]},{"1676147":[133,132,3,35]},{"1676152":[138,142,3,61]},{"1676157":[135,143,3,4,16,28]},{"1676164":[34,28,67,77,50,12,65,62,34,28,62]},{"1676176":[34]},{"1676178":[28,62,115,115,127,34,62,3,28]},{"1676188":[46,28,67,83,62]},{"1676194":[77,132,249,3,9,62,28,28,46,95,95,77,34,62,34,132,58]},{"1676212":[2]},{"1676214":[2,1,69,20,3,1,46,17,132,67]},{"1676225":[2,3,7,23,132,136]},{"1676232":[2]},{"1676234":[128]},{"1676236":[69,80,128]},{"1676240":[232,132,143,3,3,128,128,192,208,134,48,3,7,3,12,15,19,28,39,56,47,132,47]},{"1676264":[3,3,12,24,30,37]},{"1676271":[9,192,192,48,240,200,56,228,28,244,12,35]},{"1676284":[15,192,48,24,8,248,195,99,215,223,190,134,124,172,120,24,224,131,39]},{"1676304":[8,124,109,195,150,140,24,224]},{"1676313":[192,131,204,2,42]},{"1676320":[192,134,154,4,8,63,24,63,22,123,47,113,31,241,67,127,227,7,127,231,127,63,61,122,113,240,34,224,11,159,255,137,255,227,127,247,156,124,107,155,183,67,218,214,16,128,128,227,119,156,72,41,41]},{"1676374":[1,17,18]},{"1676378":[17,84,108]},{"1676382":[34,16,132,56]},{"1676387":[2,18,17,108,131,142,3,6,84,108]},{"1676398":[144,16,16,64,40]},{"1676404":[1,108,144,137,143,3,137,115,3,41]},{"1676415":[137,230,4,37]},{"1676420":[132,243,4,40]},{"1676425":[134,106,3,42]},{"1676430":[133,126,3,137,254,4]},{"1676437":[40,134,143,3,67,20]},{"1676444":[19,62,8,93,8,127]},{"1676451":[73]},{"1676453":[127,28,62]},{"1676457":[28,28,54,119,93,127,99,62,67,28,8,139,116,5,1,20,20,133,130,5,5,66,61,72,55,84,35,67,34,1,67,1]},{"1676490":[5]},{"1676493":[63,55,35,1,131,63]},{"1676500":[5,132,120,36,216,84,136,67,136]},{"1676510":[37]},{"1676512":[1,248,216,133,192,5,9,63,32,31,58,15,20,7,8]},{"1676528":[7,134,170,4,1,17,11,132,217,5,8,244,12,248,12,224,24,224,16]},{"1676548":[131,39]},{"1676551":[34]},{"1676553":[2,12,136,144,36]},{"1676559":[255]},{"1802304":[85,42,191,64,95,160,255]},{"1802312":[119,136,255]},{"1802316":[255]},{"1802318":[255]},{"1802368":[255]},{"1802370":[255]},{"1802372":[255]},{"1802374":[255]},{"1802376":[255]},{"1802378":[253,2,255]},{"1802382":[213,42]},{"1802394":[2]},{"1802398":[42]},{"1802432":[255,33,253,3,250,5,243,14,251,5,222,47,244,95,255,255]},{"1802450":[2]},{"1802452":[5]},{"1802454":[12]},{"1802456":[4]},{"1802458":[33]},{"1802460":[11]},{"1802496":[123,21,118,47,241,95,59,255,144,127,138,255,5,255,170,255,196]},{"1802514":[73,192,14]},{"1802518":[204]},{"1802520":[111]},{"1802522":[127]},{"1802524":[255]},{"1802526":[255]},{"1802530":[64]},{"1802560":[211,127,127,255,133,255,171,255,81,255,251,255,95,255,255,255,45]},{"1802578":[162]},{"1802580":[127]},{"1802582":[255]},{"1802584":[255]},{"1802586":[191]},{"1802588":[255]},{"1802590":[255]},{"1802624":[53,255,251,255,93,255,255,255,127,255,255,253,255,255,255,213,223]},{"1802642":[191]},{"1802644":[255]},{"1802646":[255]},{"1802648":[255]},{"1802650":[253,2,255]},{"1802654":[213,42]},{"1802688":[191,191,183,183,243,251,235,234,227,227,245,209,255,250,247,80,191,64,183,72,251,12,230,25,235,20,209,46,250,5,80,175]},{"1802727":[8]},{"1802752":[127,255,221,213,223,155,61,101,206,170,197,68,171,162,222]},{"1802768":[255]},{"1802770":[213,42,155,100,37,250,138,117,68,187,162,93]},{"1802783":[255]},{"1802790":[32]},{"1802816":[255,255,85,85,170,170,120,16,170,168,68]},{"1802828":[170]},{"1802830":[241]},{"1802832":[255]},{"1802834":[85,170,170,85,16,239,168,87]},{"1802843":[255]},{"1802845":[255]},{"1802847":[255]},{"1802880":[206,170,201]},{"1802884":[166,162,40]},{"1802888":[162,128,70]},{"1802892":[33]},{"1802894":[12,2,138,117]},{"1802899":[255,162,93]},{"1802903":[255,128,127]},{"1802907":[255]},{"1802909":[255]},{"1802911":[255]},{"1802944":[139,10,183,4,163,34,89,2,1,6,4,46,65,24,129,54,10,245,4,251,34,221,2,255]},{"1802969":[255,36,243,28,255,44,247]},{"1802983":[8]},{"1802986":[8,4]},{"1802989":[12]},{"1802991":[128]},{"1803008":[172,161,133,48,223]},{"1803014":[49]},{"1803016":[84]},{"1803018":[19,168,21,64,174,64,153,127,50,245]},{"1803029":[255,136,119]},{"1803033":[255,40,255]},{"1803037":[255]},{"1803039":[255]},{"1803042":[26]},{"1803046":[136]},{"1803051":[2]},{"1803055":[170]},{"1803072":[85]},{"1803074":[8,128,68]},{"1803078":[36,2,84,1,232,18,65,12,186,68]},{"1803089":[255,163,220]},{"1803093":[254,138,119,1,255,2,255,52,207]},{"1803103":[255]},{"1803106":[34]},{"1803109":[1,136,32]},{"1803115":[168]},{"1803117":[64]},{"1803119":[186]},{"1803136":[215,129,196,128,144,193,132,1,32,21,209,42,108,17,171,68,129,127,170,213,197,123,43,213,21,255,42,255,17,255,4,255]},{"1803170":[170]},{"1803172":[4,128,42,128]},{"1803179":[128]},{"1803181":[68]},{"1803183":[170]},{"1803200":[82,17,68,149,1,196,128,36]},{"1803209":[5,80,139,132,81,170,85,16,248,177,213,196,239,166,117,21,239,171,223,81,255,85,255,7]},{"1803234":[40,2,4,24,2,8,16]},{"1803242":[32]},{"1803245":[4]},{"1803247":[170]},{"1803264":[85,17,97,81,144,1,32]},{"1803273":[84,160,93,248,21,226,53]},{"1803281":[238,155,85,5,155,138,117,85,254,223,125,213,63,53,247,17]},{"1803298":[138,32,36,80,138,32,1]},{"1803306":[2,32,16,40,56,202]},{"1803328":[125,86,84,1,42,17,4,69,1,70,2,117,102,217,232,23,71,238,171,85,85,187,239,85,86,239,253,119,249,223,119,159,16]},{"1803362":[170]},{"1803364":[68]},{"1803366":[170]},{"1803368":[16,1,136,2,64,6]},{"1803375":[136]},{"1803392":[254,87,20,21,169,17,149,85]},{"1803401":[196,128,117,192,36,184,93,23,189,187,81,84,186,126,212,213,238,127,245,37,230,71,229,64]},{"1803426":[174]},{"1803428":[69]},{"1803430":[43,128,17]},{"1803434":[10,128,25,192,2,184]},{"1803456":[95,159,21,85,56,147,1,80,18,58,112,65,20,42,28,1,218,176,15,5,166,139,255,80,107,170,243,89,115,182,235,21,5]},{"1803490":[27,224,84,1,174]},{"1803496":[77,16,134,24,65,12,226,20]},{"1803520":[255,247,93,157,251,217,85,85,191,15,58,64,106,170,6,80,166,44,178,208,132,34,250,80,126,142,239,80,179,232,255,80,81]},{"1803554":[47]},{"1803556":[93,128,175]},{"1803560":[65]},{"1803562":[137,20,21,66,169]},{"1803584":[254,254,252,252,255,223,87,87,255,119,85,85,171,171,49,1,171,2,71,68,2,32,232,64]},{"1803609":[136,251,81,253,169,239,17,85]},{"1803618":[187]},{"1803620":[221]},{"1803622":[191]},{"1803624":[119]},{"1803626":[174]},{"1803628":[86]},{"1803630":[206,16]},{"1803648":[223,79,247,199,251,251,117,117,253,251,113,21,107,139,5,5,26,128,56]},{"1803668":[46,8,142,4,143,11,238,4,244,128,250]},{"1803680":[117]},{"1803682":[239]},{"1803684":[213]},{"1803686":[251]},{"1803688":[112]},{"1803690":[155,96,31,32,255]},{"1803712":[253,255,252,253,255,255,255,255,255,255,253,253,255,251,101,81,10]},{"1803730":[5,5,32]},{"1803736":[136]},{"1803738":[2]},{"1803740":[38,2,206,64,87]},{"1803746":[248,2,223]},{"1803750":[255]},{"1803752":[119]},{"1803754":[255]},{"1803756":[217,4,167,56]},{"1803776":[251,251,79,239,159,207,86,86,253,253,255,255,255,255,95,95,232,68,165,176,114,96,168,17]},{"1803801":[2]},{"1803806":[160]},{"1803808":[61]},{"1803810":[63,64,255]},{"1803814":[255]},{"1803816":[119]},{"1803818":[255]},{"1803820":[253]},{"1803822":[255]},{"1803840":[186,190,246,226,253,231,253,254,253,255,239,239,254,254,254,254,172,69,92,1,155,1,7,4,170]},{"1803867":[16,42,1]},{"1803871":[1,235]},{"1803874":[227,12,198]},{"1803878":[248,2,255]},{"1803882":[255]},{"1803884":[255]},{"1803886":[255]},{"1803904":[255,255,205,237,255,255,235,235,190,190,239,239,254,254,250,250,255]},{"1803922":[37,50,3]},{"1803926":[1,20,174,65,69,16,170,1,16,5,255]},{"1803938":[223]},{"1803940":[255]},{"1803942":[255]},{"1803944":[255]},{"1803946":[255]},{"1803948":[255]},{"1803950":[255]},{"1803968":[251,251,247,247,223,223,171,175,171,174,252,237,181,191,188,191,251,4,213,8,138,32,7,87,173,82,83]},{"1803996":[138,81,7,70,255]},{"1804002":[255]},{"1804004":[255]},{"1804006":[248]},{"1804008":[252]},{"1804010":[236,19,255]},{"1804014":[249]},{"1804032":[255,255,239,247,255,103,27,91,187,59,111,55,56,138,105,219,239]},{"1804050":[95]},{"1804052":[191]},{"1804054":[211,164,171,236,93,196,254,201,167,32,255]},{"1804066":[239,16,103,8,63,192,23,64,59,192,147,108,28,255]},{"1804096":[245,170,254,229,255,250,255,252,255,255,127,127,127,119,239,95,160,95,228,27,250,5,252,3,255]},{"1804122":[127,128,47,136,183,64,255]},{"1804130":[255]},{"1804132":[255]},{"1804134":[255]},{"1804136":[255]},{"1804138":[255]},{"1804140":[255]},{"1804142":[255,32]},{"1804160":[81,174,174,253,209,254,243,227,247,239,122,125,125,127,255,254]},{"1804177":[255,172,83,220,47,239,28,231,24,120,135,61,130,254,1,255]},{"1804194":[255]},{"1804196":[255]},{"1804198":[255]},{"1804200":[255]},{"1804202":[255]},{"1804204":[255]},{"1804206":[255]},{"1804224":[16,239,170,213,68,251,234,117,81,174,234,213,244,251,234,125]},{"1804241":[85,128,127,64,189,96,159]},{"1804249":[253,192,63,240,15,104,151,85]},{"1804258":[255]},{"1804260":[253]},{"1804262":[255]},{"1804264":[253]},{"1804266":[255]},{"1804268":[255]},{"1804270":[255]},{"1804288":[5,253,34,215,200,253,234,85]},{"1804297":[255,162,93,84,171,170,85,3,22]},{"1804307":[233,136,49,64,175]},{"1804313":[81]},{"1804315":[250]},{"1804317":[221]},{"1804319":[255,23]},{"1804322":[233,6,251,4,239]},{"1804328":[81]},{"1804330":[250]},{"1804332":[221]},{"1804334":[255]},{"1804352":[255]},{"1804354":[253,2,255]},{"1804358":[245,59,225,47,218,36,229,26,64,180]},{"1804370":[2]},{"1804374":[10]},{"1804376":[15,16,63,20,17,1,183,15]},{"1804394":[16]},{"1804396":[4,6,5,1]},{"1804412":[8]},{"1804414":[2]},{"1804416":[254,1,215,43,186,71,84,175,226,95,42,127,77,111,191,95,1]},{"1804434":[40]},{"1804436":[69]},{"1804438":[171]},{"1804440":[29]},{"1804442":[127,128,79,80,63]},{"1804460":[192]},{"1804462":[192]},{"1804476":[32]},{"1804480":[198,127,8,255,125,255,43,255,21,255,191,255,213,249,249,254,57]},{"1804498":[247]},{"1804500":[135]},{"1804502":[223]},{"1804504":[255]},{"1804506":[255]},{"1804508":[255]},{"1804510":[252,5]},{"1804526":[4,2]},{"1804544":[21,255,235,255,85,255,143,255,7,239,255,255,159,203,191,183,255]},{"1804562":[191]},{"1804564":[255]},{"1804566":[191,32,239,112,189,64,139,116,21,72]},{"1804584":[96]},{"1804587":[32]},{"1804598":[64]},{"1804602":[2]},{"1804606":[162]},{"1804608":[127,255,255,255,255,255,127,77,191,238,191,21,170,122,117]},{"1804624":[255]},{"1804626":[255]},{"1804628":[255]},{"1804630":[69,178,238,81,5,154,106,213]},{"1804639":[255]},{"1804649":[32,96]},{"1804653":[32]},{"1804662":[8]},{"1804668":[16]},{"1804672":[255,254,249,208,248,184,253,144,251,168,255]},{"1804684":[255]},{"1804686":[252,3,254,1,208,47,184,71,16,111,168,87]},{"1804699":[255]},{"1804701":[255]},{"1804703":[255]},{"1804726":[128]},{"1804734":[3]},{"1804736":[252,168,216,67,248,130,152,7,160,30,85,161,174,1,36,15,168,87,66,191,128,127,4,253,4,252,1,252]},{"1804765":[255,4,243]},{"1804774":[4,2,5,2]},{"1804779":[3]},{"1804782":[8,4]},{"1804792":[24]},{"1804794":[160]},{"1804796":[1]},{"1804798":[3]},{"1804800":[140,131,210,1,225]},{"1804806":[162,8,161]},{"1804810":[1,46]},{"1804813":[125]},{"1804815":[255,128,127]},{"1804819":[255]},{"1804821":[255]},{"1804823":[255]},{"1804825":[255]},{"1804827":[255]},{"1804829":[255]},{"1804831":[255]},{"1804835":[2]},{"1804858":[4]},{"1804864":[8]},{"1804866":[136,2,21,2,2,172,84,32,2,251,160,95]},{"1804879":[255]},{"1804881":[255]},{"1804883":[255,3,255]},{"1804887":[252,1,252]},{"1804891":[255]},{"1804893":[255]},{"1804895":[255]},{"1804900":[2,1,2]},{"1804904":[3,1]},{"1804918":[1]},{"1804920":[32]},{"1804922":[66]},{"1804924":[2]},{"1804928":[34,7,71,175,145,197,155,229,160,215,34,221]},{"1804941":[255,138,127,2,255,5,253,131,124,1,126,128,127]},{"1804955":[255]},{"1804957":[255]},{"1804959":[255,2]},{"1804962":[5,2]},{"1804965":[129]},{"1804967":[139]},{"1804969":[128]},{"1804971":[34]},{"1804975":[128]},{"1804990":[10]},{"1804992":[82,21,66,153,10,85,138,117]},{"1805001":[255,34,221]},{"1805005":[255,34,85,48,223,32,223]},{"1805013":[127,32,127]},{"1805017":[255]},{"1805019":[255]},{"1805021":[255]},{"1805023":[119,16]},{"1805027":[2,128]},{"1805031":[138]},{"1805035":[34]},{"1805038":[136,170]},{"1805056":[32,85,34,221,160,95,170,85,4,251,168,80,69,188,8,81]},{"1805073":[255,8,255,4,255]},{"1805079":[255]},{"1805081":[255,5,248,6,253,12,89]},{"1805091":[34]},{"1805095":[170]},{"1805097":[4]},{"1805099":[170,4,65,164,166]},{"1805118":[8]},{"1805120":[129,116,234,21,103,152,170,85,17,238,170,85,85,170,1,80,16,255]},{"1805139":[255]},{"1805141":[255]},{"1805143":[255]},{"1805145":[255]},{"1805147":[255]},{"1805149":[255,4,81]},{"1805153":[1]},{"1805155":[170]},{"1805157":[69]},{"1805159":[170]},{"1805161":[17]},{"1805163":[170]},{"1805165":[85,170,171]},{"1805184":[3,116,170,85,69,186,174,81,85,170,136,85,85,162,68,1,20,255,1,255,16,255]},{"1805207":[255]},{"1805209":[255]},{"1805211":[221,8,247,16,69]},{"1805217":[1]},{"1805219":[170]},{"1805221":[69]},{"1805223":[174]},{"1805225":[85,34,170]},{"1805229":[85,170,238]},{"1805248":[17,110,171,84,85,170,231]},{"1805256":[79,136,135,64,85,170,84]},{"1805264":[68,255,20,255]},{"1805269":[255,16,231,44,203,16,199]},{"1805277":[255,1,84]},{"1805281":[17]},{"1805283":[171]},{"1805285":[85,8,239,8,83,40,175]},{"1805293":[85,170,254]},{"1805312":[81,46,187,68,85,170,255]},{"1805320":[55,136,223]},{"1805324":[223,32,69]},{"1805328":[20,239,4,255]},{"1805333":[255,32,223,64,191]},{"1805339":[223]},{"1805341":[255,18,69]},{"1805345":[65]},{"1805347":[187]},{"1805349":[85]},{"1805351":[223]},{"1805353":[55,32,255]},{"1805357":[223,168,237]},{"1805377":[87,170,85,85,170,255]},{"1805384":[115,144,231,4,255]},{"1805390":[103]},{"1805392":[87,255,85,255,138,255]},{"1805399":[255,16,243,12,227,8,247,16,103]},{"1805411":[170]},{"1805413":[85]},{"1805415":[255,24,103,8,255]},{"1805421":[247,136,239]},{"1805440":[48,198,218,21,237,98,247]},{"1805448":[127,128,253]},{"1805452":[255]},{"1805454":[117]},{"1805456":[223,230,53,223,114,239,32,215,149,234,28,225,3,252,1,116,1]},{"1805474":[16,234,96,157,8,223]},{"1805481":[106,2,227]},{"1805485":[252,138,254]},{"1805504":[8,98,14,80,16,170,246,1,255,64,31,128,51,160,69]},{"1805520":[119,234,245,90,239,186,9,247,64,255,8,87,244,163,21,64,17,12,161,10,69,16,8,246,64,191]},{"1805547":[247,160,15,170,250]},{"1805564":[64]},{"1805568":[19,106,62,64,31,162,242]},{"1805576":[195]},{"1805578":[175,48,167,64,254]},{"1805584":[111,250,206,112,232,179,7,240,80,131,228,107,41,230,136,118,5,16,129,56,68,21,9,254,36,155,32,123,88,198]},{"1805615":[119]},{"1805632":[250]},{"1805634":[10,192,98,162,96,16,96,138,240]},{"1805644":[193]},{"1805646":[64,128,251]},{"1805650":[119,168,223,162,159,112,191,202,63,192,190,65,191,192,5,16,145,238,29]},{"1805670":[143,96,21,64,15,208,62,65,63,64]},{"1805694":[128]},{"1805696":[174,174,1,1,160,160,6]},{"1805704":[136,136,64]},{"1805708":[192]},{"1805710":[224]},{"1805712":[83,2,254]},{"1805716":[255,160,255]},{"1805720":[255,136,191,64,127,128,31,224,253]},{"1805730":[255]},{"1805732":[95]},{"1805734":[249,6,119]},{"1805738":[191,64,63,192,31,224]},{"1805760":[143,147,1,65,163,155,53,37,126,22,4,4,10,10,32]},{"1805776":[76]},{"1805778":[254,64,108]},{"1805782":[202,16,233]},{"1805786":[251]},{"1805788":[245]},{"1805790":[255]},{"1805792":[227,20,191]},{"1805796":[231,24,215,48,175,80,255]},{"1805804":[255]},{"1805806":[223]},{"1805814":[8]},{"1805824":[143,207,47,7,155,179,47,27,163,163,101,69,171,171,1,1,112,32,240,8,116,48,248]},{"1805848":[116,56,186]},{"1805852":[84]},{"1805854":[254]},{"1805856":[191,64,167,88,219,52,199,4,195,44,199,56,255]},{"1805870":[255]},{"1805878":[56]},{"1805888":[125,125,251,251,253,253,255,255,255,255,223,223,255,255,23,55,8,130]},{"1805907":[4]},{"1805909":[2]},{"1805914":[32]},{"1805918":[232,16,255]},{"1805922":[255]},{"1805924":[255]},{"1805926":[255]},{"1805928":[255]},{"1805930":[255]},{"1805932":[255]},{"1805934":[223,32]},{"1805952":[187,187,170,170,23,23,62,94,213,37,222,152,255,176,121,56,42,68]},{"1805971":[85,2,232,224,1,240,74,102,1,73,128,75,14,127]},{"1805986":[255]},{"1805988":[255]},{"1805990":[159,64,15,48,185,4,182]},{"1805998":[240,4]},{"1806014":[8]},{"1806016":[111,110,175,175,234,170,184,248,232,137,193,192,115,114,222,254,43,146,4,80,202,53,64,71,233,22,35,28,1,140,32,1,253,1,255]},{"1806052":[223,64,223,32,159,64,255,1,254,1,255]},{"1806080":[214,241,186,121,21,16,47,66,8,81,218,16,193,218,144,150,178,14,159,39,81,200,165,60,249,249,239,29,31,44,14,105,60,255,63,127,154,89,33,231,247,88,181,66,254,1,251,4]},{"1806132":[36]},{"1806134":[24]},{"1806144":[95,127,117,213,251,247,213,217,189,57,19,82,234,232,230,134,47,64,165,74,59]},{"1806166":[91,34,189,66,209,172,10,213,96,25,255]},{"1806178":[95,160,241,14,245,10,251,128,254]},{"1806188":[252,3,156,99]},{"1806208":[255,255,255,255,255,255,253,253,252,252,93,221,126,126,159,95,255]},{"1806226":[255]},{"1806228":[255]},{"1806230":[253,2,252,3,157,162,190,193,223,160,255]},{"1806242":[255]},{"1806244":[255]},{"1806246":[255]},{"1806248":[255]},{"1806250":[255]},{"1806252":[127]},{"1806254":[127,128]},{"1806272":[209,190,251,255,253,255,255,251,255,238,127,117,191,186,255,255,144,111,251,4,253,2,251,4,238,17,117,138,58,69,127]},{"1806304":[255]},{"1806306":[255]},{"1806308":[255]},{"1806310":[255]},{"1806312":[255]},{"1806314":[255]},{"1806316":[255]},{"1806318":[255]},{"1806336":[17,238,170,221,132,59,234,245,81,254,250,239,213,254,254,239]},{"1806353":[253,136,119,128,255,224,31,80,175,234,21,212,43,238,17,253]},{"1806370":[255]},{"1806372":[255]},{"1806374":[255]},{"1806376":[255]},{"1806378":[255]},{"1806380":[255]},{"1806382":[255]},{"1806400":[243,28,18,251,16,177,237,255,22,255,190,254,85,255,191,253,12,5,232,8,178,76,253,1,254,1,254,1,254]},{"1806430":[245,2,5,1,4,3,1]},{"1806438":[1]},{"1806448":[2]},{"1806450":[4]},{"1806454":[2]},{"1806460":[1]},{"1806462":[8]},{"1806464":[49,191,11,159,21,31,31,191,119,126,255,127,223,235,255,233,127]},{"1806482":[95,32,223,32,151,224,126,129,93,128,234,20,65,22]},{"1806497":[128,128]},{"1806518":[8]},{"1806522":[34]},{"1806524":[1]},{"1806526":[168]},{"1806528":[87,255,190,252,94,251,255,208,127,171,252,129,248,142,248,165,248,6,253,2,250,5,80,47,170,84]},{"1806555":[127,128,119,2,93]},{"1806576":[1]},{"1806580":[1]},{"1806582":[128]},{"1806584":[1]},{"1806586":[129]},{"1806588":[12]},{"1806590":[161]},{"1806592":[127,58,127,244,127,57,119,198,253,34,252,131,128,255]},{"1806607":[255,58,197,84,139,40,198]},{"1806615":[185]},{"1806617":[223]},{"1806619":[127]},{"1806621":[127]},{"1806623":[255]},{"1806642":[32]},{"1806644":[17]},{"1806646":[198]},{"1806648":[34]},{"1806650":[131]},{"1806652":[255]},{"1806654":[255]},{"1806656":[255,172,255,32,252,19]},{"1806663":[242]},{"1806665":[255]},{"1806667":[255]},{"1806669":[255]},{"1806671":[255,168,83]},{"1806675":[223]},{"1806677":[239]},{"1806679":[255]},{"1806681":[255]},{"1806683":[255]},{"1806685":[255]},{"1806687":[255]},{"1806704":[4]},{"1806706":[32]},{"1806708":[19]},{"1806710":[242]},{"1806712":[255]},{"1806714":[213]},{"1806716":[186]},{"1806718":[85]},{"1806720":[249,66,16,228]},{"1806725":[230]},{"1806727":[255]},{"1806729":[255,34,255]},{"1806733":[251,162,243]},{"1806737":[191]},{"1806739":[255]},{"1806741":[255]},{"1806743":[255]},{"1806745":[255]},{"1806747":[255]},{"1806749":[243,8,251]},{"1806764":[12]},{"1806766":[4,8,66]},{"1806770":[228]},{"1806772":[230]},{"1806774":[213]},{"1806776":[170]},{"1806778":[98]},{"1806780":[164]},{"1806782":[226]},{"1806784":[2,189,1,38]},{"1806789":[255,10,255]},{"1806793":[255,170,255,84,255,170,255,12,255,8,247]},{"1806805":[255]},{"1806807":[255]},{"1806809":[255]},{"1806811":[255]},{"1806813":[255]},{"1806815":[255,4,8]},{"1806832":[160]},{"1806836":[170]},{"1806838":[10]},{"1806842":[170]},{"1806844":[84]},{"1806846":[170]},{"1806848":[168,87,68,187]},{"1806853":[255,170,255,17,255,168,252,80,250,69,85]},{"1806865":[255]},{"1806867":[255]},{"1806869":[255]},{"1806871":[255,1,255,3,252,5,250,170,85]},{"1806888":[1]},{"1806896":[2]},{"1806900":[160]},{"1806902":[170]},{"1806904":[16]},{"1806906":[168]},{"1806908":[80]},{"1806910":[69]},{"1806912":[40,215,2,255]},{"1806917":[254,196,212,20,190,17,85,192,234,21,21]},{"1806929":[255]},{"1806931":[255,1,254,171,212,1,62,170,21,213,106,234,21]},{"1806950":[128]},{"1806952":[64,128,192,128,64,128]},{"1806960":[128]},{"1806962":[2]},{"1806966":[68]},{"1806968":[84]},{"1806970":[17]},{"1806974":[21]},{"1806977":[255,32,125,4,62,4,21]},{"1806985":[42,9,1,168,178]},{"1806991":[8]},{"1806993":[255,128,125,193,62,96,21,213,42,254,9,77,162,247]},{"1807010":[2,2]},{"1807014":[138,10]},{"1807020":[16,8,8]},{"1807026":[32]},{"1807028":[4]},{"1807030":[132]},{"1807034":[9]},{"1807036":[184]},{"1807038":[8]},{"1807041":[255]},{"1807043":[93,1,27,1,177]},{"1807049":[170]},{"1807052":[162,162]},{"1807057":[255,128,93,164,27,4,17,85,170,221]},{"1807068":[93,162,119]},{"1807074":[34,34,64]},{"1807078":[234,10]},{"1807082":[34,34]},{"1807086":[136,136]},{"1807092":[65]},{"1807094":[225]},{"1807100":[162]},{"1807104":[4,224]},{"1807107":[81,32,168,64,64,34,170,32,192,160,160]},{"1807119":[128,27,224,4,81,119,168,85,64,85,170,117,96,255,128,85]},{"1807136":[4,4,170,170,32]},{"1807142":[234,138]},{"1807146":[138,74,192,32,170,42]},{"1807158":[32]},{"1807160":[34]},{"1807162":[160]},{"1807164":[64]},{"1807166":[128]},{"1807168":[22,238,4,84,1,170]},{"1807175":[16]},{"1807177":[136]},{"1807183":[48,7,254,5,84,16,171,69,16,118,136,85]},{"1807196":[187]},{"1807198":[69]},{"1807200":[6,16,172,170,68,69,170,170,1,1,170,170,68,68,186,138]},{"1807230":[48]},{"1807232":[85,170,16,68,1,42,72,12,10,158,8,12]},{"1807245":[1]},{"1807247":[69]},{"1807249":[255,1,84,208,43,21,64,106,142,89,8,170]},{"1807262":[16]},{"1807265":[85,170,186,4,5,170,230,31,5,174,162,85,84,239,170]},{"1807286":[8]},{"1807288":[16]},{"1807290":[4]},{"1807292":[1]},{"1807294":[69]},{"1807296":[86,168,21]},{"1807300":[41]},{"1807302":[80,68,4]},{"1807306":[1]},{"1807309":[112,96,116,1,254,192,21,138,1,97,64,170,4,69]},{"1807324":[138]},{"1807326":[65,64]},{"1807329":[86,42,63,116,101,238,154,81,85,186,186,117,5,254,138]},{"1807348":[16]},{"1807350":[36]},{"1807356":[112]},{"1807358":[52]},{"1807360":[255,224,5,16,8]},{"1807366":[81,1,8,8,12,69,24,152,1,21,232,231,64,21,178,8,17,65,171,8,4,4,58,24,1,1,224,23,186,191,69,77,175,238,92,85,247,170,221,69,255,234]},{"1807418":[81]},{"1807420":[128]},{"1807422":[20]},{"1807424":[239,24,65,8,137,128,193,145,128,129,69,1,8]},{"1807438":[17,17,56,215,28,81,171,136,73,17,168,129,69,1,170]},{"1807454":[17,17]},{"1807457":[223,162,251,212,72,187,62,213,87,187,186,85,85,255,238]},{"1807476":[20]},{"1807478":[128]},{"1807488":[255]},{"1807490":[220]},{"1807492":[154,48,17,16,34,2,5,5,170]},{"1807505":[255,25,196,112,154,49,48,170,2,5,5,170]},{"1807521":[255,34,231,21,238,158,238,87,85,255,250,85,85,255,255]},{"1807540":[1]},{"1807552":[236,3,68,129,15,8,85]},{"1807560":[170]},{"1807562":[85]},{"1807564":[170]},{"1807566":[17,16,26,230,18,198,157,138,197]},{"1807576":[162,8,85]},{"1807580":[170]},{"1807582":[17,16,2,245,168,255,120,210,26,186,85,93,170,170,85,85,254,238]},{"1807616":[254]},{"1807618":[79]},{"1807620":[226,1,98,14,165,4,21,19,152,53,131,8,152,102,4,67,120,129,118,9,179,15,176,16,176,2,145,53,1,103,168,251,7,157,175,152,71,88,16,239,64,127,241,14]},{"1807668":[2]},{"1807670":[39]},{"1807672":[7]},{"1807674":[31]},{"1807676":[63]},{"1807678":[255]},{"1807680":[245]},{"1807682":[255]},{"1807684":[254]},{"1807686":[215,128,63,192,149,128,251]},{"1807694":[85,128,138,117,160,95,113,142,83,132,189,194,85]},{"1807708":[59,128,85,128,10,117]},{"1807715":[95]},{"1807717":[143,40,172,192,106,42,239,68,166,42,170]},{"1807736":[128]},{"1807738":[192]},{"1807740":[192]},{"1807742":[128]},{"1807746":[192]},{"1807748":[169]},{"1807750":[247]},{"1807752":[251]},{"1807754":[209,128,191]},{"1807758":[21,16,255]},{"1807762":[63,192,214,41,247]},{"1807768":[255]},{"1807770":[215,128,255]},{"1807774":[85,16,255]},{"1807778":[63,192,86,169,8,125,2,229,40,63]},{"1807789":[111,170,239]},{"1807802":[128]},{"1807806":[16]},{"1807808":[64,160,32]},{"1807812":[3]},{"1807814":[173]},{"1807816":[254]},{"1807818":[221]},{"1807820":[190]},{"1807822":[87,96,255]},{"1807826":[255]},{"1807828":[255]},{"1807830":[127,128,175,80,215,8,187,4,83,100,143,112,223]},{"1807844":[252,3,82,172,1,254,34,253,1,222,168,255]},{"1807872":[184,136,34,32,128,2,108]},{"1807880":[224,8,240]},{"1807884":[252]},{"1807886":[255]},{"1807888":[119]},{"1807890":[255,32,255]},{"1807894":[255,128,255]},{"1807898":[255]},{"1807900":[255]},{"1807902":[127,128,207,16,221,2,191,64,83,172,31,224,15,240,3,252]},{"1807919":[255]},{"1807922":[32]},{"1807936":[183,159,9,69,226,34,192,1]},{"1807945":[170]},{"1807947":[4]},{"1807949":[10,152]},{"1807952":[104,16,254]},{"1807956":[221]},{"1807958":[255]},{"1807960":[255]},{"1807962":[255]},{"1807964":[255]},{"1807966":[255]},{"1807968":[255]},{"1807970":[247,8,63,192,63,192,255]},{"1807978":[255]},{"1807980":[255]},{"1807982":[103,152]},{"1808000":[255,253,211,221,186,187,100,49,127,138,100,21,2,170,1]},{"1808016":[6,4,42]},{"1808020":[69,14,251,36,240,5,251]},{"1808028":[253]},{"1808030":[254,1,249]},{"1808034":[243,12,251,4,159,64,143,112,159,96,255]},{"1808046":[255]},{"1808048":[4]},{"1808054":[36]},{"1808056":[5]},{"1808062":[1]},{"1808064":[84,84,186,186,221,221,119,119,255,255,71,85,51,159,5,1]},{"1808081":[171]},{"1808083":[69]},{"1808085":[34,136]},{"1808090":[184,2,252,16,250,52,255]},{"1808098":[255]},{"1808100":[255]},{"1808102":[255]},{"1808104":[255]},{"1808106":[255]},{"1808108":[207]},{"1808110":[207,48]},{"1808122":[2]},{"1808124":[16]},{"1808126":[4]},{"1808128":[142,130,133,141,93,90,249,247,215,215,254,254,241,233,94,94,140,113,10,116,7,160,6,8]},{"1808153":[40]},{"1808155":[1,28,10,160,21,247]},{"1808162":[251]},{"1808164":[250,5,255]},{"1808168":[255]},{"1808170":[255]},{"1808172":[235,4,247,8]},{"1808182":[8]},{"1808192":[168,168,130,131,225,225,131,131]},{"1808201":[1,251,251,20,108,208,200,137,84,1,124,32,30]},{"1808215":[124,1,254]},{"1808219":[4,48,203,56,7,254]},{"1808226":[255]},{"1808228":[255]},{"1808230":[255]},{"1808232":[255]},{"1808234":[255]},{"1808236":[239,16,223,32,1]},{"1808252":[72]},{"1808256":[191,63,69,69,11,27,25,169,202,202,42,170,32,32]},{"1808272":[191,64,69,186,27,228,145,102,10,181]},{"1808283":[213,32,223]},{"1808287":[255,127]},{"1808290":[255]},{"1808292":[255]},{"1808294":[255,16,255]},{"1808298":[255]},{"1808300":[255]},{"1808302":[255]},{"1808310":[32]},{"1808314":[128]},{"1808320":[255,255,245,245,251,251,5,5,155,171,45,61,187,163,9,25,255]},{"1808338":[245,10,251,4,1,250,179,68,21,194,187,68,25,238,255]},{"1808354":[255]},{"1808356":[255]},{"1808358":[255]},{"1808360":[255]},{"1808362":[255]},{"1808364":[231,16,247]},{"1808382":[8]},{"1808384":[245,250,255,252,255,255,95,95,191,191,31,31,191,191,85,85,240,15,252,3,255]},{"1808406":[95,160,191,64,31,224,191,64,85,170,255]},{"1808418":[255]},{"1808420":[255]},{"1808422":[255]},{"1808424":[255]},{"1808426":[255]},{"1808428":[255]},{"1808430":[255]},{"1808448":[87,254,255,255,95,250,254,244,119,255,254,247,255,235,255,230,254,1,221]},{"1808468":[186,5,116,11,235]},{"1808474":[84,9,170,20]},{"1808479":[25]},{"1808489":[1]},{"1808498":[34]},{"1808500":[64]},{"1808502":[128]},{"1808504":[20]},{"1808506":[162]},{"1808508":[65]},{"1808510":[230]},{"1808512":[119,170,255,231,255,250,127,104,127,125,79,200,215,212,195,254,168,85,64,24,160,5]},{"1808535":[151,168,2,48,7,48,27]},{"1808543":[29]},{"1808556":[16]},{"1808560":[2]},{"1808562":[167]},{"1808564":[90]},{"1808566":[104]},{"1808568":[85]},{"1808570":[200]},{"1808572":[196]},{"1808574":[246]},{"1808576":[248,207,252,128,252,199,240,11,224,30,192,63,224,191]},{"1808591":[255,128,55]},{"1808595":[127]},{"1808597":[59]},{"1808599":[255,1,254]},{"1808603":[253]},{"1808605":[95]},{"1808607":[255]},{"1808624":[77]},{"1808626":[128]},{"1808628":[199]},{"1808630":[11]},{"1808632":[30]},{"1808634":[62]},{"1808636":[191]},{"1808638":[253]},{"1808640":[64,191,132,125,8,187,10,255]},{"1808649":[255,2,255,1,255,42,255]},{"1808657":[255,6,249,14,247,6,255]},{"1808665":[255]},{"1808667":[255]},{"1808669":[255]},{"1808671":[255]},{"1808675":[4,2,8,6,8]},{"1808688":[191]},{"1808690":[113]},{"1808692":[177]},{"1808694":[121]},{"1808696":[126]},{"1808698":[86]},{"1808700":[233]},{"1808702":[122]},{"1808705":[255,2,255,4,255,170,255,5,255,170,255,69,143,254,199]},{"1808721":[255]},{"1808723":[255]},{"1808725":[255]},{"1808727":[255]},{"1808729":[255]},{"1808731":[255,80,143,80,215]},{"1808748":[32,64,64,184,238]},{"1808754":[86]},{"1808756":[166]},{"1808758":[234]},{"1808760":[165]},{"1808762":[170]},{"1808764":[109]},{"1808766":[134]},{"1808768":[1,255,168,249,83,251,165,245,86,255,168,254,95,254,245,244]},{"1808785":[255,6,249,4,251,10,245]},{"1808793":[255]},{"1808795":[252,1,254,10,244]},{"1808805":[2]},{"1808807":[1,1,7,2,2]},{"1808813":[15,1,113,161]},{"1808818":[168]},{"1808820":[83]},{"1808822":[165]},{"1808824":[87]},{"1808826":[170,1,95]},{"1808830":[245]},{"1808832":[21,255,169,253,85,255,37,117,215,64,32,64,42,97,21,80]},{"1808849":[255,2,253]},{"1808853":[255,138,117,191,111]},{"1808859":[64,20,36,42,80]},{"1808872":[111,255,96,64,75,79,69,69,21]},{"1808882":[169]},{"1808884":[85]},{"1808886":[37]},{"1808888":[255]},{"1808890":[96,159,111,128,85,128,4,238,245,213,218,250,85,85]},{"1808905":[240,1]},{"1808908":[31,224,16]},{"1808912":[113,238,74,149,5,250,170,85,15]},{"1808924":[31,24,239]},{"1808928":[64,32]},{"1808931":[97]},{"1808933":[128]},{"1808936":[240,240,1]},{"1808940":[248,255,16,16,4]},{"1808946":[149]},{"1808948":[218]},{"1808950":[85]},{"1808952":[240]},{"1808954":[1,254,255]},{"1808958":[16]},{"1808960":[106,234,84,84,170,162,16,16,170,13,37,27,196,39,4,232,21,234,171,84,85,166,239,16,82,74]},{"1808987":[24,131,35,17,18]},{"1808993":[40]},{"1808996":[8,44]},{"1809000":[167,231,56,24,100,163,239,114,106]},{"1809010":[84]},{"1809012":[174]},{"1809014":[16]},{"1809016":[239]},{"1809018":[56,199,227,28,254,1,170,170]},{"1809029":[192]},{"1809031":[138]},{"1809033":[1,55,130,235,251,196,19,85,170,255,32,63]},{"1809046":[117]},{"1809048":[254,22,89,131,252,16,16,11]},{"1809059":[32,192,128,138]},{"1809064":[1,22,7,139,4,16,200,19,170]},{"1809074":[32]},{"1809076":[192]},{"1809078":[138]},{"1809080":[23]},{"1809082":[143,112,16,239,211,44,128,144]},{"1809091":[58]},{"1809093":[68,6,175,3,31,2,255,155,196,213,221,111,192,197,192,187,144,84,4,227,67]},{"1809116":[44,64,254,8,16,64,58,192,68,144,175,2,31,72,255,66,11,68,34,8,208]},{"1809138":[250]},{"1809140":[212]},{"1809142":[171]},{"1809144":[92]},{"1809146":[255]},{"1809148":[71,184,8,247]},{"1809153":[17]},{"1809155":[168]},{"1809157":[69]},{"1809159":[239]},{"1809161":[119]},{"1809163":[255,255,93,130,109,238,64,85]},{"1809172":[186,16,16]},{"1809176":[136]},{"1809180":[171,11,21,238,17,64,170,2,69,16,239]},{"1809192":[119]},{"1809194":[255]},{"1809196":[95,246,140,101,81]},{"1809202":[168]},{"1809204":[85]},{"1809206":[239]},{"1809208":[119]},{"1809210":[255]},{"1809212":[246]},{"1809214":[101,154,80,101,32,207]},{"1809221":[223,3,254,1,254,2,255,66,254,160,225,234,96]},{"1809236":[32]},{"1809238":[1,1]},{"1809241":[1,3]},{"1809244":[71,69,90,174,69,48,223,32,223]},{"1809254":[254,3,255,1,254,2,253,6,46,213,5]},{"1809266":[223]},{"1809268":[222]},{"1809270":[254]},{"1809272":[255]},{"1809274":[254,1,191]},{"1809278":[87,40]},{"1809281":[87,128,253,96,127,64,117,66,124,196,182,43,99,118,253,168]},{"1809298":[128,128,32,32,64,192,100,131,55,185]},{"1809309":[132,1,3,87]},{"1809314":[255,2,255,64,127,138,91,231,153,124,16,255,1,254,87]},{"1809330":[125]},{"1809332":[95]},{"1809334":[53]},{"1809336":[127]},{"1809338":[253,2,255]},{"1809342":[255]},{"1809345":[78,6,87,2,255,141,221,137,63,159,23,243,255,125,249,160]},{"1809362":[4,4,2,6,5,5,24,120,21,69,14,10,5,7,95,17,255,168,255,4,255,34,223,112,39,224,15,240,5,248,78]},{"1809394":[83]},{"1809396":[249]},{"1809398":[216]},{"1809400":[119]},{"1809402":[226,24,249,4,248,6]},{"1809409":[10,23,23,135,175,155,155,210,186,159,223,255,255,81,85,160]},{"1809426":[21,21,226,162,17,17,130,162,21,117,170,170,81,255,95,85,255,136,207,112,255,4,191,101,223,64,255]},{"1809454":[85,4,10]},{"1809458":[98]},{"1809460":[77]},{"1809462":[234]},{"1809464":[24]},{"1809466":[138,32,85]},{"1809471":[170,10,42,84,84,168,170,187,187,170,170,238,238,253,253,3,16,138,10,84,84,168,168,17,17,170,170,68,68,170,170]},{"1809503":[184,127,85,255,171,255,85,255,68,255,85,238,17,252,3,16,87,32]},{"1809524":[2]},{"1809526":[170]},{"1809530":[170]},{"1809532":[84]},{"1809535":[168,170,2]},{"1809540":[170,170,128,128,170,170,234,232,85,84,14,13,170,2,8]},{"1809556":[234,170,13]},{"1809560":[171,170,87,64,4,6,12,168,87,85,247,255,191,85,242,127,254,85,234,21,84,171,8,86]},{"1809590":[128]},{"1809594":[170]},{"1809596":[84]},{"1809598":[14,161,170]},{"1809602":[1,96,139,181,32]},{"1809608":[151,175,173,143,115,100,151,210,170]},{"1809618":[65,96,143,160,104,62,160,160,72,56,32,36,60,214,85,85,190,190,255,47,153,215,224,127,152,79,112,135,66,229]},{"1809650":[64]},{"1809652":[79]},{"1809654":[63]},{"1809656":[63]},{"1809658":[159,32,87,8,7]},{"1809664":[70,1,172,129,156,35,188,65,188,129,122,131,101,14,236,29,225,249,129,144,197,199,5,6]},{"1809689":[66,10,15,12,151,11,25,32,223,2,255,68,186,7,251]},{"1809705":[255,14,242,20,233,6,240,127]},{"1809714":[255]},{"1809716":[254]},{"1809718":[255]},{"1809720":[255]},{"1809722":[254,1,248]},{"1809726":[240]},{"1809728":[111]},{"1809730":[85]},{"1809732":[171,1,144,16,216,216,122,186,149,3,80,47,191,64,213]},{"1809748":[43,129,41,160,237,232,69,192,246,3,175,47]},{"1809761":[80,170,42,84,212,198,191,138,247,58,5,20,104,96,208]},{"1809780":[1]},{"1809782":[192]},{"1809784":[192]},{"1809786":[122,128,22,1]},{"1809791":[47,238,1,61,8,179,17,80,72]},{"1809801":[12,146,142,136,47,18,251,159,1,125,8,187,17,93,72,239,4,77,15,111,111,253,255,96,122,163,194,68,78,162,167,16,251,176,80,144,136,8,16,1]},{"1809842":[40]},{"1809844":[17]},{"1809846":[72]},{"1809848":[4]},{"1809850":[172,3]},{"1809853":[119,1,238,191]},{"1809858":[213]},{"1809860":[127,64,85,69,154,128,114,95,193,207,250,135,255]},{"1809874":[213]},{"1809876":[255,64,87,69,191,135,250,255,255,247,125,135,128,79,170,63]},{"1809893":[170,168,170,88,103]},{"1809899":[85]},{"1809901":[201,120]},{"1809906":[128]},{"1809908":[64]},{"1809910":[69]},{"1809912":[144]},{"1809915":[170,6,48,124,131,254]},{"1809922":[215]},{"1809924":[255]},{"1809926":[119,98,191,213,1,1,84,200,135,120,255]},{"1809938":[255]},{"1809940":[255]},{"1809942":[247,98,255,213,127,65,183,192,255,248,1,254,40,215]},{"1809957":[255,8,136]},{"1809961":[128,128,62,28,35,7]},{"1809974":[98]},{"1809976":[85]},{"1809978":[1,192,20,200,127,128,250,18,216,1,255,1,247,162,252,84,78,81,112,95,232,25,252,18,252]},{"1810004":[255,1,247,162,255,84,122,80,223,17,251,26,7,232,38,217]},{"1810021":[254,8,92]},{"1810025":[139,143,160,96,158,232,5,16]},{"1810036":[1]},{"1810038":[162]},{"1810040":[84]},{"1810042":[90,5,1,96,240,14,136,42,43,70,195,44,247,132,249,194,238,65,182]},{"1810062":[255,160,247]},{"1810066":[255,2,247]},{"1810070":[251,140,247,200,251,68,253,2,126,161,127,128,84,161,35,220,4,123,14,49,149,42,139,116,65,30]},{"1810098":[2]},{"1810102":[128]},{"1810104":[200]},{"1810106":[196]},{"1810108":[2]},{"1810110":[33,128,55,234,41,84,19,170,84,1,166,8,103,17,115,136,222,37,88,165,254,1,236,17,171,84,95,160,191,65,252,3,223,4,255]},{"1810146":[215,40,255]},{"1810150":[255]},{"1810152":[248,7,216,38,143,112,33,218,133]},{"1810162":[1]},{"1810164":[17]},{"1810166":[84]},{"1810168":[160]},{"1810170":[65]},{"1810172":[3]},{"1810174":[4,32,217,251,246,93,243,191,87,17,253,46,149,196,153,42,221,64]},{"1810193":[38,8,163,4,72,168,70,128,83,234,145,103,144,186,69,255]},{"1810210":[255]},{"1810212":[255]},{"1810214":[255]},{"1810216":[127,128,127]},{"1810220":[254,1,71,184,34]},{"1810226":[163]},{"1810228":[72]},{"1810230":[70]},{"1810232":[83]},{"1810234":[145]},{"1810236":[144]},{"1810238":[5]},{"1810240":[124,108,152,136,4,108,166,118,205,189,15,85,221,170,80,5,16,131,56,79,120,227,88,193,112,2,240,10,98,21,175,80,239,16,247]},{"1810276":[239,16,223,32,191,64,159,96,191,64,255]},{"1810290":[8]},{"1810294":[128]},{"1810298":[10]},{"1810300":[21]},{"1810302":[80]},{"1810310":[164,162,12,15,175,175,192,224,226,74]},{"1810321":[255]},{"1810323":[255]},{"1810325":[255,12,83,1,254]},{"1810331":[80]},{"1810333":[63]},{"1810335":[189,255]},{"1810338":[255]},{"1810340":[255]},{"1810342":[243,8,255]},{"1810346":[255]},{"1810348":[255]},{"1810350":[255]},{"1810358":[2]},{"1810360":[2]},{"1810364":[32]},{"1810366":[168]},{"1810368":[170,170,1,1,34,34]},{"1810376":[10,10]},{"1810380":[2,2,128,152,170,85,1,254,34,221]},{"1810391":[255,10,245]},{"1810395":[255,2,253,24,103,255]},{"1810402":[255]},{"1810404":[255]},{"1810406":[255]},{"1810408":[255]},{"1810410":[255]},{"1810412":[255]},{"1810414":[255]},{"1810432":[239,239,85,85,171,171,1,1,147,147,69,69,42,42,5,5,239,16,85,170,171,84,1,254,131,108,69,186,42,213,5,250,255]},{"1810466":[255]},{"1810468":[255]},{"1810470":[255]},{"1810472":[255]},{"1810474":[255]},{"1810476":[255]},{"1810478":[255]},{"1810496":[127,174,255,237,243,233,243,123,255,151,205,159,168,211,200,255,170,81,64,18,160,30]},{"1810519":[140,128,104,32,80,36,107,48,55]},{"1810541":[16,16,32,4]},{"1810546":[173]},{"1810548":[73]},{"1810550":[123]},{"1810552":[23]},{"1810554":[143]},{"1810556":[129]},{"1810558":[205]},{"1810560":[112,255,112,255,227,191,202,255,132,255,128,255]},{"1810573":[255]},{"1810575":[255]},{"1810577":[143]},{"1810579":[141]},{"1810581":[92]},{"1810583":[53]},{"1810585":[123]},{"1810587":[127]},{"1810589":[255]},{"1810591":[255]},{"1810608":[243]},{"1810610":[255]},{"1810612":[191]},{"1810614":[255]},{"1810616":[255]},{"1810618":[255]},{"1810620":[255]},{"1810622":[255]},{"1810625":[255,3,253,4,255,10,254]},{"1810633":[255,42,255,5,255,186,255]},{"1810641":[255,1,253,3,255,3,126]},{"1810649":[255]},{"1810651":[255]},{"1810653":[255]},{"1810655":[255]},{"1810658":[3]},{"1810661":[7,2]},{"1810672":[255]},{"1810674":[222]},{"1810676":[252]},{"1810678":[252]},{"1810680":[234]},{"1810682":[239]},{"1810684":[175]},{"1810686":[186]},{"1810688":[1,255,42,255,85,255,174,255,17,251,161,245,91,255,255,255]},{"1810705":[255]},{"1810707":[255]},{"1810709":[255]},{"1810711":[255,4,251,12,245,6,255]},{"1810719":[255]},{"1810727":[6]},{"1810729":[1,2,4,6,9]},{"1810735":[53,233]},{"1810738":[250]},{"1810740":[245]},{"1810742":[174]},{"1810744":[145]},{"1810746":[163]},{"1810748":[89]},{"1810750":[255]},{"1810752":[101,239,143,207,69,239,245,245,86,254,253,252,223,250,85,81,40,215,48,207,16,239,10,245,1,254,2,252]},{"1810781":[250,170,81]},{"1810785":[60]},{"1810787":[133]},{"1810789":[64]},{"1810791":[244]},{"1810793":[18,1,29,5,223,4,69,77]},{"1810802":[143]},{"1810804":[69]},{"1810806":[245]},{"1810808":[86]},{"1810810":[253]},{"1810812":[223]},{"1810814":[85]},{"1810816":[87,255,245,245,250,250,108,112,250,225,28,199,26,106,20,96]},{"1810833":[255,10,245,5,250,131,96,28,228,88,12,197,74,139,1]},{"1810849":[67]},{"1810851":[5]},{"1810853":[154,20,12,27,191,131,247,48,90,116,117,87]},{"1810866":[245]},{"1810868":[250]},{"1810870":[100]},{"1810872":[255]},{"1810874":[223]},{"1810876":[26]},{"1810878":[117]},{"1810880":[14,138,4,16,129,226,96,9,180,147,66,145,10,1,6,168,49,42,203,64,13,164,164,40,68,148,34,2,254,72,87,17,164,174,84,84,98,231,107,104,55,183,211,211,9,79,169,189,174,64,84,32,231,16,106,16,183,8,211,12,79]},{"1810942":[189,2,232,129]},{"1810947":[2,32,5,2,173,129,87,11,244,159,97,183,194,22,134,253,45,218,130,82,18,40,8,11,10,30,30,109,224,105,239,2,47,37,167,175,183,215,223,254,255,255,63,122,231,239]},{"1810994":[47]},{"1810996":[167]},{"1810998":[191]},{"1811000":[223]},{"1811002":[255]},{"1811004":[191]},{"1811006":[127]},{"1811008":[196,16,15,241,30,224,110,150,239,80,240,138,240]},{"1811022":[3,32,238,169,12,12,31,30,89,78,160,128,107,32,199,65,253,206,147,252,254,252,254,254,230,87,223,224,154,193,49,134,237,208,253,2,254,1,254,1,255]},{"1811064":[239]},{"1811066":[241,14,246,9,16,239,71,185,103,185,254,176,185,64,230,212,100,195,107,6,44,223,198,70,68,129,108,36,27,90,127,4,216,55,182,203,174,76,127,239,59,229,51,25,39,196,190]},{"1811114":[62,133,225,38,46,243,255]},{"1811122":[255]},{"1811124":[30,193,120,135,12,243,13,242,2,253,78,177,236,1,255,187,255,24,17,40,198,110,176,111,168,253,31,63,154,1,68,1,103,93,174,128,127,119,47,244,138,29,64,159,104,145,187,255,152,58,191]},{"1811176":[49,110,164,79,53,72,159,255,241,14,255]},{"1811188":[255]},{"1811190":[23,232,110,145,100,155,8,247,128,127,107,190,208,11,255,160,32,239]},{"1811209":[170,64,191,197,213,255,255]},{"1811217":[129,180,139,88,248,223,32,255,101,191,68,239,213]},{"1811231":[255,1,212,88,35,167,160,239,16,117,170,4,191,85,128,255,255,128,127,227,28,255]},{"1811254":[16,239,186,69,4,251,197,58]},{"1811263":[255,8,216,205,96,129,32,59,224,6,128,28,193,60,3,57,131,36,215,16,130,104,30,224,36,209,120,161,98,132,71,5,1,20,195,144,47,152,119,192,63,112,175,34,221,69,59,2,253,199,56,15,240,255]},{"1811318":[63,192,190,65,127,128,126,128,121,132,53,56,208,2,155,39,31,76,102,201,65,190,254,126,237,211,7,203,26,39,55,71,52,143,120,119,62,193,126,255,195]},{"1811360":[3,243,32,192,76,247,195,156,209,8,129,190,127,1,238,255,243,12,224,16,255]},{"1811382":[148,3,40,23]},{"1811387":[127,127,128,193,62,201,159,53,138,116,199,185,195,182,3,121,7,118,6,116,12,134,37,194,69,135,76,71]},{"1811416":[199,200,137,141,142,133,137,135,5,122,192,190,197,62,131,191,199,63,139,118,135,123,143,124,126,129,252,3,254,1,59,68,250,5,253,2,247,8,243,12,63,117,224,32,127,127,199,227,81,254,139,127,199,147,167,127,10,58,61,194]},{"1811477":[127,216,71,254]},{"1811482":[127]},{"1811484":[130,59,6,1,240,5,29,50,254,1,248,163,255,251,255,203,63,213,3,251,138,53,29,226,128,126,216,36,4,251,116,139,234,21,250,5,144,127,143,79,255,248,254,248,94,166,230,239,129,203,136]},{"1811536":[128,239,16,239,10,249,26,227,160,1,243,16,193,146,37,243,111,127,16,239,15,247,19,253,225,255,209,237,196,127,103,152,128,16,16,232,11,4,31]},{"1811576":[190,65,61,194,255]},{"1811582":[123,132,31,195,247,151,64,9,134,16,7,144,95,32,31,64,92]},{"1811600":[8,216,24,168,144,118,32,233,193,105,129,128,130,163,33,162,248,215,8,247,176,79,96,223,193,190,129,127,131,125,163,94,63]},{"1811634":[31,32,191,64,127,128,127,128,254,1,255]},{"1811646":[255]},{"1811648":[65,204,195,208,197,144,3,96,223,48,14,128,244,128,31,129,142,202,100,92,48,2,136,92,16,32,80,49,161,170,163,99,226,25,44,243,112,239,184,119]},{"1811689":[127,241,46,225,94,226,29,163,68,207,16,191,64,31,224,63,128,127]},{"1811708":[190,65,255]},{"1811712":[83,2,197,46,176,111,235,89,191,159,84,191,18,238,253,22,38,134,74,110,105,79,205,210]},{"1811737":[31,144,175,2,81,20,136,8,243,80,165,9,246,132,127,64,63,128,255,175,127,118,255,200,36,240,10,192,13,192,27,64,151,128,63,3,124,21,232,136,116,128]},{"1811780":[169,64,250,255,170,190,5,175,241,127,111,64,119,119,106,106,86,86,82,5,3,252,1,254,113,4,80,175,4,136,21,170,64,169,168,255,1,255]},{"1811819":[255,138,255,208,127]},{"1811825":[119,21,106]},{"1811829":[86]},{"1811831":[255,1,254]},{"1811835":[255]},{"1811837":[255,208,47,20,59,95,18,192]},{"1811846":[118,157,72,200,69,254,4,255,255]},{"1811856":[99,123,160,178,31,31,107,255,104,128,1,255,4,219]},{"1811871":[255,132,12,69,237,32,192]},{"1811879":[246,55,232]},{"1811883":[255,32,255]},{"1811887":[255,163,80]},{"1811891":[178,32,31]},{"1811895":[255]},{"1811897":[223]},{"1811899":[255]},{"1811901":[255]},{"1811903":[255,3,254,174,173,9,13,21,233,164,164,11,243,21,246,254,12,239,254,7,175,209,209,229,233,174,4,5,248,28,227,13,250,16,19,80,6,38,13,98,25,91,170,14,255,8,255,1,247,236,1,80,171,32,210,4,234]},{"1811961":[245,4,251,8,247,1,254,17,254,168,239,252,159,7,135,34,226,133,125,192,191,128,124,239,94,71,175,3,159,248,255,125,255,127,255,255,127,28,252,1,160,16,64,96,96,128]},{"1812008":[64,160,24,133,12,192,3,224,79,16,23,168,3,156]},{"1812023":[255]},{"1812025":[95]},{"1812027":[250]},{"1812029":[255]},{"1812031":[255,213,53,28,222,119,247,51,49,126,127,223,116,246,174,175,21,229,53,254,190,247,119,247,243,255,255,255,255,247,255,191,151,193,14]},{"1812067":[95,8,243,8,49]},{"1812073":[126]},{"1812075":[85]},{"1812077":[175,64,173,96,27,128,35]},{"1812085":[12,4,202]},{"1812089":[129]},{"1812091":[170]},{"1812093":[80]},{"1812095":[250,213,138,158,200,47,192,35,64,111,68,31,251,223,240,7,230,127,64,63,8,223,64,255,192,63,68,255,187,223,208,247,166,10,245,1,254,40,151,48,23,40,147]},{"1812139":[71,96,143,8,217]},{"1812147":[8,64,32,104,144,4,192,56,131,16,96,38,128,118,136,247,2,206,36,255]},{"1812168":[252,18,255,8,255,64,255,144,253,2,190,67,119,140,254,1,223,48,255,8,253,66,255,144,139,84,73,180,185,70,1,254,35,220]},{"1812203":[247,2,253]},{"1812207":[127,2]},{"1812210":[67]},{"1812212":[136,4,1]},{"1812216":[32,16,8]},{"1812220":[2,64,128,16,61,210,249,36,97,170,89,68,69,170,219,20,247,29,245,181,250,21,254,33,222,33,222,113,186,117,190,81,111,149,250,189,167,72,7,216,175,80,135,40,239,16,69,170,176,75,7,234,21]},{"1812274":[33]},{"1812276":[1]},{"1812278":[65]},{"1812280":[69]},{"1812282":[81]},{"1812284":[132,1,16,162,125,170,250,85,221,187,95,21,95,170,89,4,155,37,80,5,2,213,7,168]},{"1812309":[102,160,74,160,85,167,88,103,153,175,80,255]},{"1812322":[253,2,255]},{"1812326":[255]},{"1812328":[255]},{"1812330":[252,2,254,2,255]},{"1812336":[213]},{"1812338":[168]},{"1812340":[102]},{"1812342":[74]},{"1812344":[85]},{"1812346":[88]},{"1812348":[153]},{"1812350":[80]},{"1812352":[208,208,168,42,84,213,235,87,85,213,255,93,125,173,126,21]},{"1812369":[47]},{"1812371":[215]},{"1812373":[171]},{"1812375":[188]},{"1812377":[170]},{"1812379":[162,128,82,128,107,255]},{"1812386":[255]},{"1812388":[255]},{"1812390":[255]},{"1812392":[255]},{"1812394":[255]},{"1812396":[255]},{"1812398":[255]},{"1812402":[130]},{"1812404":[129]},{"1812406":[188]},{"1812408":[128]},{"1812410":[162]},{"1812412":[80]},{"1812414":[107]},{"1812417":[24,136,136,128,193,33,98,6,5,195,224,240,176,248,88,16,239]},{"1812435":[119,65,62,129,94,3,248,3,60]},{"1812445":[79]},{"1812447":[167,255]},{"1812450":[255]},{"1812452":[255]},{"1812454":[254,1,254,1,252,2,255]},{"1812462":[255]},{"1812464":[8]},{"1812470":[66]},{"1812474":[32]},{"1812476":[64]},{"1812478":[160]},{"1812480":[202,202,164,228,130,98,88,32,199,22,228,22,75,6,50,192,138,53,100,59,194,61,248,7,233,62,241,43,97,190,98,185,255]},{"1812514":[223]},{"1812516":[127,128,39,152,110,144,113,182,218,29,181,114]},{"1812530":[32]},{"1812532":[32]},{"1812538":[8]},{"1812540":[32]},{"1812542":[136]},{"1812544":[248,47,242,63,200,59,224,247,140,255,2,247,224,255,234,255]},{"1812561":[215]},{"1812563":[205,12,251,8,23,4,123]},{"1812571":[243]},{"1812573":[31]},{"1812575":[31]},{"1812580":[8]},{"1812585":[4,12]},{"1812592":[47]},{"1812594":[55]},{"1812596":[51]},{"1812598":[243]},{"1812600":[211]},{"1812602":[251]},{"1812604":[250]},{"1812606":[251]},{"1812609":[255,2,255,5,255,10,255,1,255,43,255,21,255,191,255]},{"1812625":[255]},{"1812627":[255]},{"1812629":[255]},{"1812631":[255]},{"1812633":[255]},{"1812635":[255]},{"1812637":[255]},{"1812639":[255]},{"1812649":[1]},{"1812655":[130,254]},{"1812658":[255]},{"1812660":[255]},{"1812662":[90]},{"1812664":[251]},{"1812666":[251]},{"1812668":[191]},{"1812670":[255]},{"1812672":[21,255,171,255,85,255,239,255,117,255,255,255,95,255,255,255]},{"1812689":[255]},{"1812691":[255]},{"1812693":[255]},{"1812695":[255]},{"1812697":[255]},{"1812699":[255]},{"1812701":[255]},{"1812703":[255]},{"1812713":[17]},{"1812715":[35]},{"1812717":[1]},{"1812719":[151,149]},{"1812722":[235]},{"1812724":[245]},{"1812726":[239]},{"1812728":[245]},{"1812730":[255]},{"1812732":[95]},{"1812734":[255]},{"1812736":[87,255,253,253,95,255,253,253,127,255,223,213,255,186,149,196]},{"1812753":[255,2,253]},{"1812757":[255,2,253]},{"1812761":[255,32,213]},{"1812765":[186,90,244]},{"1812769":[23]},{"1812771":[156]},{"1812773":[95]},{"1812775":[253]},{"1812777":[127,10,223,69,255,17,245,87]},{"1812786":[253]},{"1812788":[95]},{"1812790":[253]},{"1812792":[127]},{"1812794":[223]},{"1812796":[255]},{"1812798":[149]},{"1812800":[251,250,245,86,250,168,84,90,238,171,85,74,171,174,17,170,4,250,8,84,5,168,161,80,16,170,160,64,80,170,68,4,1,251,163,247,82,250,14,94,69,239,31,95,5,175,187,191,251]},{"1812850":[247]},{"1812852":[250]},{"1812854":[94]},{"1812856":[239]},{"1812858":[95]},{"1812860":[175]},{"1812862":[191]},{"1812864":[238,168,85,2,186,37,81,170,232,157,64,171,160,85,32,255,17,168,168]},{"1812884":[64,32,4,4,2,138,20,20,10,10,32,32,70,238,87,87,159,191,251,255,117,255,235,255,245,255,223,223,238]},{"1812914":[87]},{"1812916":[191]},{"1812918":[255]},{"1812920":[255]},{"1812922":[255]},{"1812924":[255]},{"1812926":[255,32,168,86,66,168,129,85,2,237,133,82,15,250,5,93,171,248,1,2,22,22,42,43,18,18,47,42,13,10,166,167,171,168,254,255,234,254,213,255,239,255,208,255,240,247,91,251,80,80,255]},{"1812978":[254,1,255]},{"1812982":[255]},{"1812984":[253]},{"1812986":[253,10,255,4,248,175,150,100,62,72,25,100,244,41,249,55,161,224,54,144,232,1,147,129,53,48,156,84,83,48,175,181,235,202,33,136,247]},{"1813024":[229,247,122,125,116,252,191,50,148,191,127,124,184,128,224,7,246,9,127,128,252,3,177,64,191,64,224,159,128,127,7,248,184,7,42,128,181,189,170,160,139,12,41,20,131,193,156,107,189,255,234,191,202,119,218,127,187,183,157,14,62,89,50,59,253,133,191,64,119]},{"1813094":[127]},{"1813096":[243,64,15,32,153,37,251,5]},{"1813105":[255,191,64,119,136,127,128,112,143,108,211,25,230,255,192,239,205,35]},{"1813124":[85,221,168]},{"1813128":[169,90,141,1,254,94,255,250,205,220,35,255,170,119,168,255,185,251,234,1,164,164,6]},{"1813152":[220,254,255]},{"1813156":[119]},{"1813158":[255]},{"1813160":[185,24,9,101,252,252,248,248]},{"1813169":[255,255]},{"1813172":[119,136,255]},{"1813176":[4,255,97,158,248,7,248,7,46,56,248,2,5,5,240,10,155,149,68,70,175,168,229,143,168,14,24,31,250,255,208,223,250,146,231,88,104,144,90,41,78,200,31,226,255]},{"1813222":[223,42,155,252,94,237,147,128,167,153,65,191,253,2,255]},{"1813238":[245,10,16,239,157,98,147,108,137,118,191,170]},{"1813251":[42,84,92]},{"1813255":[170,170,18]},{"1813259":[160,251]},{"1813262":[253,216,170,191]},{"1813267":[255,171,247,1,255,255,185,189,3,4]},{"1813278":[38,114,191,170,255,42,247]},{"1813286":[255,170,185,16,163,28,248,3,222,85,64,255,213,42,247,8,85,170,1,254,31,224,251,4,251,140,19]},{"1813314":[112,12,125,7,104,10,192,17,208,8,250,20,189,88,198,97,136,143,154,145,152,143,31,17,61,16,103,64,102,69,75,184,131,124,157,108,159,102,49,249,58,213,127,147,27,243,120,135,255]},{"1813364":[249,2,237,18,248,7,215,42,219,36,253,8,172,16,1,168,81,252,10,168,13,208,3,192,3,224,182,225,1,67,2,254,174,82,12,245,120,218,152,12,193,45,96,73,67,82,254,169,82,1,244,171,88,87,248,7,193,62,192,127,175,252,87,168,83,172,95,160,143,240,47,176,63,192,255,128,96]},{"1813442":[227,1,198,2,211,52,131,73,20,97,140,131,47,135,10,151,22,14]},{"1813461":[49,121,73,210,246,32,202,167,247,131,147,22,225,30,233,48,223,105,182,178,108,131,94,103,155,130,249,247,8,239,16,255]},{"1813494":[223,32,254,1,222,32,255]},{"1813502":[249,4,254,253,4,255,241,5,24,65,122,64,186,134,51,4,120,9]},{"1813523":[3,128,137,96,163,12,203,206,76,78,70,154,158]},{"1813537":[252,3,255,129,126,167,157,205,176,78,183,78,181,150,109,255,3,252,3,255]},{"1813558":[190,65,249,6,255]},{"1813564":[247,8,255]},{"1813568":[48,130,62,129,81]},{"1813574":[127,7,117,3,254,15,104,4,244,22,2,5,64,193,131,168,135,130,133,138,5,4]},{"1813597":[149,48,53,13,252,192,191,135,125,129,123,143,115,5,243,31,229,47,218,125,130,127,128,253,2,251,4,249,4,240,11,251]},{"1813630":[241,6,52,193,57,1,186,133,116,1,118,14,99,11,116,28,124,8,198,13,67,196,207,72,130,142,144,159,131,146,161,175,162,167,132,185,199,63,76,176,141,117,149,104,158,97,171,78,166,77,188,67,254,1,255,3,252]},{"1813688":[251,6,247]},{"1813692":[227,16,231,24,183,129,28,131,59,129,122,135,181,1,177,5,120,8,237,9,130,73,39,36,193,68,134,2,8,70,10,71,25,153,2,27,194,191,167,218,70,56,5,125,1,251,12,247,22,233,25,230,252,3,127]},{"1813748":[125,129,124,130,240,15,240,11,254,1,240,11,124,4,7,69]},{"1813765":[249,21,73,8,178,76,36,48,102,128,138,134,10,189,1,253,4,170,17,67,83,56,152,105,3,35,235,247,253,65,71,7,2,64,71,182,191,57,226,134,122,114,221,131,124,191,184,247,248,180,187,78,241,25,164,176,73,120,3,127]},{"1813826":[128,64,128,93,128]},{"1813832":[31,17]},{"1813838":[1,193]},{"1813841":[255,191]},{"1813844":[221,34,255]},{"1813848":[238,238,255,255,223,222,254,254,128,255,64,64]},{"1813864":[17,31]},{"1813867":[170,32,84,192,43]},{"1813873":[255,191,63,255,255,255,127,224,255]},{"1813883":[255,33,222]},{"1813887":[254,255]},{"1813893":[85]},{"1813896":[255,17,1,1,42,139]},{"1813903":[193]},{"1813905":[255,255]},{"1813908":[85,170,255]},{"1813912":[238,238,255,255,213,223,255,255]},{"1813921":[255]},{"1813928":[17,187,1,170,32,113,64,40]},{"1813937":[255,255,255,255,255,255,255,68,255]},{"1813947":[255]},{"1813949":[223]},{"1813951":[255,255]},{"1813957":[84]},{"1813960":[247,118,28,252,91,99,213,141]},{"1813969":[255,255]},{"1813972":[84,171,255]},{"1813976":[128,129,183,247,252,127,218,143,81,255]},{"1813992":[127,247,40,92,128,128,40,16]},{"1814001":[255,255,255,255,255,255,255]},{"1814009":[255]},{"1814011":[171]},{"1814013":[127,64,191,255,255,1]},{"1814021":[68,3,2,241,138,255,12,235,152,94,216]},{"1814034":[255]},{"1814036":[69,186,251,5,11,126,223,226,92,243,188,130,255,255]},{"1814054":[1,1,240,240,34,98,34,35,67,194]},{"1814065":[255,255,254,255,255,254,254,15,254,29,236,28,255,60,251,74,159,179,193,214,35,247,9,94,11,255]},{"1814092":[127,16,190,224,23,215,51,115,127,255,127,191,151,71,254,161,151,121,31,78,96,195,140,225,128,203,128,225,160,211,161,161,233,233,160,240,8,125]},{"1814131":[190]},{"1814133":[245]},{"1814135":[254,136,125,94,1,6,120,1,254,31,60,47,170,143,188,143,119,170,225,22,94,244,52,206,54,63,44,159,170,239,204,255,231,245,241,167,116,239,52,191,228,16,195]},{"1814179":[213,16,163,8,112,10,228,10,65]},{"1814189":[43,202,209,44,208,10,224,12,80,15,224,1,90,132,58,196,16,12,98,255,68,251,26,255,4,191,202,63,19,255,170,255,245,103,102,255,68,255,26,255,4,255,10,191,243,95,202,255,181,79,118]},{"1814241":[251]},{"1814243":[245]},{"1814245":[251,160,87,128,46]},{"1814251":[117,64,11,136,153,4,64,10,16,4]},{"1814262":[40,130,81,2,10,128,180,65,78,32,255,7,231,4,245,82,239,180,247,56,255,176,255,144,252,249,127,135,255,28,247,80,255,180,253,50,255,176,255,144,255,248,128,124,24,231,10,245,8,71,2,253]},{"1814315":[79]},{"1814317":[255]},{"1814319":[31,131,4]},{"1814323":[4]},{"1814325":[64,184,4,2,32,176]},{"1814333":[144,224,24,93,162,255,66,125,128,190,227,127,128,254,1,221,38,255,146,162,93,174,83,254,67,255,162,220,35,191,64,119,140,255,146,255]},{"1814370":[81,172,39,216,1,92,163,92,65,190,170,85]},{"1814383":[255,93]},{"1814386":[19]},{"1814388":[1]},{"1814390":[162]},{"1814392":[35]},{"1814394":[64]},{"1814396":[136,4]},{"1814399":[146,119,175,159,69,127,139,119,49,61,194,191,64,247,10,211,4]},{"1814417":[216,96,154,128,116,184,118,240,15,96,159,8,245,172,83,255]},{"1814434":[255]},{"1814436":[255]},{"1814438":[207,16,207,48,223,32,255]},{"1814446":[127,128,216]},{"1814450":[154]},{"1814452":[116]},{"1814454":[102,16,15]},{"1814458":[159]},{"1814460":[245]},{"1814462":[83]},{"1814464":[68,92,174,246,88,92,232,23,209,53,248,20,212,175,123,79,24,163,24,65]},{"1814485":[167,192,63,128,46,7,233,14,117,142,62,255]},{"1814498":[247,8,255]},{"1814502":[63,192,126,129,254,1,251]},{"1814510":[245,4]},{"1814514":[64]},{"1814516":[4]},{"1814518":[63]},{"1814520":[36,64,232]},{"1814524":[117]},{"1814526":[58]},{"1814528":[79,249,182,89,8,20,40,182,228,60,10,88,145,97,249,67,174,88,79,176,28,227,140,83,208,139,240,7]},{"1814557":[254,2,188,199,58,241,14,255,8,247,8,63,192,127]},{"1814572":[255]},{"1814574":[254,1]},{"1814578":[160]},{"1814582":[18]},{"1814584":[8]},{"1814586":[130]},{"1814588":[240]},{"1814590":[184]},{"1814592":[64,255,2,255,5,255,42,255,81,191,59,31,53,191,207,255]},{"1814609":[191]},{"1814611":[255]},{"1814613":[255]},{"1814615":[255,96,255,160,95,64,191,32,239]},{"1814633":[32,32,122]},{"1814637":[48]},{"1814639":[58,254]},{"1814642":[255]},{"1814644":[255]},{"1814646":[190]},{"1814648":[31]},{"1814650":[59]},{"1814652":[189]},{"1814654":[207]},{"1814656":[23,255,191,255,95,255,255,255,87,255,255,255,255,255,255,245]},{"1814673":[255]},{"1814675":[255]},{"1814677":[255]},{"1814679":[255]},{"1814681":[255]},{"1814683":[255]},{"1814685":[255]},{"1814687":[245]},{"1814691":[10]},{"1814693":[16]},{"1814695":[3]},{"1814697":[7]},{"1814699":[153]},{"1814701":[63,10,255,191]},{"1814706":[191]},{"1814708":[95]},{"1814710":[255]},{"1814712":[215]},{"1814714":[255]},{"1814716":[255]},{"1814718":[255]},{"1814720":[127,255,223,221,239,255,255,253,255,255,253,247,255,186,85,250]},{"1814737":[255,32,221]},{"1814741":[239]},{"1814743":[253]},{"1814745":[255]},{"1814747":[245]},{"1814749":[186]},{"1814751":[80]},{"1814753":[107,2,23,16,255,2,255]},{"1814761":[127,10,255,69,255,175,255,127]},{"1814770":[223]},{"1814772":[255]},{"1814774":[255]},{"1814776":[255]},{"1814778":[255]},{"1814780":[255]},{"1814782":[255]},{"1814784":[238,155,149,198,255,170,85,90,250,171,212,106,170,231,170,119,96,202,8,132]},{"1814805":[170,160,80,4,174,1,65,16,178,171,171,21,207,115,215,85,255,15,95,81,255,190,255,77,255,221,85,175,32,247]},{"1814836":[255]},{"1814838":[95]},{"1814840":[255]},{"1814842":[255]},{"1814844":[255]},{"1814846":[255,170,58,73,68,186,160,213,90,175,139,156,43,190,119,120,127,112,132,140,1,1,42,170,90,90,99,235,105,106,215,247,255,127,115,255,254,255,117,255,245,213,23,255,150,215,15,175,143,7,255]},{"1814898":[255]},{"1814900":[255]},{"1814902":[223,10,255]},{"1814906":[255,40,255,80,255,120,192,183,18,207,101,31,170,245,149,122,191,104,255,64,86,2,104,136,82,98,197,197,170,170,21,21,191,191,255,255,253,253,23,255,205,189,122,218,95,95,239,239,215,215,191,191,255,87,255]},{"1814962":[159,2,255,5,255,160,255,16,255,40,255,64,255,168,19,236,169,80,93,240,254,99,127,128,253,56,149,4,254,254,19,21,175,172,95,94,254,255,127,127,199,215,235,235,1,255,255,253,252,254,174,174,157,157,255,255,255,253,255,239,255,255,252,3,254,1,254,81,255,98,255]},{"1815034":[255,2,255]},{"1815038":[255]},{"1815040":[11,1,228,161,94,88,111,40,85,52,205,156,62,76,201,196,253,241,95,209,167,104,81,216,74,44,67,182,179,204,42,214,250,245,245,251,122,249,253,120,60,62,191,158,236,207,215,230,231,24,251,4,249,6,60,195,62,193,156,99,207,48,229,26,48,148,16,177,80,56,8,42,43,157,110,30,230,22,15,59,254,169,214,54,130,35,127,73,226,83,207,63,62,1,201,184,233,130,126,152,115,132,201,44,123,128,95,6,37,20,190,6,200,119,78,241,199,120,129,254,131,124,11,244,5,250,8,245,255,214,127,124,191,47,143,166,206,38,31,191,15,47,113,72,42,174,130,16,208,254,169,216,145,247,224,63,208,207,191,247,254,255,126,253,238,110,231,150,239,7,63,111,207,31,254,6,252,3,252,3,62,193,174,65,174,97,15,240,223,32,225,30,153,29,213,66,154,158,223,136,223,139,237,76,110,34,151,68,58,4,41,67,31,22,172,32,159,201,70,1,27,68,167,196,193,71,96,92,114,119,36,38,237,173,25,18,205,144,47,7,135,120,99,190,5,250]},{"1815287":[255]},{"1815289":[255]},{"1815291":[255,16,239,200,127,243,84,243,248,227,192,254,200,118,96,103,32,189,192,167,3,168,4,4,12,53,29,56,32,137,88,202,90,98]},{"1815326":[88,184,84,255,212,251,221,250,209,79,121,230,186,20,225,30,249,5,251,4,223,32,239,16,239,144,238,17,254,161,29,226,93,226,95,55,95,30,63,207,127,255,127,236,232,253,232,210,144,245,8]},{"1815378":[65,161,49,144,3,2,22,30,26,14,28,45,121,11,182,159,148,222,75,175,222,117,234,237,246,205,220,131,232,55,190,65,213,42,251,4,95,40,255]},{"1815418":[235,52,223,96,191,192,135,3,14,128,85,34,160,76,70,150,158,46,47,92,155,79,33,121,199,112,8,2,29,6,53,13,97,16,131,35,84,112,225,92,196,190,5,248,2,249,7,242,14,229,92,136,175,1,252,2,122,132,245,8,235,18,210,33,175,66,31,132,187,46,19,135,120,9,4,14,240,138,135,158,224,152,16,2,60,150,71,235,4,131,74,241,147,13,198,116,186,55,68,220,124,60,75,180,128,241,215,40,27,250,76,179,54,217,253,163,252,20,253]},{"1815538":[241,10,253,2,227,20,255]},{"1815546":[247,8,239,16,60,67,112]},{"1815554":[103,130,88,20,79,11,57,22,14,22,55,191,149,63,20,15,179,35,144,161,221,237,100,141,52,156,160,168,42,193,20,251,51,78,129,120,238,29,82,177,164,11,248,207,42,149,231,16,111,144,249,6,229,24,178,64,128,66,144,7]},{"1815615":[126,89,8,234,42,174,28,14,60,244,62,127,63,188,190,86,119,60,138,102,98,32,54,64,178,226,40,193,2,128,195,168,136,12,243,84,189,82,223,240,61,40,223,130,61,131,63,33,222,213,32,225,10,227,12,129,78,195,20,1,62,1,124]},{"1815679":[254,203,24,74,24,247,43,99,1,243,55,13,59,240,34,114,38,33,13,174,151,3,24,201,248,51,12,140,194]},{"1815709":[19,112,229,29,226,159,120,8,205,252,21]},{"1815721":[223,131,119,7,246,237,175,199,40,207,32,197,58,221,34,221,32,244,8,241,8,225,18,64,24,231,30,214,14,74,30,223,26,80,28,81,24,71,18,21,189]},{"1815763":[27]},{"1815765":[11,150,172,38,24,138,158,172,150,138,154,10,253,8,252,43,237,166,83,16,235,183,101,156,107,171,118,242,5,240,7,225,22,243,12,199,60,227,28,206,49,255]},{"1815808":[138,137,192,146,30,7,201,79,165,220,78,158,221,255,85,85,89,97,147,3,171,151,75,7,227,154,1,247,145,170,42,110,84,42,44,248,200,82,30,180,153,252,16,216,243,38,128,187,100,145,244,2,201,37,136,75,193,7,128,47,81,29]},{"1815871":[127,96,160,23,39,5,53,76,252,5,79,91,143,191,191,23,23,125,189,72,239,180,241,119,115,117,122,160,175,64,247,232,239,66,165]},{"1815907":[56,142,128,132,138,143,10,20,116]},{"1815917":[72]},{"1815919":[248,66,221,128,175,78,53,4,127,5,245]},{"1815931":[171]},{"1815933":[255]},{"1815935":[255,181,196,125,126,3,120,246,224,84,210,84,48,164,169,105,124,195,199,131,255,247,254,63,207,87,199,255,239,85,253,143,191,56,177,2,129,73,8,48,6,184,196,16,196,3,12,4,211,8,71]},{"1815987":[255,49,199,48,235,56,23,16,191,2,245]},{"1815999":[239,47,159,58,30,57,150,155,133,183,206,186,61,215,117,79,67,241,255,245,255,239,181,188,134,249,207,245,206,171,250,255,184,1]},{"1816034":[16,32,72,98,219,1,115,129,55,130,6,6,64,160]},{"1816049":[255,4,251,141,17,62,195,58,70,49,255,33,221,79,251,206,32,143,177,255,98,27,2,247,196,58,133,255,12,122,45,236,154,121,6,243,29,161,89,239,19,195,63,75,179,163,119,41,10,150,135,16,31,30,27,24,31,32,62,4,62,72,94,116,179,120,247,224,111,224,255,224,215,192,255,192,63,128,255,109,186,91,162,27,232,23,241,157,193,204,96,185,197,253,5,93,222,127,254,250,249,253,243,247,251,255,227,245,205,255,207]},{"1816161":[202]},{"1816163":[196,5,9,66,19,9,202,32,68,73,174,5,64,33,116,1,250,2,245,12,226,4,121,24,167,16,111,48,207,239,39,95,119,159,255,111,127,95,255,187,219,189,253,191,215,95,151,15,7,223,211,207,229,159,78,255,192,127,192,63,128,136,192,168,112,12,240,90]},{"1816232":[49,128,187,4,61,2,127]},{"1816240":[39,240,15,128,3,76,5,250,14,113,96,155,64,189,40,215,211,119,183,166,207,223,255,255,254,244,255,254,255,255,159,127,219,107,247,180,239,135,255,95,253,245,254,84,255,171,159,1,4,160,42,81,88,34,160]},{"1816296":[2,8,171]},{"1816300":[84]},{"1816302":[254]},{"1816304":[83,20,132,42,133,90,95,160,244,3,84,171,171,84,129,126,188,22,252,249,255,85,255,184,255,241,255,251,255,255,254,255,254,23,255,216,255,85,255,184,255,241,255,251,255,255,255,65,34,207,32,7]},{"1816357":[254]},{"1816359":[87]},{"1816361":[47]},{"1816363":[69]},{"1816365":[35,190]},{"1816368":[16,4,216,32,1,84,168,16,208,33,186,65,220,35,65,190,247,155,255,180,61,82,63,170,255,196,255,218,255,88,191,191,95,147,255,180,94,49,254,171,245,206,255,218,255,88,127,63,168,69]},{"1816419":[79,163,76,1,118,10,245]},{"1816427":[255]},{"1816429":[255,64,215,18,33,176,4,49]},{"1816438":[137,34,10,196]},{"1816443":[218]},{"1816445":[88,40,87,223,32,255,128,223,32,251,60,125,242,255,34,255,48,255,240,224,31,160,223,112,143,188,123,243,124,187,102,244,59,254,241,63,192,95,160,175,80,71,168,142,97,68,187,11,244,1,222,31]},{"1816498":[95,128,143]},{"1816502":[83,40,28,96,68,34,11,48,33,208,85,175,239,17,213,40,127,144,247,10,223,32,255]},{"1816526":[246,5,6,252,3,253,3,255,129,109,1,252,161,94]},{"1816541":[255,173,86,251]},{"1816546":[252,3,254,1,254,2,255]},{"1816554":[126,129,255]},{"1816558":[83,168,252]},{"1816562":[252,1,252]},{"1816566":[108]},{"1816568":[252]},{"1816570":[94]},{"1816572":[255]},{"1816574":[86]},{"1816576":[82,98,162,27,211,229,251,80,211,18,235,213,213,59,119,24,48,143,19,239,1,191,128,47,128,109,144,174,56,215,189,90,238,16,253,3,254,1,255]},{"1816616":[255]},{"1816618":[127]},{"1816620":[239]},{"1816622":[199,48,1]},{"1816626":[168,2,54,1,43]},{"1816632":[65]},{"1816634":[174]},{"1816636":[214]},{"1816638":[74,16,95,239,255,253,255,254,245,95,254,235,126,220,255,238,111,122,48,255]},{"1816659":[253]},{"1816661":[254]},{"1816663":[85]},{"1816665":[234,43,127,85,255,111,111,32,15,2,127,1,255,170,255,21,255,162,213,17,170,21,16,207]},{"1816690":[255]},{"1816692":[255]},{"1816694":[255]},{"1816696":[255]},{"1816698":[255,42,255,85,127,239,255,254,247,94,187,175,254,159,255,184,185,209,255,236,245,50]},{"1816721":[254,2,86,65,235,174,190,87,255,191,191,127,255,255,255,1,255,169,253,20,254,97,81,71,174,110,76,19,128,207]},{"1816752":[255]},{"1816754":[255,2,255,1,255,174,255,81,255,179,255,127,255,255,251,174,235,239,247,238,255,210,254,144,244,160,184,16,84,2,1,171,187,251,85,247,255,255,126,254,255,255,255,255,255,255,85,254,4,84,25,171,45]},{"1816808":[110,136,95,1,239,2,255,1,255,1,255,171,255,84,255,255,254,119,255,254,255,253,255,254,255,236,252,77,253,128,16,130,160,64,66,171,1,23,42,255,87,252,255,255,255,255,255,127,127,127,253,63,254,255,213,255,16,170,178,1,127,34,127,197,191,94,63,214,255,169,255,42,255,85,254,254,255,221,255,58,63,33,255,41,255,86,255,213,252]},{"1816898":[16]},{"1816900":[132,4,46,127,21,63,168,253,80,255,16,119,255,191,255,127,251,255,209,255,234,255,86,255,170,255,200,255,63,239,255,77,255,126,255,46,255,149,255,171,255,85,255,191,255,16,255,50,255,129,255,209,255,106,253,86,255,170,119,200,129,1,46,63,90,255,80,249,96,243]},{"1816971":[213,24,234,18,200,254,255,208,255,160,255,14,243,132,243,32,245,24,234,18,202,255,255,255,111,255,95,251,247,251,127,247,247,247,239,239,231,255]},{"1817010":[255,144,255,160,245,10,247,136,213,42,234,21,192,63,119,255,149,253,42,186]},{"1817031":[85]},{"1817033":[232,16]},{"1817036":[117]},{"1817038":[157,6,8,255,194,127,197,191,170,255]},{"1817049":[232,50,16,117,69,181,179,255,247,255,255,191,255,255,255,255,255,221,255,239,207,255,213,255,8,253,2,250,5,85,170,232,23,34,221]},{"1817085":[255,12,251,112,226,88,192,12,164,2,10,5,3,129,1,90]},{"1817102":[80,5,148,234,34,224,89,250,14,3,5,7,171,131,94,91,255,250,235,103,241,231,254,249,255,242,253,253,215,253,251,254,250,85,230,153,214,45,161,94,4,255,2,255,40,215,4,251,5,255,119,54,119,60,47,31,46,6,45,26,165,139,161,204,66,172,58,53,192,10,97,86,80,75,234,79,216,141,244,199,176,231,183,166,62,128,235,147,239,3,223,10,253,137,223,198,251,161,18,237,129,127,20,239,161,254,144,255,114,255,24,255,28,255,64,64,240,168,208,85,244,222,206,90,187,110,178,113,86,182,181,105,132,32,239,116,205,16,119,15,55,27,52,144,50,5,107,151,35,81,245,206,146,161,15,34,27,66,144,94,45,42,100,155,114,143,114,141,51,206,140,243,154,229,30,229,207,242,48,36,54,160,45,74,17,23,171,2,139,3,82,138,61,129,201,134,157,2,123]},{"1817302":[81,28,250,229,116,122,35,36,193,135,130,219,246,81,215,135,190,82,255,174,251,6,252,4,255,1,76,183]},{"1817331":[255]},{"1817333":[255,236,181,22,249,128,255,220,251,250,125,207,192,107,65,24]},{"1817350":[89,3,27,2,23,4,48,13,100,12,215,117,85,146,161,99,96,228,224,97,107,227,92,223,25,131,118,104,145,173,103,156,224,31,100,159,231,27,216,40,133,125,61,194,185,70,127,128,255]},{"1817400":[127,128,241,14,248]},{"1817406":[236,19,155,10,148,149,177,124,218,150,72,100,146,80,93,192,85]},{"1817424":[129,64,198,101,31,5,48,88,13,97,5,229,2,2]},{"1817439":[42,196,125,72,188]},{"1817445":[232,23,200,87,216,63,128,255]},{"1817454":[213,42,125,130,252]},{"1817460":[233,16,199,35,202,135,58,63,253,127,213,255,97,223]},{"1817475":[95]},{"1817477":[170]},{"1817479":[128,64,64,88]},{"1817484":[249]},{"1817486":[85]},{"1817488":[62,160,95,128,170]},{"1817494":[192,32,224,32,5,167]},{"1817501":[4,168,170,95,64,127]},{"1817508":[255]},{"1817510":[95,224,255,64,93,162,251,4,85,2,97,31,32,255,85,255,95,191,223,63,88,255,251,255,253,255,9,14,168,132,162,223,136,16,16,16,1]},{"1817548":[128]},{"1817550":[16]},{"1817552":[200,31,52,13,1,196,152,6,136,156,64,234]},{"1817565":[87,138,239,28,5,2,202,189,70,249,6,235,20,85,170,168,87,16,101,12,56]},{"1817587":[129,56,195,233,255,99,239,21,255,168,255,154,255,232,255,128,253]},{"1817605":[255,170]},{"1817608":[17]},{"1817610":[49,16,136,2]},{"1817616":[151,128,127,2,255]},{"1817622":[170]},{"1817624":[17]},{"1817626":[33,154,2,85,234,255,151,104,253,2,255]},{"1817638":[255]},{"1817640":[255]},{"1817642":[101,154,168,87]},{"1817647":[21]},{"1817649":[127,128,255]},{"1817653":[255,255,255,255,255,101,239,168,255,234,255,34,254,48,93]},{"1817669":[190,170,17,85]},{"1817674":[15,4,6]},{"1817678":[20]},{"1817680":[220,48,238,155,255,69,187]},{"1817688":[85]},{"1817690":[43,244,100,249,190,235,253,3,109,147,190,65,255]},{"1817704":[255]},{"1817706":[11,212,6,153,20,65]},{"1817713":[254,32,238]},{"1817717":[255,238,255,255,255,43,251,102,255,190,255,55,7,97,85,64,206,138,117,85,10,255]},{"1817740":[175]},{"1817742":[21]},{"1817744":[177]},{"1817746":[78,123,31,149,255,37,95]},{"1817754":[255]},{"1817756":[175,80,191,234,1,47,149,186,206,176,255]},{"1817768":[255]},{"1817770":[255]},{"1817772":[175,80,21,64,33,70]},{"1817779":[15,64,31,138,255,245,255,255,255,175,255,191,255,76,38,95,19,9,146,200,103,49,8,143]},{"1817804":[255]},{"1817806":[87]},{"1817808":[135,132,4,168,255,155,83,79,23,46,255,112,255]},{"1817822":[255,168,148,127,132,123,88,175,103,140,137,110,143,112,255]},{"1817838":[87]},{"1817840":[254]},{"1817842":[248,4,16,105,32,3,129,7,143,255,255,255,255,255,40,104,128,192,128,192,130,104,81,6,255]},{"1817868":[247]},{"1817870":[255]},{"1817872":[215,215,191,255,127,255,253,127,190,239,220,43,255,12,255,10,64,191]},{"1817891":[127,64,191,234,21,87,168,247,8,243,4,245]},{"1817905":[127]},{"1817907":[191]},{"1817909":[127,130,255,81,255,247,255,251,255,255,255,159,175,48]},{"1817924":[4,8,171,4,85,130,255]},{"1817932":[255]},{"1817934":[255]},{"1817936":[112,239,255,239,251,255,85,255,171,255,144,111,25,230,255,170,16,64,16,239,12,241,174,80,214,41,255]},{"1817964":[255]},{"1817966":[85,8,16,255,16,255,4,255,170,255,84,255,255,255,255,255,247,255,247,236,106,71,54,24,250,160,85,78,255]},{"1817996":[247,17,255,11,23,255,141,229,239,237,91,91,146,27,151,127,166,196,52,228,4,25,59,134,24,247,164,176,231,204,168,105,91,241,235,235]},{"1818033":[247,40,255]},{"1818037":[255,8,255,1,119,150,255,6,255,20,207,217,204,49,18,117,46,233,8,251,88,254,153,149,18,247,117,52,247,235,229,159,226,91,228,191,128,31,96,95,160,255,129,8,8,17,145,104]},{"1818086":[160,96,64,64,193,192,130,128,132,132,7,254,14,254,127,234,159,246,63,212,63,200,127,232,122,93,223,72,235,8,214,86,239,14,246,23,189,168,243,165,251,147,111,215,131,35,96,66,129,96,2,98,227,180,162,242,142,235,160,190,124,106,191,180,62,110,221,245,92,92,95,87,121,120,32,223,128,127,34,223,129,126]},{"1818169":[254,67,190]},{"1818173":[249,5,247,233,77,187,39,241,15,119,143,191,15,239,223,207,191,255,159,236,205,126,255,254,29,94,63,53,151,59,127,125,255,127,127,16,14,130,132]},{"1818213":[46,166,168,197,168,203,176,141,112,159,128,32,215]},{"1818227":[191,192,61,64,63,8,255,64,255,128,255,32,255,42,255,42,245]},{"1818245":[255,234,255,247,250,63,241,191,87,255,238,42]},{"1818258":[170,128,192,192,4,238]},{"1818265":[242,224,241,192,215,238,238,255]},{"1818274":[127]},{"1818276":[3,60]},{"1818279":[17]},{"1818281":[13,32,78]},{"1818285":[104,238,17]},{"1818289":[255,170,117,252,63,21,251,13,255,14,255,40,255,17,255,25,247,51,249]},{"1818309":[255,136,255,20,247,186,217,84,251,255,226,209,192,213,224,4,4,176,56,8,16,8,152]},{"1818333":[80]},{"1818335":[226,63]},{"1818338":[29,6,251]},{"1818342":[129,70,8,239,8,103]},{"1818349":[175]},{"1818351":[29,192,63,194,63,4,251,246,207,231,255,99,255,175,255,29,255,250,246,220,254,108,253,192,191,18,255,185,175,193,124,106,254,243,160,222,2,239,193]},{"1818391":[128,34,48,128,169,192,65,192,234,95,1,252,1,127,3,63,64,199,8,128,86,73,183,64,149,160,95,2,253,128,126,64,255,40,223,22,255,180,255,20,255,63,251,127,251,251,117,247,254,191,117,21,255,131,255,128,126,127,59,123,81,113,33,246]},{"1818456":[53]},{"1818458":[21]},{"1818460":[131,128]},{"1818465":[239,174,1,222]},{"1818470":[255]},{"1818472":[255]},{"1818474":[127,128,127,128,62,193,16,43,80,175,33,222]},{"1818487":[255]},{"1818489":[255,128,255]},{"1818493":[127,192,255,255,219,223,238,255,255,255,255,255,255,255,255,255,223,213,255,223,203,207,206,255,251,255,81,255,175,255,5,223,2,213,128,48,207,48,69,4,160,174,1,80,138,250]},{"1818540":[253,2,127,128]},{"1818545":[251,138,116,91,164,80,175,37,218,5,250]},{"1818557":[255]},{"1818559":[127,243,80,247,246,255,236,255,232,255,255,255,254,143,127,223,239,94,241,254,255,253,238,255,104,255,255,255,30,15,15,207,5,161,66,1,254,2,253,128,95]},{"1818601":[255,224,5,240,11,250,5,189,64,1,242,2,236,32,200]},{"1818617":[255,26,228,4,251]},{"1818623":[255,255,4,255,16,223,116,255,246,223,144,255,250,254,255,254,251,12,247,52,211,116,215,254,247,176,159,251,254,254,190,254,122,251,8,203,52,171,80,1,222,111,160,4,91,65,174,129,20,247]},{"1818674":[195,24,135,88,33,214,31,224,164,90,16,239,106,145,127,168,253,16,218,152,80,129,170,69,64,45,64,221]},{"1818703":[255,215,255,255,255,255,255,255,255,255,255,255,255,191,255,255,255,215,168,239]},{"1818724":[103,32,255]},{"1818728":[255]},{"1818730":[255]},{"1818732":[255,98,255]},{"1818736":[255,87,255,255,255,223,255,255,255,255,255,255,255,157,255,255,240,32,85]},{"1818756":[138,21]},{"1818759":[215]},{"1818761":[23,10,255]},{"1818765":[255,2,255,255,255,255,255,255,255,255,255,255,255,241,255,255,255,125,255,223,14,255]},{"1818788":[255,32,255]},{"1818792":[255,168,255,14,255]},{"1818798":[255,130,255,241,255,255,255,223,255,255,255,87,255,241,255,255,255,125,64,5,80,163]},{"1818821":[23,2,255]},{"1818825":[247,162,255]},{"1818829":[255]},{"1818831":[119,255,255,255,255,255,255,253,255,255,254,92,255,255,255,221,255,255,170,255,4,255,168,255,2,254,9,255,163,255]},{"1818862":[255,170,255,85,255,251,255,87,255,253,255,246,255,92,255,255,119,221,16,127,169,253,80,255]},{"1818887":[127,65,62,128,156]},{"1818893":[254,2,253,238,255,86,255,170,255,80,127,105,190,177,188,160,254,2,255,255,145,255,171,255,85,127,47,127,150,190,46,254,94,255,255,255,110,253,86,255,170,127,208,62,105,156,115,254,161,253,2]},{"1818945":[255]},{"1818947":[253]},{"1818949":[250,11,80,21,8,251,128,215,32,255]},{"1818960":[168,255]},{"1818963":[253,128,250,11,91,149,29,251,251,215,247,255,255,255,87,255,255,255,127,255,255,95,223,127,255,255,255,255,255,255,168,253,2,250,133,80,175,136,119,128,127,32,223]},{"1819007":[255,5,128,45]},{"1819012":[95]},{"1819014":[117,2,248,7,225,29,134,123,164,84,5,133,47,45,95,95,255,125,255,248,255,193,254,130,255,4,255,255,253,255,255,255,125,247,248,255,195,220,131,248,12,80,128,127,2,253]},{"1819061":[255,130,127,7,255,31,255,123,255,92,255,125,10,220,1,237,18,161,85,66,170,68,95,170,191,80,239,125,122,251,208,255,168,255,1,255,2,228,68,234,187,64,249,240,250,210,241,168,186,11,84,23,168,255]},{"1819116":[238]},{"1819118":[86,32,14,245,35,223,18,255,95,255,191,255,255,255,255,255,239,223,252,2,130,85,64,170]},{"1819143":[2,168,191,64,255,128,255,2,253,255,233,253,40,255]},{"1819158":[253]},{"1819160":[232,168,192,242]},{"1819165":[63,2,255,233,234,42,85,21,170,255]},{"1819176":[255]},{"1819178":[205,192,128,64,2]},{"1819184":[2,255,87,255,191,255,255,255,255,255,63,255,63,255,253,255,107,214,89,122,116,148,225,175,215,159,226,170,128,192,40,224,223,94,154,85,85,171,79,241,216,224,77,247,71,247,71,127,95,247,248,117,190,63,254,255,223,95,255,255,159,159,63,63,128,255,141,199,65,129,1,129,167,39]},{"1819259":[128,104,232,192,192,186,170,71,191,4,4,24,248,248,248]},{"1819275":[6]},{"1819277":[4,2,4,185,67,187,68,69,251,251,27,5,141,255,249,253,249,253,251,83,84,4,67,190,255,230,255,252,253,254,255,254,255,254,255,7,248,239,251,65,65,29,29,115,113,1,1,3,3,1,1,144,197,56,166,2,62,42,63,128,143,178,191,16,7,18,23,235,68]},{"1819347":[161,128,161,225,90,64,168,89,191,229,135,197,255,125,67,157,131,223,65,69,129,166,64,185,81,133,117,253,37,56,255,125,254,221,62,222,191,255,95,254,71,250,111,250,39,132,159,62,204,208,160,28,60,110,14,143,191,148,197,133,167,129,249,212,7,113,23,86,186,79,147,143,83,133,248,23,233,231,153,28,221,6,119,158,62,197,87,212,167,229,229,102,103,122,135,83,161,121,129,161,64,186,114,91,179,58,216,217,185,1,255,171]},{"1819460":[68,68,85,85,255,255,170,34]},{"1819472":[84,255]},{"1819475":[255,85,187,255,255]},{"1819481":[136,85,119,255,255,255,255,84,84]},{"1819491":[255,238,255,170,255,255,255,255,255,255,255,255,255,171,255,255,255,17,17,85,85,119,119,136,136]},{"1819520":[18,252,212,89,86,92,55,231,151,6,59,36,194,133,105,63,69,241,91,170,89,173,224,7,32,39,165,142,147,240,190,201,74,68,76,169,234,240,224,240,128,177,228,254,113,224,239,233,187,255,230,191,31,7,31,15,254,175,89,70,159,141,14,18,169,3,104,41,118,228,205,109,210,82,55,50,110,76,223,158,86,85,150,178,151,75,124,243,247,15,109,136,209,17,224,38,168,2,77,13,32,163,31,159,61,63,127,127,255,255,255,255,253,255,244,248,95,227,32,224,226,98,215,215,174,174,89,89,85,255,234,64,196,196,18,127,255,85,128,128,42,42,133,133,170,127,64,191,197,59,255,146,170]},{"1819674":[127,255,255,255,127,255,42,170,64,63,254,255,237,255,255,255,255,255,213,255,250,255,85,255,255,63,1,1,18,18,255,255]},{"1819708":[42,42,5,5,119,255,255,68,69,69,117,245,255,127,1]},{"1819724":[128,128]},{"1819728":[136,255,68,187,69,186,255,127,128,8,254,254,255,255,255,255,136,136,68,187,255,255,138,255,255,255,255,255,127,255,255,255,119,255,255,187]},{"1819766":[117,117,247,247,1,1,128,128]},{"1819776":[127,255,187]},{"1819780":[85,85,31,10,128,251,225,191,227,125,241,191,128,255]},{"1819795":[255,85,170,224,234,26,4,82,128,26,2,66,128,128,128]},{"1819811":[255,255,255,255,255,255,255,255,255,253,255,255,255,127,255,255,255]},{"1819830":[21,21,251,251,127,127,255,255,127,127,254,254,190,28,91,93,136,189,188,89,205,141,243,151,193,201,1,255,24,227,95,162,122,194,207,148,110,48,20,10,90,116]},{"1819874":[28,229,249,251,253,255,123,255,255,255,251,251,163,243,255,255,251,227,6,2,7,7,231,231,199,199,237,237,215,223,251,255,251,226,64,64,80,95,127,255,104,160,64]},{"1819918":[120,168]},{"1819921":[255,226,29,68,191,127,112,128,10,151,55,63,63,135,47]},{"1819937":[4,64,29,251,255,47,127,255,255,255,255,127,127,255,255,251,255,255,191,4,4,208,80,117,117,72,72,192,64,80,80,183,250,191,42]},{"1819975":[255,255,85]},{"1819980":[10,10]},{"1819984":[8,243,42,213]},{"1819989":[255,255]},{"1819992":[170,1,255,255,255,255,255,255,12,69]},{"1820003":[213,255,255,255,255,255,255,255,255,245,255,255,255,186,247,255,255]},{"1820024":[254,254]},{"1820028":[10,10]},{"1820032":[247,40,28,163]},{"1820039":[255,255,85]},{"1820044":[2,2]},{"1820048":[49,70,163,92,4,255,255]},{"1820056":[170,64,255,255,255,255,255,255,168,238]},{"1820067":[92,251,255,255,255,255,255,255,255,253,255,255,255,17,238,255,255,4,4]},{"1820088":[191,191]},{"1820092":[2,2]},{"1820096":[76,237,161,190,68,68,22,255,255,94]},{"1820107":[1,2,2,1,3,253,130,250,69,69,187,255,22,161,10,255,254,254,254,255,253,15,12,64,69,254,255,233,255,255,255,255,255,253,255,254,255,243,188,191,31,1,1,22,22,245,245]},{"1820156":[3,3,1,1,215,3,15,135,77,73,207,88,15,23,223,212,15,56,159,136,52,10,128,121,104,180,45,179,32,114,115,147,71,231,199,23,227,225,7,118,207,253,219,251,223,253,220,252,168,248,168,248,62,195,249,255,48,63,100,122,162,191,51,47,69,127,103,95,255,63,175,95,199,47,239,87,255,111,255,213,255,207,255,21,255,255,215,255,169,237,16,255,146,255,32,255,16,255,232,255,63]},{"1820258":[39,216,81,46,168,215,2,109,202,21,224,47,2,21]},{"1820273":[255,40,255,70,255,111,255,125,255,255,255,223,255,255,255,255,92,255,255,255,253,255,255,255,255,255,255,255,255,255,79,92,92,254,255,253,253,127,255,255,255,69,255,8,253,48,255,92,163,254]},{"1820324":[253,2,127,128,255]},{"1820330":[69,186,8,247,128,79,163,255]},{"1820339":[255,2,255,128,255]},{"1820345":[255,186,255,247,255,207,255,255,81,255,251,253,94,255,255,85,254,251,255,245,255,255,255,16,80,187,251,94,94,240,248,255,255,214,246,63,127,84,254,16,175,187,4,92,163,240,15,84,170,210,45,53,202,84,171,175,255,4,255,163,255,15,255,170,255,45,255,202,255,171,255,112,31,58,69,253,18,255,234,119,255,255,255,223,251,234,249]},{"1820433":[208]},{"1820435":[64]},{"1820437":[16,234,234,140,156]},{"1820443":[250,180,248,87,251,64,239,128,127]},{"1820453":[239,234,21,4,251]},{"1820459":[255,144,105,64,185,47,127,63,191,239,255,21,255,251,255,255,255,111,251,189,251,1,254,56,199,108,147,255,192,245,10,255,128,111,208,191,232,1]},{"1820498":[1,1,24,16]},{"1820503":[192]},{"1820506":[128,128,208,208,104,232,46,209]},{"1820515":[254,2,253]},{"1820519":[63]},{"1820521":[255,128,127,64,191,40,215,208,255,255,254,253,255,63,255,255,255,127,255,191,255,215,255,168,247,128,127]},{"1820549":[255,224,223,64,223,186,197,244,11,254,129,32]},{"1820566":[128,128,192,192,192,192]},{"1820574":[128,128,127]},{"1820578":[126,129,239,16,135,120,138,181,128,127]},{"1820589":[255,128,127,128,255,129,255,16,255,120,255,21,127,63,255,255,255,127,255,207,251,103,223,175,255,1,255,8,255]},{"1820619":[255]},{"1820621":[255,128,127,203,139,119,21,175,42,1]},{"1820632":[8,8]},{"1820640":[116,138,202,36,213,42,255]},{"1820648":[246,9,95,160,63,192,5,250,1,254,49,238]},{"1820661":[255]},{"1820663":[255,1,255,160,255,192,255,250,255,255,255,239,139,137,198,83,140,144,102,172,99,43,255,21,255,255,255,171,1,166,134,70,4,144]},{"1820698":[169,33,43,10,21,1]},{"1820705":[191,206,49,111,182,153,98,102,153,102,152,245,10,254,1,64,191,32,255]},{"1820725":[249,70,251,144,255,137,254]},{"1820733":[255]},{"1820735":[255]},{"1820737":[127]},{"1820739":[255]},{"1820741":[255]},{"1820743":[255]},{"1820745":[255]},{"1820747":[255]},{"1820749":[255]},{"1820751":[127,255,255,255,255,255,255,247,255,255,255,253,255,254,255,247,255,255,128,255]},{"1820772":[255]},{"1820774":[255,8,255]},{"1820778":[255,2,255,1,255,8,255,127,255,255,255,255,255,247,255,255,255,253,255,254,255,247]},{"1820801":[255]},{"1820803":[255]},{"1820805":[255]},{"1820807":[255]},{"1820809":[255]},{"1820811":[255,16,255,16,239,255,255,85,255,251,255,85,255,171,255,5,255,186,255,53,207,255]},{"1820834":[255,170,255,4,255,170,255,84,255,250,207,117,255,250,255,255,255,85,255,251,255,85,255,171,255,5,223,138,255,5]},{"1820865":[255]},{"1820867":[255]},{"1820869":[255]},{"1820871":[255]},{"1820873":[255]},{"1820875":[255]},{"1820877":[255,128,127,234,255,212,255,170,255,81,255,234,255,85,255,170,255,149,255,255,21,255,43,255,85,255,174,255,21,255,170,255,85,255,234,255,234,255,212,255,170,255,81,255,234,255,85,255,170,127,149,4,218,34,189]},{"1820933":[254,2,253]},{"1820937":[254,10,245,24,231,8,245,132,222,34,191,128,254,2,255,128,254,26,247,24,231,8,253,223,95,159,191,255,127,255,255,255,127,247,247,255,231,255,255,218,165,189,66,254,129,253,2,254,129,245,10,231,24,245,10,94,129,189,2,94,129,252,3,94,129,189,2,95,160,191]},{"1821008":[95,222,191,189,95,222,255,252,95,222,191,189,95,255,191,191,254,255,253,255,254,255,252,255,254,255,253,255,255,255,255,255,129,127,2,255,129,127,3,255,129,127,2,255,160,95]},{"1821055":[255,152,123,37,247,26,234,177,123,74,175,53,207,154,123,181,71,251,156,252,38,254,11,241,53,250,15,245,5,254,154,253,5,159,224,45,210,15,224,63,64,26,160,15,192,159,224,15,64,123,252,254,253,238,255,123,255,191,255,207,255,127,255,79,255,160,191,68,251,170,253]},{"1821127":[251,128,255,65,254,171,250,4,251,160,239,68,127,174,251,10,247,132,255,69,255,171,255,10,63,224,48,196]},{"1821156":[174,8,14,10,132,4,69,4,175,14,206,10,143,255,251,255,245,251,253,243,251,255,250,255,244,251,241,255,4,251,25,238,183,72,117,138,207,48,253,2,127,128,49,206,4,255,27,251,187,251,127,255,207,255,255,255,127,255,59,255,4]},{"1821218":[27,14,187,8,127,10,207]},{"1821226":[255,2,127]},{"1821230":[59,10,251,255,224,255,68,255,128,255,48,255]},{"1821243":[255,128,255,196,255,136,200,40,232,128,64,172,124,134,78,36,228,143,71,171,103,207,127,79,127,79,127,95,111,87,111,79,127,71,119,71,115,159,159,63,63,23,23,187,191,25,31,51,55,16,23,180,183,224,96,192,192,232,224,84,212,254,254,204,196,239,231,75,195,10,12,2]},{"1821316":[42,42,18,16,170,170,82,80,250,250,118,120,253,251,249,251,251,251,249,251,251,251,249,251,251,251,249,247,246,255,250,251,210,251,234,251,86,255,174,255,6,255,142,255,9,9,5,1,45,41,21,17,173,173,85,85,253,253,113,113,165,39,6,1,134,23,18,2,130,66,100,68,141,73,132,6,6,119,189,165,19,15,158,240]},{"1821401":[118,192,190,11,120,7,60,54,222,229,89,111,235,240,14,87,237,158,99,120,239,124,197,253,19,254,27,238,25,255,13,191,100,255,34,191,67,253,3,84,165,128,208,4,244,46,204,134,228,151,228,23,44,71,229,5,184,84,232,180,136,196,218,244,234,212,91,60,179,213,27,39,39,100,68,166,230,207,223,231,231,87,87,191,55,7,7,218,234,191,220,27,250,49,241,25,249,40,232,200,104,40,232,136,136]},{"1821508":[170,170,85,85,63,255,5,255]},{"1821517":[95]},{"1821519":[175,255,255,255,255,255,255,255,255,255,63,255,5,95]},{"1821534":[175]},{"1821536":[119,255,255,255,85,255,170,255,192,255,250,255,95,95,175,175,136,136]},{"1821556":[170,170,85,85,63,63,5,5,160]},{"1821566":[80]},{"1821568":[201,137,97,237,73,201,74,203,77,68,97,251,71,85,105,121,157,242,247,88,218,116,251,116,80,127,255,65,87,105,127,67,113,225,255,235,243,235,211,227,119,111,231,231,231,231,231,231,150,142,22,14,31,7,60,44,152,8,14,30,138,154,140,148,191,222,63,190,127,92,63,174,148,128,65,65,140,255]},{"1821647":[254,97,8,193,96,3,64,208,102,235,235,255,255,255,140,254]},{"1821664":[255,255,255,255,255,255,255,255,127,255,190,255,115,255,254,254,183,183,31,31,191,191,25,25,148,148,65,65,140,140,1]},{"1821696":[46,46,149,21,63,63,86,87,192,240,15,170,93,93,248,111,255,255,127,127,255,255,255,254,240,192,176,26,93,98,47,151,209,255,234,255,192,255,169,255,58,250,191,191,63,127,240,240,46,46,149,149,63,63,86,86,207,202,69,5,192,64,95,95,169,168,64,64,168,168,84,84]},{"1821769":[5,250,170,85,85,1,254,254,254,255,255,255,255,255,255,5]},{"1821786":[5,175,85,170,254,255,87,255,191,255,87,255,171,255,173,173,255,255,255,255]},{"1821808":[169,169,64,64,168,168,84,84,250,168,80,80]},{"1821822":[255,254,251,63,255,62,126,4,62,43,104,233,40,33,84,84,1,254,64,32,1,32,155,129,197,234,253,124,214,246,85,171,254,87,255,255,255,255,255,255,255,255,149,253,255,255,254,255,168]},{"1821872":[223,223,223,223,126,126,20,20,106,104,9,9,1,1,255,254,99,47,33,237,227,207,81,93,251,231,169,181,219,103,57,213,164,154,166]},{"1821908":[196,178,246,48,172,98,174]},{"1821916":[76,146,14,32,255,251,239,251,127,235,255,219,231,227,135,195,199,211,151,179,85,93,87,71,181,165,183,135,125,85,95,55,173,245,79,119,96]},{"1821954":[106,34,80]},{"1821958":[168,8,128,128,128]},{"1821964":[171,171,215,87,31,31,21,55,47,47,87,223,255,127,127,255,255,127,127,255,255,255,255,255,255,255,255,255,255,127,255,255,212,127,168,255,224,224,200,200,208,208,32,32,128]},{"1822012":[171,43,87,87,8,8]},{"1822020":[32,32]},{"1822024":[160,169,104,111,189,253,55,87,255,255,255,255,255,255,255,255,249,240,255,248,237,162,203,140,247,255,255,255,223,255,255,255,89,249,151,255,127,255,212,216,8,8]},{"1822068":[32,32]},{"1822072":[166,160,104,104,144,144,63,26]},{"1822086":[8,8,31,127,209,209,255,255,104,232,255,255,255,255,255,255,247,255,127,31,255,255,255]},{"1822110":[168,87,255,255,255,255,255,255,255,255,96,127,46,255,255,255,64,64]},{"1822136":[159,31,209,209]},{"1822142":[191,23,2,1,1,7,15,11,130,138,4,244,86,86,208,209,203,213,252,254,255,248,249,252,122,241,250,10,252,250,212,42,210,40,255,255,255,255,247,255,251,251,244,247,175,255,252,255,21,5,1,1]},{"1822196":[10,10,5,1,15,6,83,82,6,7,250,177,31,40,63,80,127,106,127,40,127,234,255,108,255,234,255,172,135,159,47,207,85,31,23,151,149,63,19,23,21,63,83,83,8,240,208,208,106,224,232,104,234,192,236,232,234,192,172,172,207,191,175,223,159,127,151,127,63,255,23,255,63,255,83,255,255,175,255,21,255,43,255,5,255,55,255,69,255,139,255,5,80,255,234,255,212,255,250,255,200,239,186,255,116,255,248,255]},{"1822305":[175]},{"1822307":[21]},{"1822309":[43]},{"1822311":[5,48,23,64,5,128,11,2,5,255,255,255,255,255,255,239,255,103,255,239,255,223,255,255,255,255,199,255,239,251,249,255,121,255,255,255,95,255,252,255,117,42,255,16,255,2,251,134,255,10,255,128,255,3,255,10,255,18,213]},{"1822371":[239,4,249]},{"1822375":[121,10,245,33,94]},{"1822381":[252,128,117,197,255,239,255,249,255,249,255,245,255,255,255,252,255,253,255,245,255,255,255,237,231,255,199,255,127,255,127,253,255,255,243,170,255,4,255,138,239,48,223,128,253]},{"1822427":[255,2,223,12,255,160,95,4,251,144,103,24,255,16,111,128,255]},{"1822445":[255]},{"1822447":[243,95,255,251,255,103,255,199,239,127,255,127,255,255,255,243,255,85,255,255,255,253,255,254,255,125,255,254,255,221,251,254,247,234,251]},{"1822483":[191,2,127,1,255,130,255,1,255,38,255,9,255,64,191]},{"1822499":[255]},{"1822501":[255]},{"1822503":[255]},{"1822505":[255,12,243]},{"1822509":[251]},{"1822511":[247,191,255,255,255,255,255,255,255,255,255,255,255,251,255,247,255,198,249,171,254,65,254,235,255,81,255,170,255,80,255,170,255,57,185,124,255,191,254,20,255,190,255,95,255,175,255,87,255]},{"1822561":[255,41,215]},{"1822565":[254]},{"1822567":[255,16,239,10,245]},{"1822573":[255,2,253,255,255,214,255,253,254,255,255,239,255,245,255,255,255,253,255,179,76,175,88,223,96,239,240,207,112,191,248,22,249,166,249,108,76,212,216,160,96,16,208,184,176,96,248,235,249,249,249]},{"1822625":[255]},{"1822627":[127]},{"1822629":[255,128,127]},{"1822633":[191,32,223]},{"1822637":[255,160,95,255,255,127,255,127,255,255,255,127,127,223,255,255,255,95,255]},{"1822657":[255,184,71,84,171,234,21,208,47,226,45,240,15,232,23]},{"1822682":[24,8,56,40,48,48,139,116,1,254,3,252,1,254,2,253,8,239]},{"1822701":[239,17,222,116,255,254,255,252,255,254,255,253,255,247,231,215,207,206,239,47,255,5,250,3,255,1,254,11,255,5,255,11,247,5,255,47,10]},{"1822740":[3,2]},{"1822744":[11,10,5,1,3,2,5,1,245,10,255]},{"1822756":[253,2,127,128,245,10,254,1,253,2,254,1]},{"1822769":[255]},{"1822771":[255]},{"1822773":[255,128,255]},{"1822777":[255]},{"1822779":[255]},{"1822781":[255]},{"1822783":[255]},{"1822785":[127]},{"1822787":[255,128,95]},{"1822791":[55,160,197,84,9,154,101,189,68,255,255,253,255,255,255,255,255,255,255,255,255,223,191,223,159,255,128,255,2,255,32,255]},{"1822824":[127,10,255]},{"1822828":[191,96,187,192,255,127,255,253,255,223,255,255,255,245,255,255,255,159,255,31]},{"1822849":[239]},{"1822851":[255]},{"1822853":[255,128,247]},{"1822857":[87,66,55,160,85,16,230,142,239,68,255,255,255,125,255,255,255,253,255,255,255,255,255,239,97,255,187,255]},{"1822886":[255,138,255,168,255,2,255,10,255,1,239,158,255,68,255,255,247,125,255,87,255,253,255,245,255,254,128,63]},{"1822915":[127]},{"1822917":[255]},{"1822919":[255,1,255,162,255]},{"1822925":[95,8,255,170,63,21,127,250,255,85,255,254,255,93,255,255,255,247,255,191,21,255,234,255,5,255,170,255,1,255,162,255,160,255,8,63,234,127,149,255,250,255,85,255,254,255,93,255,95,255,247]},{"1822977":[254]},{"1822979":[255]},{"1822981":[255]},{"1822983":[127,64,255,128,253,80,255,165,255,160,254]},{"1822995":[255,160,255,208,255,170,255,86,255,170,255,80,255,255,95,255,255,255,95,255,175,255,85,255,171,255,85,255,175,254,161,255]},{"1823028":[255,160,127,208,255,170,253,86,255,170,255,80,23,160,43,70,15,230,15,208,1,250]},{"1823051":[253]},{"1823053":[255]},{"1823055":[255,23,183,43,111,15,235,15,223,129,251]},{"1823067":[253,160,255]},{"1823071":[255,255,255,249,255,253,255,255,255,255,127,255,255,255,95,255,255,160,95,70,185,230,25,208,47,250,133,253,2,255,160,255]},{"1823104":[142,126,241,21,161,31,254,1,94,1,173]},{"1823116":[5,160,10,64,239,142,255,145,255,129,255,212,95,94,175,173,5,165,10,74,159,224,155,132,129,158,212,213,254,255,253,255,255,255,255,255,127,255,31,255,31,255,1,255,1,255,2,253,160,95,64,191,169,190,64,111,170,191,80,91,146,107,104,148,237,18,86,1,169,255,192,95,234,175,244,80,254,130,255,64,255,232,255,92,233]},{"1823202":[240]},{"1823204":[250]},{"1823206":[255]},{"1823208":[135,232,67,212,232,250,92,245,190,255,239,255,255,255,255,255,111,255,151,255,18,255,161,95,42,213,9,246,4,251]},{"1823239":[255,136,223]},{"1823243":[162]},{"1823245":[142,86,7,42,255,11,255,4,255]},{"1823255":[211,168,139,93]},{"1823260":[249,4,255,130,42]},{"1823266":[11,2,4]},{"1823270":[44]},{"1823272":[252]},{"1823274":[255]},{"1823276":[119,136,174,5,213,255,244,255,251,255,255,255,255,255,255,255,251,255,47,249]},{"1823297":[199,96,162,4,192,111,180,199,135,226,162,69,130,202,144,79,120,74,120,72,124,84,103,79,127,79,255,88,234,213,229,31,31,126,126,31,31,119,119,223,95,122,122,218,90,213,85,232,232,141,140,235,235,152,144,40,168,141,136,63,186,191,53,6,82,6,132,70,6,252,84,92,92,12,14,212,6,140,2,83,7,133,7,7,69,85,253,253,253,255,253,47,45,115,113,94,95,150,151,254,253,254,255,94,95,14,15,38,39,114,115,169,9,121,17,187,185,3,3,163,3,241,1,249,33,253,113,197,69,234,74,231,117,155,107,200,119,78,251,44,31,24,111,197,254,110,18,247,169,11,4,231,168,83,152,17,180,68,220,238,93,58,175,191,63,14,142,175,39,155,155,189,23,212,5,255,17,147,108,137,118,180,123,144,127,36,255,192,127,234,63,135,207,34,96,7,190,115,240,165,188,96,96,13,173,93,159,31,209,245,59,206,32,20,234,156,32,85,233,29,97,167,25,207,69,38,166,62,116,230,150,46,70,228,212,103,247,159,175,170,104,173,204,75,232,125,140,123,154,127,156,26,242,80,224,64]},{"1823554":[254,64,255,250,239,239,64,72,235,100,48,32,40,192]},{"1823569":[64,64,190,250,255,255,255,247,255,112,244,47,47,215,55,254,254,255,191,255,255,239,239,72,72,228,228,175,175,231,231,191,190,65,1]},{"1823606":[16]},{"1823608":[191,8,31,4,223,143,31,7,131,147,160,56,201,216,170,170,74,202,174,38,70,70,115,122,215,99,127,195,222,226,237,211,77,241,99,77,206,224,115,196,165,39,166,166,230,230,167,183,231,247,38,54,227,243,107,123,206,22,77,28,13,28,93,29,159,159,217]},{"1823676":[157,137,149,5]},{"1823682":[3]},{"1823684":[255,42,255,85,85,85,129]},{"1823692":[93,34,42]},{"1823699":[3,42,215,85,255,255,255,126,126,128,162,85,213,171,171,95,95,255,215,255,255,85,85]},{"1823724":[162,162,85,85,255,171,252,92,40]},{"1823736":[170]},{"1823738":[255]},{"1823740":[255,162,255,85,15]},{"1823746":[183,180,208,211,151,113,158,143,192,120,223,56,234]},{"1823760":[128,247,144,247,160,188,125,138,128,128,120,64,24,63,21,21,112,103,240,243,220,228,119,255,159,159,125,125,63,63,21,21,184,47,60,47,123,103,175,175,127,31,135,5,224,32,255,21,255,44,255,127,89,182,255,231,174,255]},{"1823820":[228]},{"1823822":[170]},{"1823824":[4,215,128,125,16]},{"1823830":[231,8]},{"1823837":[228,85,85,40,251,2,2,16,144,255,255,255,255,85,85,255,255,85,85]},{"1823857":[255,253,127,111,255,255,255,255,255,255,85,27,27,255,85,255,139,255,222,51,207,252,101,145,215,162,6]},{"1823885":[123,200,5,1,117]},{"1823891":[117,8,10,101,27,81,42,11,169,123]},{"1823902":[55,58,138,254,138,171,9,9,231,247,252,255,254,255,251,251,15,15]},{"1823921":[255,84,255,246,255,248,255,199,198,85,85,133,129,240]},{"1823936":[251,183,249,245,251,247,109,225,175,227,157,145,135,211,231,235,132,106,142,128,4,170,30,84,212,126,134,92,220,54,76,54,159,219,119,115,95,91,39,39,79,79,207,207,191,159,255,231,37,253,15,247,165,253,219,243,49,249,243,187,105,17,185,161,64,127,128,170,128]},{"1824006":[255,21,117,117,87]},{"1824012":[85]},{"1824016":[255,192,170,128]},{"1824022":[21,127,255,255,168,168,170,170,127,255,63,127,170,170,127,127,127,127,245,245,128,128,170,170,127,127,192,64,85]},{"1824052":[255,127,128]},{"1824056":[138,128,255,128,255,170,255,127,19,213,49,147,17,19,250,58,75,79,32,42,87,7,2]},{"1824080":[233,38,138,1,45,38,46,229,223,219,234,224,175,175,253,253,244,252,213,221,245,251,251,255,116,127,42,42,167,167,253,253,59,62,126,90,255,251,20,20,171,43,213]},{"1824124":[248,160,255,253,146,193,228,159,127,170]},{"1824135":[4,234,234]},{"1824139":[255,255,170,253]},{"1824144":[102,154,132,96,160,85,250,235,255,255,255]},{"1824156":[170,247,2,2,131,131,31,31,10,43,21,255,21,255,255,255,255,247]},{"1824176":[124,116,224,100,245,213,254,254,234,234]},{"1824188":[8]},{"1824190":[255]},{"1824192":[255,67,191,196,45,126]},{"1824199":[117,236,245,28,244,252,164,220,5,112,140,161,26,44,129,140,138,244,224,244,26,164,88,37,43,15,15,94,94,124,253,114,248,28,254,252,254,252,94,13,15,240,79,161,158,130,175,255,249,235,233,3,3,163,1,242,3,255,170,255,160,255,32,255,128,247,170,255,133,253,42,127,4,85,255,95,95,223,255,126,127,28,127,106,63,195,255,139,255,170]},{"1824290":[160,160,32]},{"1824294":[129,128,225,202,144,197,20,42,112,4,255,255,95,255,255,255,127,255,55,255,63,255,253,255,254,255,255,47,255,21,255,191,255,87,127,255,255,95,95,191,255,31,208,255,232,255,64,255,161,255,139,255,21,255,239,255,223,191]},{"1824353":[47,2,21]},{"1824357":[191,9,86,11,244,181,74,15,176,63,64,127,255,255,255,255,255,254,255,116,255,234,255,80,255,160,255,255,251,255,255,255,255,255,255,255,255,255,255,255,221,255,255,6,255,65,255,187,255,87,255,255,255,255,255,209,213,250,251,2,249,65,190,187,68,87,168,255]},{"1824426":[255]},{"1824428":[209,46,250,4,249,255,190,255,68,255,168,255]},{"1824441":[255]},{"1824443":[255,46,255,4,255,247,243,255,243,245,255,255,255,253,127,255,255,255,79,255,170,224,247,28,191,223,223,230,238,102,119,175,239,68,76,170,170,236,23,16,227,213,42,230,25,100,155,175,16,68,179,170,85,19,255,227,255,42,255,25,255,155,255,16,255,179,255,85,255,85,243,254,247,213,255,234,127,217,246,255,162,255,16,254,161,174,247,9,239,63,127,159,255,54,118,34,34]},{"1824541":[16,128,160]},{"1824545":[243]},{"1824547":[247,21,234,74,53,16,239,34,221]},{"1824557":[239,128,95,251,247,247,255,234,255,117,255,239,255,221,255,239,255,95,255]},{"1824577":[255,162,255,67,252,175,248,245,10,250,37,68,187,161,94,255,255,223,255,254,252,248,248,128]},{"1824603":[32]},{"1824606":[1]},{"1824609":[255,130,125,64,191,168,87]},{"1824617":[255]},{"1824619":[223]},{"1824621":[255]},{"1824623":[255,255,255,125,255,191,255,87,255,255,255,223,255,255,255,255,255,63,192,111,152,252,7,254,17,16,239,224,95,18,175,128,127,194,192,144,144,184,24,8,8]},{"1824668":[2]},{"1824673":[255]},{"1824675":[255]},{"1824677":[239]},{"1824679":[247,11,244,7,248,143,112,127,128,255,255,255,255,231,247,247,255,244,255,248,255,48,255,128,255,64,191,163,94,5,248,6,248,8,253,18,254,172,223,71,255]},{"1824722":[3,2,1,3,2,3,11,9,16,1,141,1,71]},{"1824737":[255,2,253,9,247,122,134,244,8,252,2,255,1,255]},{"1824752":[255,255,253,255,244,252,133,252,3,253,1,252]},{"1824765":[254]},{"1824767":[255,43,255,21,250,57,255,117,255,127,127,255,127,127,253,127,255,43,10,16]},{"1824788":[57,40,245,149,255,47,127,221,125,61,127,63,245,10,255]},{"1824804":[215,40,234,149,80,47,162,213,66,184,192,21]},{"1824817":[255]},{"1824819":[255]},{"1824821":[255]},{"1824823":[127,128,127,8,247,133,250,42,213,254,164,253,116,255,160,255,110,254,184,252,40,250,201,72,181,95,255,191,255,95,255,255,255,87,255,255,255,255,255,247,247,91,160,139,64,95,160,145]},{"1824872":[71,168,215,129,55]},{"1824878":[255,16,255,95,255,191,255,95,255,255,255,87,255,126,255,255,255,231,232,5,80,11,160,145,80,47,80,84,42,207]},{"1824909":[127,160,255,255,255,255,255,255,255,255,255,143,223,133,239,223,255,87,255,255,2,255,4,127,10,255]},{"1824936":[223,218,239,106,255,160,255,168,255,253,255,251,255,245,255,255,223,37,239,149,255,95,255,87]},{"1824961":[87,10,31]},{"1824965":[87,10,255]},{"1824969":[31,168,255,4,255]},{"1824975":[255,255,255,245,255,255,255,245,255,255,255,85,255,187,255,21,255,255,168,255,74,255,160,255,10,255,160,255,170,255,68,255,234,255,87,255,181,255,95,255,245,255,95,255,85,255,187,255,21]},{"1825025":[255,130,219,16,253,160,159,18,254,16,255]},{"1825037":[255]},{"1825039":[255,232,255,66,219,136,253,48,159,136,254,68,255,170,255]},{"1825055":[255,255,23,217,155,253,117,191,143,254,118,255,187,255,85,255,255,255,232,219,100,253,138,159,112,254,137,255,68,255,170,255]},{"1825089":[255]},{"1825091":[223,128,255]},{"1825095":[247,32,127,3,124,3,248,10,240,168,255,100,255,42,255,24,255,136,127,3,125,3,251,10,250,255,87,255,187,255,213,255,239,127,247,125,125,255,255,255,255,255,168,223,100,255,42,247,24,255,8,124,131,248,7,240,15,1,224,2,192]},{"1825157":[224,10,192,1,160,43]},{"1825164":[21]},{"1825166":[183]},{"1825168":[1,225,2,194]},{"1825173":[224,10,202,1,161,43,43,21,21,191,183,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,255,224,31,192,63,224,31,192,63,160,95]},{"1825211":[255]},{"1825213":[255,8,247,94,1,149]},{"1825220":[94,1,85]},{"1825224":[121,6,222,11,253,8,176,72,95,94,191,151,95,94,255,95,123,120,255,246,255,228,247]},{"1825248":[254,255,215,253,254,255,95,245,252,250,250,221,232,236,15,64,1,255,40,215,1,255,160,95,6,255,15,241,12,243,79,255,145,104,130,85,177,10,14,81,224,10,144,64]},{"1825293":[170]},{"1825295":[27,255,128,253,40,255,228,245,160,255,128,255]},{"1825308":[255]},{"1825310":[228]},{"1825312":[134,232,42,85,228,170,170,81,149,138,47,64,85,170,255]},{"1825328":[110,255,87,255,10,255,91,255,31,255,111,255,255,255,255,255,192,128,72,128,74,144,79,144,64,152,202,144,78,145,207,144,207,255,71,183,82,231,79,239,80,224,74,234,90,234,95,239,95,223,151,23,216,85,215,87,208,88,82,82,210,82,215,208,175,47,111,167,48,176,55,183,48,176,178,178,50,178,48,176]},{"1825410":[2]},{"1825412":[186]},{"1825414":[248,4,4]},{"1825419":[5,245,3,228,27,253,253,221,255,185,253,250,255,4,7]},{"1825435":[6,246,246,167,190,254,255,222,223]},{"1825445":[85,253,249,5,7,5,3,247,241,191,1,255,255,253,221,3,1,248,248,4,4,1,1,241,241]},{"1825472":[30,111,67,47,139,79,5,111,18,101,155,166,232,215,194,191,8,252,84,199,176,193,24,68,8,70,128,35,96,224,169,51,154,8,228,4,186]},{"1825510":[53,140,62,128,31,130,254,192,165,201,165,127,171,127,181,127,178,127,185,127,252,255,223,191,118,31,21,213,132,100,12,252,160,241,194,248,128,240,230,125,65,160,29,41,69,25,238,131,32,143,14,66,68,202,14,226,21,27,45,253,213,229,244,245,181,180,220,118,212,212,252,118,5,4,18,224,27,233,10,232,74,232,14,236,46,236,10,232,238,236,240,32,36]},{"1825604":[42]},{"1825606":[95,160,1]},{"1825610":[189,2,171,84,255,10,47,239,213,219,42,255,31,191,1,1,189,189,161,245,253,255,239,239,17,17]},{"1825637":[213,191,31,1,1,189,189,245,160,245]},{"1825648":[31,15,255,21]},{"1825654":[31,31,1,1,189,189,160,160]},{"1825664":[217,93,103,123,156,26,198,16,94,29,83,158,215,12,215,7,223,228,101,214,223,232,162,183,25,47,61,40,8,45,160,47,107,251,119,127,107,121,210,182,106,58,74,62,106,49,72,56,150,14,128,24,87,75,169,189,21,15,49,46,30,7,55,47,129,128,130,128,192,192,223,207,207,207,113,247,180,116,251,27,254,254,125,253,192,127,144,111,96,191,171,74,209,41,115,172,254,254,253,253,192,255,192,224,224,240,250,125,127,63,47,175,127,126,127,125]},{"1825786":[152,152,199,71,80,144]},{"1825794":[32]},{"1825796":[85]},{"1825798":[247,247,255,255,255,255,65,63,56,104,255,255,223,223]},{"1825813":[170,255,8,23,232,191,64,74,202,199,143,255,255,223,223,85,170,8,247]},{"1825833":[23]},{"1825835":[191,10,245,127,255,255,255,255,223]},{"1825854":[240,240,1]},{"1825860":[68]},{"1825862":[127,127,255,254,255,255,3,255,143,140,254,254,255,255]},{"1825877":[187,248,135,81,174,248,7,191,188,117,255,254,254,255,255,68,187,128,120]},{"1825897":[80]},{"1825899":[248,172,83,250,255,255,254,255,255]},{"1825918":[5,4,20,4,60,11,89,1,244,248,248,63,252,191,255,255,127,255,237,237,203,204,15,175,28,239,204,180,79,179,1,254,96,31,231,231,207,207,85,173,8,19,132,11,3,12]},{"1825965":[1]},{"1825967":[224,250,226,240,192,14,4]},{"1825984":[127,251,3,103,183,51,213,20,19,230,93,108,247,168,233,222,188,14,244,158,120,71,206,248,236,250,46,96,86,182,32,192,239,255,227,251,51,27,19,59,211,59,191,15,9,15,15,31,89,81,61,61,236,8,15,15,13,13,7,7,15,15,15,15,136]},{"1826050":[4]},{"1826052":[59]},{"1826054":[127,128,128,128,106]},{"1826060":[235,148,127,128,255,255,213,251,59,255,255,255,128]},{"1826074":[234,234,171,59,255,255,119,255,209,209]},{"1826085":[213,255,127]},{"1826089":[128,234,106,59,171,255]},{"1826096":[255,119,255,213]},{"1826102":[127,127]},{"1826106":[106,106,43,43]},{"1826114":[64]},{"1826116":[186]},{"1826118":[255]},{"1826124":[165,90,209,63,255,255,85,191,186,255,255,255]},{"1826140":[165,165,252,240,255,255,21,21]},{"1826149":[85,255,255]},{"1826156":[160,154,239,31,255,255,255,85]},{"1826166":[255,255]},{"1826172":[128,128,31,31,5]},{"1826178":[2]},{"1826180":[160]},{"1826182":[241,14,6,1,44,3,85,170,16,255,250,250,253,253,160,255,240,242,6,6,44,45,85,85,70]},{"1826208":[250,250,253,253]},{"1826213":[95,242,240,6,6,45,44]},{"1826221":[170,255,255,255,250,255,253]},{"1826230":[240,240,6,6,44,44]},{"1826238":[255,255,76,44,172,5,4,5,240,1,124,132,120,129,244,4,2,243,156,176,85,91,13,249,253,255,20,144,57,191,252,248,111,13,188,182,93,95,13,255,241,7,156,6,181,15,12,14,241,255,251,177,242,83,10,9,6,7,3,1,10,3,11,9,254,253,215,42,255,21,255,43,255,17,245,42,255,5,95,42,255,129,168,127,128,255,130,127,142,255,142,127,170,255,244,255,126,127,213,42,106,21,214,41,96,145,209,42,80,5,1,42,128,129,215,255,255,255,253,255,123,255,241,255,255,255,223,255,127,255,63,255,255,95,255,253,255,87,255,255,255,95,255,191,255,5,223,223,29,191,187,255,85,255,175,255,5,255,2,255,184,255,31,224,189,66,185,68,253,2,175,80,165,90,66,189,66,5,32,255,226,255,68,255,170,255,80,255,250,255,253,255,239,255,249,251,255,225,255,221,255,255,255,245,255,255,255,223,223,95,247,243,238,235,213,221,255,255,245,245,93,253,175,255]},{"1826463":[223,243,2,224,20,213,34,255]},{"1826472":[245,10,93,162,143,80,160,95,12,249,16,255,34,255]},{"1826487":[255,10,255,162,255,80,255,223,255,255,208,255,42,255,200,255,187,255,213,251,255,245,255,255,255,80,208,32,42]},{"1826517":[200,170,187,211,213,126,254,186,250,17,255,80,47,32,213]},{"1826533":[55,170,68,209,42,122,133,176,79,21,234,47,255,213,255,55,255,68,255,42,255,133,255,79,255,238,255,245,122,218,165,205,215,254,213,247,8,255,163,127,196,239,250]},{"1826577":[112,48,160,16,213,128,212,130]},{"1826586":[34,35,192,196,122,250]},{"1826593":[143,32,127,16,58,128,43]},{"1826601":[255,34,220,64,187,106,149,143,255,79,223,10,239,43,255,255,255,220,255,187,255,149,255,1,254,128,127,64,255,8,183]},{"1826633":[255,224,31,208,47,186,5]},{"1826644":[128,128,128,128]},{"1826652":[96,32,192,224,14,241,5,250,135,184,7,248,11,244,1,254,2,253,32,63,241,255,250,255,120,127,56,255,244,255,254,255,157,255,31,191,46,247,21,255,43,253,21,255,11,245,5,255,67,189,161,31,38]},{"1826706":[21]},{"1826708":[41]},{"1826710":[21]},{"1826712":[1]},{"1826714":[5]},{"1826716":[1]},{"1826718":[1]},{"1826720":[255]},{"1826722":[255]},{"1826724":[255]},{"1826726":[255]},{"1826728":[255]},{"1826730":[255]},{"1826732":[191,64,31,224]},{"1826737":[255]},{"1826739":[255]},{"1826741":[255]},{"1826743":[255]},{"1826745":[255]},{"1826747":[255,64,255,160,255,255,95,199,175,193,79,109,255,191,95,127,206,143,247,31,254,95,11,135,5,113]},{"1826774":[109,1,31,11,110,4,167,34,30]},{"1826784":[244,10,234,17,239,32,254,1,244,10,219,36,253,34,255]},{"1826800":[1,254,4,251,16,239]},{"1826807":[255,1,254,32,255]},{"1826813":[223]},{"1826815":[255,253,188,157,239,255,221,255,255,255,239,254,255,62,124,127,190,190,188,175,47,221,159,255,127,239,239,254,92,189,60,190,148,67,154,240,44,98,141,128,87,16,238,163,84,195,185,107,20,36,219,3,220,18,237,40,215,1,254,8,247,4,251,128,127,144,173,80,47,160,31]},{"1826887":[119,160,7]},{"1826891":[127,160,95]},{"1826895":[191,127,239,255,231,255,255,255,255,255,255,255,255,255,255,255,255,71,170,247,56,255]},{"1826918":[255]},{"1826920":[255,8,255]},{"1826924":[255]},{"1826926":[255]},{"1826928":[215,85,255,199,255,255,255,255,255,247,255,255,255,255,255,255]},{"1826945":[255]},{"1826947":[255]},{"1826949":[255]},{"1826951":[255]},{"1826953":[255]},{"1826955":[255]},{"1826957":[255]},{"1826959":[255,254,255,213,255,234,255,80,255,234,255,196,255,234,255,80,255,255,1,255,42,255,21,255,175,255,21,255,59,255,21,255,175,255,254,255,213,255,234,255,80,255,234,255,196,255,234,255,80]},{"1827009":[255,8,243,21,226,170,85,1,254,42,213,5,250,138,117,170,255,72,251,149,247,170,255,137,255,42,255,5,255,138,255,255,85,251,187,247,119,255,255,255,119,255,255,255,255,255,255,255,170,243,76,226,157,85,170,254,137,213,42,250,5,117,138]},{"1827073":[255,162,85,213,42,175,80,23,168,175,64,86,170,172,17,128,255,162,247,213,127,175,255,23,191,175,239,86,255,172,187,255,127,255,255,127,127,255,255,255,255,255,255,253,254,250,251,255,128,85,170,42,213,80,175,168,87,64,191,170,85,19,236,5,224,175,64,85,160,255]},{"1827144":[87]},{"1827146":[255]},{"1827148":[223,32,255]},{"1827152":[5,229,175,239,85,245,255,255,87,87,255,255,159,175,223,191,255,255,255,255,255,255,255,255,255,255,255,255,143,175,255,191,224,31,64,191,160,95]},{"1827191":[255]},{"1827193":[255]},{"1827195":[255,32,223,32,223,94,1,246,9,249,6,251,4,224,30,235,21,165,90,234,21,95,94,255,244,255,248,255,80,255,224,255,193,255,160,255,64,254,255,244,253,248,254,80,84,225,254,193,212,160,250,64,85,1,255,9,255,6,255,4,255,31,255,21,255,90,255,21,255,146,106,148,87,10,175,16,155,170,175,68,111,170,175,16,27,255,130,252,20,250,10,116,16,250,170,212,68,250,170,244,16,135,232,63,64,95,160,255]},{"1827304":[255]},{"1827306":[255]},{"1827308":[255]},{"1827310":[255]},{"1827312":[111,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,160,239,16,255,32,255]},{"1827335":[255,128,255]},{"1827339":[255]},{"1827341":[255]},{"1827343":[191,176,168,8,45,32,255]},{"1827351":[95,128,255]},{"1827355":[127,64,239,192,181,231]},{"1827362":[218,8,32]},{"1827366":[160]},{"1827368":[128]},{"1827370":[128]},{"1827372":[80,64,138,128,239,255,231,255,255,255,255,255,255,255,255,255,191,255,63,255,207,129,239,167,90,159,204,139,80,179,73,232,6,244,223,238,78,123,75,252,223,229,87,167,38,190,13,215,126,193,20,218,210,80,240,251,221,210,25,26,92,95,108,110,124,77,223,222,32,160,8,128,40,160,248,184,164,228,144,208,186,218,32,224,172,84,252,254,170,234,1,254]},{"1827465":[255,255]},{"1827470":[254]},{"1827472":[253,253,162,95,234,65,255,255,174,174,255,255]},{"1827485":[255]},{"1827487":[1,171,1,2,161,84,171,126,128,8,247]},{"1827501":[255,254,1,1,1]},{"1827520":[109,79,130,159,225,127,52,117,49,51,250,26,57,18,247,5,72,181,108,115,76,63,237,153,123,236,210,221,52,246,13,14,154,248,188,220,124,116,121,113,84,253,31,95,22,246,255,14,127,71,231,219,171,55,26,23,109,110,96]},{"1827580":[47,6,9,8,165,220,193,241,84,237,52,213,124,253,14,14,221,32,253,84,15,2,101,202,47,211,199,203,30,130,174,243,2,38,86,174,158,86,116,117,47,38,215,214,230,231,94,255,37,36,247,174,42,234,142,236,218,250,42,234,26,146,160,160,250,32,90,10,255,63,244,246]},{"1827653":[95,11,244,121,128,15]},{"1827660":[126,1,115]},{"1827664":[193,190,246,2,94,94,91,91,248,254,3,243,30,153,244,252,128,1,11,244,254,1,64,180,1,134,12,243,97,153,4,116]},{"1827706":[3]},{"1827708":[31,7,127,4,215,143,83,151,71,135,75,15,137,15,96,51,82,211,249,185]},{"1827729":[167,180,167,208,247,108,239,95,120,180,140,69,248,175,211,96,48,196,52,48,224,12,252,255,105,167,175,247,231,247,231,23,15,59,47,95,15,123,39,94,65,203,155,158,142,28,4,121,197,255,243,255,255,253,255,85,85]},{"1827787":[255]},{"1827789":[244,31,128,159,102,3,255]},{"1827797":[255]},{"1827799":[253,85,170]},{"1827804":[244,32,128,31]},{"1827809":[160]},{"1827811":[12]},{"1827816":[255,255,255,255,244,244,151,159,95,228,240,255,255,255,255,255,170,85,255,255,43,32,104,8,127,64,255]},{"1827844":[253,251,247,249,85,93]},{"1827851":[255]},{"1827853":[85,191,17,191,191,255,42]},{"1827861":[253]},{"1827863":[243,93,162]},{"1827868":[85]},{"1827870":[17,174,192,255,42,42,2,6,4,6,255,247,255,255,85,85,119,238,127,127,213]},{"1827892":[249,255,249,255,170,85,255,255,170]},{"1827902":[217,200,234,130,250,6,254,248,238,233,84,244,2,250,2,82,255,81,126,233,255,168,6,163,19,246,241,8,2,5,83,1,81,175,151,255,173,169,90,90,11,14,253,93,255,255,82,80,253,175,124,124,87,5,165,249,241,253,171,81,248,248,175]},{"1827966":[82,2,127,63,197,175,64,127,194,223,144,143,63]},{"1827982":[126]},{"1827984":[125,66,175,106,159,31,149,53,154,58,223,223,192,255,128,129,128,189,250,197,223,224,193,254,128,175,224,200,64,127,254,129,128,128]},{"1828020":[192,192,64,64,64]},{"1828026":[64,64,192,64,128,128,235,244,73,86,33,118,9,254,25,230,225,14,51,4,157,28,18,242,240,176,120,88,224,232,185,176,233,240,55,250,31,112,29,15,191,79,207,63,111,159,15,239,15,31,9,219,159,127,15,15,15,15,7,7,7,7,15,15,15,15,23,3,7,7,127,16,127,255,34,247]},{"1828103":[255]},{"1828105":[255,125]},{"1828110":[255]},{"1828112":[111,58,255,128,247,213,127,127,42,42,125,255]},{"1828125":[255]},{"1828128":[170]},{"1828130":[128,127,221,34,117,138]},{"1828137":[255]},{"1828139":[138]},{"1828141":[255,255]},{"1828160":[209,53,241,242,19,112,55,212,115,147,120,24,117,2,255]},{"1828176":[239,170,193,12,104,101,108,101,226,236,106,231,40,186,160,175,178,26,26,254,215,59,86,159,25,159,29,255,82,178,69,175,29,24,29,28,28,27,28,27,30,28,50,18,47,2,186,10,93,93,255]},{"1828228":[255,213,255,125,255,255]},{"1828236":[221,34,238]},{"1828240":[255,170,160,95,42,42]},{"1828247":[146]},{"1828250":[34,255]},{"1828253":[34]},{"1828255":[238,162,170,95,95,213,247,109,239,255,255,221,255,34,34,85,255,93,8,160,95,8,255,16,255]},{"1828282":[34,34,255,34,187,187,215,217,255,6,255,84,255,199,255,239]},{"1828300":[222,32,160,1,248,164,1,249,171,171]},{"1828311":[56]},{"1828313":[16,35,255,3,33,1,162,43,175,254,254,84,84,199,255,239,239,220,255,33,33,85,245,212,135,1,255,171,255]},{"1828343":[255,16]},{"1828346":[35,35,254,34,254,244,255,32,255,50,253,173,255,233,31,122,127,192,31,162,31,32,223,255,205,221,80,250,20,23,37,143,223,95,29,31,159,223,32,16,50,34,173,7,235,234,186,144,96,96,194,192,64,144,239,255,221,255,248,253,21,255,239,95,223,63,255,191,239,191,239,175,255,21,255,2,255,1,255,138,255]},{"1828428":[255,2,255]},{"1828432":[64,239,234,255,253,255,254,255,117,255,255,255,253,255,255,255,24,167,16,5]},{"1828453":[2]},{"1828455":[1,128,10]},{"1828461":[2]},{"1828464":[239,255,255,255,215,255,255,255,223,255,255,255,223,255,255,255,255,255,255,127,255,191,255,85,255,174,255,85,255,191,255,23]},{"1828497":[255,128,255,64,255,170,255,81,255,170,255,64,255,232,255]},{"1828513":[255]},{"1828515":[127]},{"1828517":[191]},{"1828519":[85]},{"1828521":[174]},{"1828523":[85]},{"1828525":[191]},{"1828527":[23,255,255,255,255,255,255,255,255,254,255,255,255,255,255,191,255,247,255,255,247,253,243,255,79,255,175,255,127,253,255,255,127,40,252,9,255,6,255,161,255,80,255,128,255,2,255,128,255,32,223,1,246,24,235,25,86,128,47]},{"1828587":[127]},{"1828589":[255]},{"1828591":[127,223,255,246,255,243,255,206,255,175,255,127,255,255,255,255,255,119,249,250,255,84,255,234,255,85,254,251,255,239,239,255,255,137,233,79,239,191,255,21,255,171,235,4,254]},{"1828637":[103,64,254,1,254,74,181,20,235]},{"1828647":[255]},{"1828649":[254]},{"1828651":[254,17,230,64,191,254,255,181,255,235,255,255,255,254,255,255,255,239,255,191,255,148,171,190,225,125,130,190,193,189,194,191,226,125,194,255,136,32,32,224,224,128,128,192,192,72,64,96,226,224,192,136,136,64,191,160,95]},{"1828709":[255,128,127]},{"1828713":[127,160,93,64,191,136,119,159,255,95,255,255,255,127,255,255,255,221,255,191,255,119,255,66,191,128,127]},{"1828741":[255,168,87,8,247,168,95,64,191,128,127,2]},{"1828760":[8]},{"1828762":[8,8]},{"1828768":[191,64,31,224,30,225,7,248,35,220,15,240,15,240,23,232,64,255,224,255,225,255,248,255,220,255,240,255,240,255,232,255,255,223,77,242,35,253,17,254,175,255,21,254,41,255,17,253,223,138,72]},{"1828820":[41,40,16]},{"1828824":[175,10,20]},{"1828828":[41,40,17]},{"1828832":[117,138,247,8,215,32,255]},{"1828840":[245,10,255]},{"1828844":[215,40,253,2]},{"1828849":[255,8,255,8,247]},{"1828855":[255]},{"1828857":[255]},{"1828859":[255]},{"1828861":[255]},{"1828863":[255,239,255,247,239,235,247,65,255,255,252,121,186,185,254,87,255,239,239,231,69,227,163,65,1,252,168,62,18,184,40,87,17,16,239,186,65,92,163,254,1,87,168,239,6,215,40,238,17]},{"1828913":[255,4,251]},{"1828917":[255]},{"1828919":[255]},{"1828921":[255,16,237]},{"1828925":[255]},{"1828927":[255,168,23,64,21,232,149,80,203,226,225,212,1,250,225,245,38,255,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,255]},{"1828962":[255]},{"1828964":[127,2,191]},{"1828968":[31,136,255]},{"1828972":[31]},{"1828974":[219]},{"1828976":[255,255,255,255,255,253,255,255,255,119,255,255,255,255,255,255]},{"1828993":[255]},{"1828995":[255]},{"1828997":[255]},{"1828999":[247]},{"1829001":[223]},{"1829003":[255,32,95]},{"1829007":[255,254,255,245,255,255,255,125,255,255,255,255,255,255,255,255,255,255,1,255,10,255]},{"1829030":[255,138,255,32,255]},{"1829036":[255,128,255]},{"1829040":[255,254,255,245,255,255,247,125,255,223,255,255,255,127,255,255]},{"1829057":[255,2,253]},{"1829061":[255]},{"1829063":[255]},{"1829065":[255]},{"1829067":[255,64,255,128,255,160,255,66,255,160,255,80,255,234,255,84,255,170,255,85,255,255,95,255,191,255,95,255,175,255,21,255,171,255,85,255,170,255,160,253,66,255,160,255,80,255,234,255,84,255,170,255,85,23,232,43,80,5,250,11,240]},{"1829129":[254,2,253]},{"1829133":[255]},{"1829135":[255,151,252,43,123,5,255,11,251,128,254,2,255,128,255]},{"1829151":[255,252,124,255,255,255,255,255,255,255,127,255,255,255,127,255,255,232,151,80,175,250,5,240,15,254,129,253,2,255,128,255]},{"1829184":[127,128,191]},{"1829188":[95,32,255]},{"1829192":[85,168,171,64,69,168,170,80,127,255,191,191,95,127,255,255,85,253,171,235,69,237,170,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,127]},{"1829235":[255,32,223]},{"1829239":[255,168,87,64,191,168,87,80,175,233,22,234,21,228,19,251,4,254,1,255]},{"1829260":[95]},{"1829262":[247]},{"1829264":[255,232,255,192,247,232,255,241,255,254,255,253,95,95,255,247,232,254,192,213,232,243,241,245,254,255,253,253,255,255,247,255,22,255,21,255,19,255,4,255,1,255]},{"1829307":[255]},{"1829309":[255,8,247,42,235,212,20,64,170,164,85,148,106,168,85,220,35,66,53,190,42,255,20,255]},{"1829334":[255,4,255,128,255]},{"1829340":[255,136,223,136,127,128,63]},{"1829348":[21,170,14,81,129,234,2,85,136,171,168,21,255,255,63,255,191,255,95,255,107,255,87,255,35,255,53,255,168,255]},{"1829379":[191,168,191]},{"1829383":[11,32,171,2,66,64,171,12,80,168,168,64]},{"1829396":[232,168,244]},{"1829400":[252,32,255]},{"1829404":[252]},{"1829406":[247,128,255]},{"1829410":[255]},{"1829412":[255]},{"1829414":[255]},{"1829416":[119,136,190,66,23,168,171,80,255,255,255,255,255,255,255,255,255,255,254,253,191,255,123,255,19,202,26,243,1,253,13,243,6,21,3,2,1,33,128]},{"1829456":[126,193,10,92,13,22,6,1,235,4,253,2,255,1,127]},{"1829472":[79,71,187,27,249,1,251,9,249]},{"1829482":[254,2,223,32,255]},{"1829488":[156,236,229,245,238,246,246,250,255,253,253,254,255,254,255,255,255]},{"1829506":[255]},{"1829508":[234,128,232,230,245,250,103,255,189,125,231,199,81,81,127,85,63,21,177,55,80,138,175,71,217,36,102,248,174,81]},{"1829539":[85,149,149,247,247,250,234,255,127,125,60,47,47,81]},{"1829554":[255,42,255,191,95,87,63,42,144,144,195,64,145,209,255]},{"1829570":[255]},{"1829572":[170]},{"1829575":[239,85,171,255,255,255,255,46]},{"1829584":[7,7,255,93,255,85,16,255,1,171,255,255,255]},{"1829598":[128,174,248,7]},{"1829603":[93,85,85,255,255,171,171,255,255,255]},{"1829614":[145,191,7]},{"1829618":[255,162,255,255,255,255,254,170]},{"1829628":[255]},{"1829630":[127,63,255]},{"1829634":[252]},{"1829636":[160,1,43,212,87,191,255,255,253,168,80]},{"1829648":[255,255,255,83,254,95]},{"1829655":[212,23,191,255,208,168,85]},{"1829663":[80]},{"1829665":[255,3,83,95,95,212,208,191,151,255,208,186,87]},{"1829679":[80,255]},{"1829682":[255,175,255,255,255,212,232,168,47]},{"1829692":[239,71,255,80,231,1,47,19,95,190,254,252,248,248,236,64,32,5]},{"1829711":[255,249,153,195,210,30,191,252,242,248,128,64,172,5,37,242,253,25,153,211,210,191,191,253,243,254,134,80,188,133,165,242,255,254,120,253,208,224,160,15,3,127,6,255,188,255,165,253,253,146,152,187,59,19,88,58,122,3,88,34,122,10,152,34,186,164,184,41,150,108,113,108,82,116,41,56,70,126,224,248,68,214,238,183,166,215,231,119,103,198,239,39,103,70,230,230,230,127,110,89]},{"1829812":[254,238,221,69,175,191,201,89,175,190,11,26,127,112,224,120,212,203,255,122,127,127,63,31,23,2,1,224,112,48,103,255,224,107,122,186,127,15,31,32,2,21,64,225,240,176,255,255,203,75,122,186,255,143,95,96,42,61,64,225,207,128,31,31,191,11,197,128,240,128,255,96,255,61,255,225,81,174,5]},{"1829893":[64,238,153,85,255,255,255,255,171,86]},{"1829905":[174,255,250,191,255,136,153,85,255,255,85,171,84]},{"1829919":[86,174,174,250,250,255,255,153,153,255,85,255,85,187,84,1,87,255,174,255,255,255,255,119,17,170,170,170]},{"1829948":[239,68,255,87,3,208,93]},{"1829956":[2]},{"1829958":[168,87,85,250,255,255,255,191,238]},{"1829968":[47,253,253,162,255,253]},{"1829975":[87,80,250,255,255,191,64]},{"1829983":[238,252,253,160,160,253,253,87,87,250,90,255,255,255,64,17,255,255,254,255,253,255,255,255,87,175,170]},{"1830012":[191]},{"1830014":[255,255,255]},{"1830018":[255]},{"1830020":[191]},{"1830023":[160,80,175,254,254,252,251,231,7,80,80,255,95,255,66,95,255]},{"1830041":[175,254,254,251,4,11,232,175,80]},{"1830051":[95,64,66,255,255,175,171,255,255,251,7,15,239,80]},{"1830066":[255,160,255,253,255,255,255,175,1,1,253,5,244,228,243,5,197,5,215,31,97,53,171,255,97,205,138,215,48,161,14,10,174,184,244,170,166,200,188,134,102,20,220,34,170,68,241,27,115,187,51,187,247,251,235,235,251,235,183,131,115,51,31,31,175,47,205,77,159,159,85,93,183,167,125,5,207,63,255]},{"1830146":[253]},{"1830148":[160,1,42,221,87,255,255,255,253,160]},{"1830160":[95,95,255,210,254,95,8,221,87,255,255,192,160,93]},{"1830176":[160,95,2,210,95,95,221,216,255,215,255,192,170,95]},{"1830192":[95]},{"1830194":[255,47,255,255,247,213,168,168,63]},{"1830204":[247,87,255]},{"1830208":[250]},{"1830210":[68]},{"1830213":[85,255,170,119,255,255,223,85]},{"1830222":[1]},{"1830224":[255,253,255,187,170,255,170,170,119,255,223,32]},{"1830237":[85]},{"1830239":[1,5,253,187,187,255,255,170,170,255,119,223,32,170,255]},{"1830255":[1,255,7,255,255,255,255,85]},{"1830264":[136,136,255,32,255,255,255,1,238]},{"1830274":[68]},{"1830277":[85,238,153,87,253,255,255,127,43,22]},{"1830288":[255,17,255,187,170,255,136,153,85,253,255,85,43,84]},{"1830303":[22,17,17,187,187,255,255,153,153,253,85,255,85,187,212,1,23,255,255,255,255,255,255,119,17,170,168,170]},{"1830332":[239,196,255,23,171,1,67,1,2,92,236,152,85,254,255,254,255,170,239]},{"1830352":[255,87,255,191,163,255,139,155,84,254,254,86,171,84,1,238,84,87,188,191,253,255,155,155,255,87,255,87,187,85,17,255,255,253,255,253,254,252,118,18,171,171,169,1,239,69,255,255,159,160,95,96,63,162,95,97,191,170,95,100,63,170,127,101,31,223,223,223,29,63,222,223,21,255,218,223,16,127,192,255,192,208,64,192,192,194,64,193,192,202,65,196,197,202,90,197,239,191,255,191,255,191,255,191,255,191,255,191,255,191,255,191,255,42,255,4,255,171,255,21,255,175,255,85,255,191,255,87,213,255,251,255,84,255,234,255]},{"1830489":[255,160,255,2,255]},{"1830495":[255]},{"1830497":[42]},{"1830499":[4]},{"1830501":[171]},{"1830503":[21,80,175,10,85,66,189,168,87,127,255,254,255,255,255,255,255,255,255,255,255,253,255,255,255,255,95,255,95,255,255,255,125,255,188,254,222,255,255,255,127,160,255,160,255]},{"1830549":[255,130,255,75,254,4,254,139,223,87,255,64,31]},{"1830563":[95]},{"1830565":[255]},{"1830567":[125,8,181,39,216,139,116,215,40,95,255,255,255,255,255,253,255,180,255,250,255,116,255,168,255,247,255,255,249,255,249,251,249,253,255,251,247,213,255,255,255,8,255,7,255,7,209,23,251,67,87,79,239,254,254,127,255]},{"1830625":[255,1,248,1,254,17,232,69,178,67,180,212,43,127,128,255,255,248,255,248,255,236,251,188,255,176,255,43,255,128,255,85,255,234,255,85,254,239,250,117,222,191,234,127,196,254,225,251,251,31,191,254,254,122,250,218,218,234,234,192,196,96,96,81,174,10,245,84,171,106,149,80,175,170,85,64,187,96,159,174,255,245,255,171,255,149,255,175,255,85,255,187,255,159,255,243,13,229,50,245,30,254,1,208,47,234,21,213,42,170,213,142,12,54,50,56,28]},{"1830751":[128]},{"1830753":[255,40,215,16,235]},{"1830759":[255]},{"1830761":[255]},{"1830763":[255]},{"1830765":[255]},{"1830767":[127,253,255,197,255,235,255,255,255,255,255,255,255,255,255,127,255]},{"1830785":[255,128,127]},{"1830789":[255,128,127,2,255,1,255,2,239,241,47]},{"1830808":[2]},{"1830810":[1]},{"1830812":[2]},{"1830814":[17]},{"1830816":[143,112,31,224,63,192,31,224,63,192,95,160,111,144,15,240,112,255,224,255,192,255,224,255,192,255,160,255,128,255,240,255,168,255,85,255,43,223,69,254,171,221,87,250,191,255,87,255,168,168,85]},{"1830868":[11,2,68]},{"1830872":[137,136,82]},{"1830876":[191,42,87,1,87,168,255]},{"1830884":[253,2,255]},{"1830888":[119,136,255]},{"1830892":[213,42,254,1]},{"1830897":[255]},{"1830899":[255]},{"1830901":[255]},{"1830903":[255]},{"1830905":[255]},{"1830907":[255]},{"1830909":[255]},{"1830911":[255,63,251,63,239,255,239,247,255,255,191,223,175,207,15,223,235,59,43,175,133,239,171,247,85,191,175,143,5,127,11,203,1,212,43,122,5,84,171,170,21,80,175,250,5,180,123,254,1]},{"1830961":[255,128,127]},{"1830965":[255,64,191]},{"1830969":[255]},{"1830971":[255,64,255]},{"1830975":[255,254,206,255,133,255,176,255,35,255,254,255,245,255,175,255,188,119,255,255,255,95,255,255,255,87,255,191,255,85,255,175,191,49,136,122]},{"1831012":[79,160,220,8,1,168,10,64,80,170,67,80,255,119,255,255,255,95,255,247,255,87,255,191,255,85,255,175]},{"1831041":[5,80,43,160,17,193,142,226,65,213]},{"1831052":[251]},{"1831054":[245,80,255,255,255,255,243,243,255,251,255,255,255,255,255,255,255,255,255,170,255,4,243,2,123,28,191,140,255]},{"1831084":[255]},{"1831086":[175]},{"1831088":[255,85,255,251,243,253,255,227,255,115,255,255,255,255,255,255]},{"1831105":[127,40,255]},{"1831109":[95,10,127]},{"1831113":[87,2,187,128,5,64,3,254,255,213,255,255,255,245,255,255,255,253,255,255,255,255,255,255,129,255,42,255,160,255,10,255,168,255,70,255,42,255,20,255,126,255,213,255,95,255,245,255,87,255,185,255,213,255,235,16,207,56,199,16,239,132,247,16,255,1,255,80,255,160,255,144,207,88,207,146,255,88,255,234,255,212,255,170,255,85,255,207,79,223,159,255,125,255,175,255,21,255,43,255,85,255,170,207,176,215,104,239,146,247,88,255,234,255,212,255,170,255,85,1,234,2,244]},{"1831237":[250]},{"1831239":[253]},{"1831241":[255]},{"1831243":[95]},{"1831245":[255,64,255,1,235,2,246]},{"1831253":[250]},{"1831255":[253,160,255,224,255,162,255]},{"1831263":[255,255,255,255,255,255,255,255,255,255,95,255,191,255,93,255,255,234,21,244,11,250,5,253,2,255,160,95,224,255,162,255]},{"1831296":[87,128,169]},{"1831300":[69]},{"1831302":[170]},{"1831305":[128]},{"1831307":[208]},{"1831309":[248]},{"1831311":[240,87,215,171,169,69,69,170,170]},{"1831321":[128]},{"1831323":[208]},{"1831325":[248]},{"1831327":[240,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,128,127,2,253]},{"1831349":[255]},{"1831351":[255,128,127,208,47,248,7,240,15,190,65,85]},{"1831364":[95]},{"1831366":[117]},{"1831368":[85]},{"1831370":[9]},{"1831372":[5]},{"1831374":[1]},{"1831376":[255,170,255,95,95,95,255,117,85,85,43,9,5,5,11,2,170,235,95,245,255,255,117,255,255,255,221,255,255,255,246,252,65,255,160,95]},{"1831413":[255,138,117]},{"1831417":[255,34,221]},{"1831421":[255,8,247,149,106,64,21,187]},{"1831430":[85]},{"1831432":[110]},{"1831434":[85]},{"1831436":[89]},{"1831438":[21]},{"1831440":[255,128,255,234,255,238,255,255,127,111,255,87,93,89,189,21,128,234,234,85,238,170,255,85,239,254,87,253,251,255,87,253,106,255,21,255]},{"1831477":[255]},{"1831479":[255,16,239,168,87,4,251,170,87,64,170,30,64,16,170,1,80,168,2,84]},{"1831500":[170]},{"1831502":[85]},{"1831504":[255]},{"1831506":[245,160,255,68,255,174,255,253,255,255,251,251,117,117,21,170,171,64,69,170,174,80,253,170,255,84,255,170,255,85,191,255,75,255,171,255,80,255,2,255]},{"1831547":[255,4,255,138,255,53,77,37,19,17,228,171,4,1,170,34,64,128,34]},{"1831568":[221,42,223,2,110,1,84,16,254,84,221,157,255,221,95,95,131,99,232,24,151,99,251,4,85,170,191,64,221,162,255]},{"1831600":[156,232,239,243,182,249,235,255,171,255,98,255,34,255,160,255,189,160,191,191,223,128,32,255,21,224,42]},{"1831628":[4,32,10]},{"1831632":[146,66,127,128,192,253,149,42,138,106,213,213,251,219,245,245,255,255,255,255,64,64,64,223,127,128,255]},{"1831660":[223,32,255]},{"1831664":[61,61,64,64,63,128,32,255,149,255,42,255,36,255,10,255,127]},{"1831682":[255,255,253]},{"1831686":[150,255,85]},{"1831690":[171]},{"1831692":[69]},{"1831694":[170]},{"1831696":[128,128,255]},{"1831700":[2,223]},{"1831703":[247,170,170,84,84,186,186,85,85,255,255,255,255]},{"1831718":[8,105,255]},{"1831722":[255]},{"1831724":[255]},{"1831726":[255]},{"1831728":[127,127]},{"1831732":[255]},{"1831734":[150,255,85,255,171,255,69,255,170,255,255]},{"1831746":[255,255,215,7,62,225,230,31,195,31,105,23,180,11,23]},{"1831762":[255]},{"1831764":[47,250,1,124,16,6,12,51,150,129,74,65,255,255,255,255,2,2,131,222,232,16,208,44,232,22,245,10,255,255]},{"1831796":[253,5,33,254,239,255,195,255,105,255,180,255,209,82,251,251,239,191,106,138,69,180,176,70,159,231,152,231,37,56,239,16,151,202,138,21,129,6,71,8,69,130,167,128,215,231,247,231,170,162,219,78,199,217,232,225,210,245,180,20,255,239,28,4,77,21,189,110,46,241,24,247,15,248,232,95,255]},{"1831874":[255,255,255,96,59,175,234,208,123,104,8,152,24,20]},{"1831890":[255]},{"1831892":[96,191,33,84,224,5,98,8,154,111,20,226,255,255,255,255,32,160,234,191,234,229,247,240,250,181,249,94,255,255]},{"1831924":[223,192,64,63,26,255,143,127,104,151,225,31,87]},{"1831938":[255,255,221]},{"1831942":[171,127,40]},{"1831946":[71]},{"1831950":[81,16,168,168,255]},{"1831956":[34,255]},{"1831959":[212,1,213,3,184]},{"1831965":[85,1,190,255,255,255,255]},{"1831974":[171,255,42,212,71,184,170,85,65,190,87,87]},{"1831988":[255]},{"1831991":[255,43,255,71,255,170,255,65,239,85]},{"1832002":[255,255,157,66,171,126,84]},{"1832010":[162]},{"1832012":[24,8,248,1,170,170,255]},{"1832020":[98,191,1,213,84,163,162,93,17,79,250,7,255,255,255,255,64]},{"1832038":[42,255,92,163,162,93,176,78,248,5,85,85]},{"1832052":[255,66]},{"1832055":[255,92,255,162,255,177,247,250,255,239,44,236,249,77,131,234,252,5,124,3,242,1,254,3,248,78,19,226,14,144,245,1,22,131,252,12,253]},{"1832093":[253,4,254,252,255,248,252,10,14,233,255,2,122,2,243,2,255,1,251,227,227,21,21,225,143,1,254,135,252,12,255]},{"1832125":[255,4,255,119,135,235,27,117,91,239,153,236,123,249,37,155,214,187,76,149,10,41,134,219,70,159,160,122,128,175,80,210,32,74,165,227,107,83,211,160,160,65,65,79,205,5,1,159,191,28,29,156,104,44,196,159,127,62,249,50,252,254,83,96,251,226,125,255]},{"1832194":[255,255,85,66,126,38,103,161,239,32,223,64,159]},{"1832210":[255]},{"1832212":[106,63,224,56,150,88,31,80,63,160,122,229,255,255,255,255]},{"1832230":[7,30,167,105,175,224,95,192,31,128,255,255]},{"1832244":[255,66,192,191,150,127,31,255,63,255,127,255,255]},{"1832258":[255,255,23,96,255,245,247,8,255]},{"1832268":[213,42,255]},{"1832274":[255]},{"1832276":[232,189,10,95,232,31,200,55,106,191,32,223,255,255,255,255,64]},{"1832294":[245,170,255]},{"1832298":[255]},{"1832300":[255]},{"1832302":[255]},{"1832304":[255,255]},{"1832308":[255,96,85,255,247,255,255,255,213,255,255,255,117]},{"1832322":[255,255,85,170,255,127,127,128,255]},{"1832332":[221,32,255]},{"1832336":[138,138,255]},{"1832340":[170,255,128,255,128,255]},{"1832347":[255,34,255]},{"1832351":[255,255,255,255,255]},{"1832358":[127,128,255]},{"1832362":[255]},{"1832364":[253]},{"1832366":[255]},{"1832368":[117,117]},{"1832372":[255,170,127,255,127,255,255,255,221,255,255,255,84,1,255,255,4,250,254,239,119,138,254,5,126,42,251,17,170,170,255]},{"1832404":[250,175,17,239,138,255,5,255,171,255,21,255,255,255,255,255,80]},{"1832422":[238,17,119,136,254,1,126,129,251,4,85,85]},{"1832436":[255,250,238,255,117,255,250,255,84,255,234,255,191,170,159,69,63,131,255,1,255,175,191,85,255,143,191,23,64,191,160,63,248,77,25,255,143,223,85,255,175,255,87,255,149,202,154,197,180,3,231,8,223,32,191,64,223]},{"1832494":[191]},{"1832496":[191,255,191,255,247,127,230,255,112,255,170,255,80,255,168,255,255,255,255,95,255,255,255,87,255,255,255,223,255,255,255,255,34,119,85,255,159,223,87,255,223,223,207,239,255,255,255,255,34,221,245,10,159,96,255]},{"1832552":[223,32,239,16,255]},{"1832558":[255]},{"1832560":[221,255,170,255,96,255,168,255,32,255,48,255]},{"1832573":[255]},{"1832575":[255,255,255,255,255,255,255,255,255,255,247,255,254,255,121,255,255,127,127,95,255,255,255,239,239,247,247,250,254,80,121,232,255,127,128,95,160,255]},{"1832614":[239,16,247,8,250,1,80,134,232]},{"1832624":[128,255,160,255]},{"1832629":[255,16,255,8,255,1,255,134,255]},{"1832639":[255,255,85,255,234,255,192,255,235,255,117,255,232,253,18,254,241,93,85,234,234,192,192,234,235,112,117,160,232]},{"1832669":[16,128,240,85,170,234,21,192,63,234,20,112,138,160,23]},{"1832685":[239,128,15,170,255,21,255,63,255,20,255,138,255,23,255,239,255,15,255,253,118,254,225,208,47,250,141,80,151,168,119,32,223,160,255,208,84,160,224,12,12,4,132,8]},{"1832730":[16,16,48,16,8,168,80,171,160,31,8,255]},{"1832743":[127,8,239]},{"1832747":[255,3,252,1,86,171,255,31,255,243,247,115,247,215,255,239,255,236,255,94,247]},{"1832769":[255,160,95,4,251,128,127]},{"1832777":[255]},{"1832779":[255,2,255]},{"1832783":[255]},{"1832796":[2]},{"1832800":[2,253,1,254,10,245,25,230,59,196,95,160,255]},{"1832814":[127,128,253,255,254,255,245,255,230,255,196,255,160,255]},{"1832829":[255,128,255,74,159,133,127,11,253,21,255,175,255,93,255,191,213,95,255,74]},{"1832850":[5]},{"1832852":[9]},{"1832854":[21]},{"1832856":[175,10,93]},{"1832860":[149]},{"1832862":[95]},{"1832864":[159,96,127,128,127,128,255]},{"1832872":[245,10,255]},{"1832876":[255]},{"1832878":[255]},{"1832880":[64,255,128,255,128,255]},{"1832887":[255]},{"1832889":[255]},{"1832891":[255]},{"1832893":[255]},{"1832895":[255,239,247,71,187,255,127,255,239,255,255,255,239,255,95,255,255,231,162,3,1,127,43,239,5,255,171,239,69,95,11,255,23,93,162,254,1,212,42,250,1,84,170,186,5,244,11,232,21]},{"1832945":[255]},{"1832947":[255,1,254,4,251,1,254,64,191]},{"1832957":[255,2,253,255,251,255,255,249,253,255,253,255,254,255,255,255,255,255,253,251,187,255,85,251,251,253,125,255,254,255,127,255,255,255,253,68,171,170,81,6,184,130,81]},{"1833001":[255,128,85]},{"1833005":[174]},{"1833007":[23,16,239,4,251,65,188,44,211]},{"1833017":[254,42,213,81,174,232,21,255,190,255,78,175,255,255,190,255,175,126,253,255,170,254,249,21,191,43,111,5,175,175,191,21,191,42,126,5,175,170,250,65,234,177,212,80,250,65,80,80,234,131,213,85,250,7,85,255,21,255,43,255,5,255,175,255,21,255,42,255,5,255,170,255,165,253,112,248,168,245,232,247,143,179,97,255,243,255,151,127,255,255,255,95,255,255,255,123,247,191,191,95,255,255,255,90,136,143,2,87,163,31]},{"1833128":[116,140,222,76,12,164,104]},{"1833136":[255,119,255,253,255,92,255,255,255,115,255,179,255,91,255,255,96,16,52,41,136,17,20,32]},{"1833161":[16,16,2,248,197,244,129,255,255,223,255,159,159,223,255,255,255,255,255,255,255,254,255,255,138,255,96,159,2,255,97,255,234,255,69,63,2,127,1,255,117,255,159,159,253,255,158,255,21,255,186,255,253,255,254,17,95,42,191,5,95,42,255,1,63,42,191,4,95,10,143,238,255,213,255,250,255,213,255,254,255,213,255,251,255,117,255,255,177,255,106,255,165,255,42,255,129,255,106,255,164,255,218,255,78,255,149,255,90,255,213,255,126,255,149,255,91,255,37,64,255]},{"1833283":[255,10,255]},{"1833287":[119,16,255,128,223,84,255,229,247,168,255,64,255,160,255,216,255,234,255,116,255,170,255,24,255,255,87,255,191,255,95,255,175,255,21,255,171,255,85,255,239,255,168,255,64,255,160,119,216,255,234,223,116,255,170,247,24]},{"1833345":[250]},{"1833347":[252]},{"1833349":[254]},{"1833351":[255]},{"1833353":[255]},{"1833355":[221]},{"1833357":[187]},{"1833359":[209]},{"1833361":[250]},{"1833363":[252]},{"1833365":[254]},{"1833367":[255]},{"1833369":[255,32,253,64,251,42,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,255,250,5,252,3,254,1,255]},{"1833400":[255]},{"1833402":[221,34,187,68,211,44,7,128]},{"1833412":[1]},{"1833417":[160]},{"1833419":[192]},{"1833421":[224]},{"1833423":[80,7,134,10]},{"1833428":[1,1,10]},{"1833433":[160,2,192]},{"1833437":[224,128,208,254,254,245,255,191,191,245,255,255,255,253,255,255,255,255,255,128,127,10,245]},{"1833461":[255,10,245,160,95,194,61,224,31,80,175,20]},{"1833474":[129]},{"1833476":[81]},{"1833478":[5]},{"1833480":[20]},{"1833484":[5]},{"1833488":[21,20,171,129,85,81,175,5,21,20,42]},{"1833500":[5,5,58,32,254,255,213,255,251,255,85,255,254,255,213,255,255,255,101,95,1,254,42,213,4,251,170,85,1,254,42,213]},{"1833533":[255,26,229,66]},{"1833538":[84]},{"1833540":[138]},{"1833542":[85]},{"1833544":[98]},{"1833546":[21]},{"1833548":[16]},{"1833552":[87,67,215,87,223,141,87,87,118,98,151,23,85,16,160]},{"1833568":[235,254,127,212,173,248,255,85,235,254,127,213,186,255,95,245,20,235,168,127,80,175,168,255,21,235,168,127,69,186,170,95,170]},{"1833602":[64]},{"1833604":[170]},{"1833608":[170]},{"1833610":[64]},{"1833612":[162]},{"1833616":[255,255,119,119,255,255,87,23,191,191,127,127,191,183,87,2,255,170,255,64,255,170,191,64,255,170,255,64,247,170,170,85]},{"1833649":[255,136,255]},{"1833653":[255,232,191,64,255,128,255,72,247,253,170,161,9,2,1,160]},{"1833672":[8]},{"1833676":[2]},{"1833680":[254,247,253,252,255,255,255,255,255,255,255,255,190,190]},{"1833696":[247,169,254,1,255,160,255]},{"1833704":[255,8,255]},{"1833708":[255,2,255]},{"1833712":[8,255,2,255]},{"1833717":[255]},{"1833719":[255]},{"1833721":[255]},{"1833723":[255,65,255,255,255,128,128,130]},{"1833732":[6,1,231,14,85,3,7,11,23,11,7,11,255,255,125,253,248,255,31,22,171,162,247,248,167,172,117,118,127,128,127]},{"1833764":[249]},{"1833766":[244,8,252,4,249,1,253,5,255,15,128,127,2,255]},{"1833781":[255,229,250,91,254,6,248,82,248,128,248,22,1,188,3,7,255,17,8,116,116,254,254,255,255,254,254,233,232,67,64,3,167,247,230,100,155,255]},{"1833820":[254,1,254,1,254,1,252,3,251,88,8,8,16,16,255,255,255,255,254,254,22,255,188,255,7,252,17]},{"1833848":[239,139,1,1]},{"1833854":[1,1,125,193,212,234,236,247,250,253,225,113,47,191,223,31,79,239]},{"1833873":[195,10,193,134,225,153,227,208,175,247,184,191,160,127,64,147,16,26,27,143,15,60,60,241,225,79,79,207,207,191,159,111,252,229,255,240,127,83,235,94,38,208,176,16,64,48,112,212,220,156,222,174,234,117,239,169,167,236,235,244,247,250,249,218,103,30,192,104,147,228,17,67,184,249,4,252,2,248,6,122,249,253,126,188,45,12,12,231,231,243,242,251,251,249,249,228,31,165,91,210,111,243,183,89,90,29,20,12,14,6,6,4]},{"1833986":[15,5]},{"1833989":[120,210,3,20,16,59,191,127,254,127,124,4,19,10,181,12,199,124,171,135,252,255,131,255,2,127,129,236,19,74,181,48,251,4,133,23,23,124,120,248,120,121,121,236,255,74,250,4,255,86,131,107,104,196,199,133,134,134,132,80]},{"1834050":[144]},{"1834053":[127,226,128,145,24,251,250,116,113,246,243,83,7,159,111,128,64,253,186,159,228,247,15,119,141,119,139,248,4,144,96,191,127,37,39,138,130,121,121,118,118,240,240,251,255,159,255,128,127,69,130,123,104,128,130,139,137,13,11,70,245,7,251,118,129,80,39,87,215,255,255,255,255,127,127,8,250,3,180,13,114,223,212,192,63,127,128,127,128,255]},{"1834144":[5,183,74,254,136,248,112,112,151,23,255,255,255,255,255,255,72,254,1,255,15,243,15,15,232,168]},{"1834174":[128,128,111,156,118,217,103,56,191,92,81,111,147,163,55,71,39,87,156,67,240,2,104,135,31,173,91,128,155,68,247,24,255,80,60,47,93,95,56,183,81,81,46,36,163,163,215,151,143,143,208,175,160,215,200,167,162,188,219,194,92,76,232,200,248,216,119,136,27,132,119,56,123]},{"1834248":[244,249,250,248,249,251,253,252,126,201,125,230,39,72,251,114,14,245,250,6,255,1,253,2,63,192,31,128,151,120,117,114,254,247,251,250,254,252,252,252,55,255,123,255,7,255,137,135,10,9,4,5,6,7,3,2,117,138,191,64,247,8,254]},{"1834312":[85,22,191,254,189,188,253,125,170,223,234,85,247,124,190,236,199,121,253,131,189,195,253,3,255]},{"1834338":[255]},{"1834340":[131,124,109,236,211,209,127,63,61,61,60,60,117,255,191,255,131,255,18,193,46,42,64,192,66,194,194,67,87,162,251]},{"1834372":[87,130,254]},{"1834376":[223,10,186,192,214,2,234]},{"1834384":[234,191,4,255,170,255,129,255,170,255,69,127,171,255,149,255,247]},{"1834402":[251,4,215,40,126,129,95,160,250,133,86,137,106,149,85,255,251,255,85,255,126,255,85,255,58,255,84,255,106,255,122,42,175,5,254,170,255,21,238,174,229,69,171,171,149,21,175,255,85,255,171,255,21,255,191,255,95,255,255,255,127,255,122,5,175,80,254,1,255]},{"1834472":[238,17,229,10,171,84,149,106,80,255,170,255,84,255,234,255,64,255,160,255]},{"1834493":[255,128,255,255,255,93,93,191,191,85,85,255,255,93,93,255,255,87,87,255,255,255,255,255,255,255,255,255,255,255,255,253,255,255,255,255]},{"1834530":[93,162,191,64,85,170,255]},{"1834538":[93,162,253]},{"1834542":[87,168]},{"1834545":[255]},{"1834547":[255]},{"1834549":[255]},{"1834551":[255]},{"1834553":[255]},{"1834555":[255]},{"1834557":[255]},{"1834559":[255,127,255,191,127,255,255,255,255,255,255,255,255,247,251,127,127,213,255,250,255,221,255,254,255,85,255,255,255,220,255,254,255,85,128,58,192,221]},{"1834598":[254]},{"1834600":[85]},{"1834602":[255]},{"1834604":[208,8,126,128]},{"1834609":[255]},{"1834611":[255]},{"1834613":[255]},{"1834615":[255]},{"1834617":[255]},{"1834619":[255]},{"1834621":[255]},{"1834623":[255,255,252,255,229,255,195,255,128,255,169,255,187,253,227,255,203,64,252,160,229]},{"1834645":[195,128,128]},{"1834649":[169,160,187]},{"1834653":[225,128,203,64,3,160,26]},{"1834661":[60,128,127]},{"1834665":[86,160,68]},{"1834669":[30,128,52,3,255,26,255,60,255,127,255,86,255,68,255,30,255,52,255,80,63,122,189,212,239,250,239,95,247,242,107,220,255,184,207]},{"1834705":[16,128,184]},{"1834709":[196]},{"1834711":[234,8,87,8,106]},{"1834717":[220]},{"1834719":[136]},{"1834721":[239]},{"1834723":[199]},{"1834725":[59]},{"1834727":[21]},{"1834729":[168]},{"1834731":[157]},{"1834733":[35,1,118,111,255,71,255,59,255,21,255,168,255,145,255,35,255,118,255]},{"1834753":[255]},{"1834755":[255,16,255,128,255]},{"1834761":[255,160,255,80,207,32,255]},{"1834773":[16,72,200,64,64]},{"1834779":[160]},{"1834781":[64,136,168,15,240,5,250,8,231,5,50,15,176,5,90,11,180,7,80,240,255,250,255,231,255,122,183,240,191,90,255,148,255,216,119,2,255,1,255,64,255,25,231,131,215,5,255,35,253,133,191,2]},{"1834834":[1]},{"1834836":[32,32,17]},{"1834840":[179,16,13,8,33]},{"1834846":[133,128,255]},{"1834850":[255]},{"1834852":[31,192,7,248,231,56,199,48,255]},{"1834862":[191,64]},{"1834865":[255]},{"1834867":[255,224,223,248,255]},{"1834873":[255,56,247]},{"1834877":[255]},{"1834879":[255,255,95,127,255,191,221,127,255,191,255,95,255,255,213,220,253,95,10,127]},{"1834900":[157,8,127,1,191,10,95,4,213]},{"1834910":[222]},{"1834912":[245,10,255]},{"1834916":[247]},{"1834918":[254]},{"1834920":[245,10,251]},{"1834924":[255]},{"1834926":[255,2]},{"1834929":[255]},{"1834931":[255,8,247,1,254]},{"1834937":[255,4,251]},{"1834941":[255]},{"1834943":[255,255,254,255,191,255,127,31,191,255,255,255,255,255,255,255,255,255,190,191,31,95,127,95,23,255,191,255,95,255,191,255,95,64,175,224,21,160,75,232,85,64,175,160,85,64,43,160,21,16,238,10,245,20,139,2,253,16,239,10,245,148,107,74,181,255,255,255,207,255,255,255,255,255,172,255,214,255,237,255,252,255,255,255,207,255,255,255,255,253,174,255,214,253,239,254,253]},{"1835041":[255]},{"1835043":[255]},{"1835045":[255]},{"1835047":[127,2,253]},{"1835051":[255,2,253,1,126]},{"1835057":[255]},{"1835059":[207]},{"1835061":[255,128,127,2,172]},{"1835067":[214,2,237,129,124,255,235,214,126,250,191,223,127,255,235,215,92,251,170,125,219,1,235,3,87]},{"1835093":[186,10,95,1,235,34,118,4,174,8,89,20,254,168,253,69,255,160,245,20,254,139,253,81,255,166,247,255,1,255,2,255]},{"1835126":[255,10,255,1,255,2,255]},{"1835134":[255,8,255,253,251,239,247,174,191,115,255,202,235,14,255,234,175,219,87,255,187,251,85,247,191,191,117,239,171,171,85,255,175,175,2,170,20,68,89,170,204,64,37,186,229,68,21,170,116,80,255,85,255,187,255,85,255,191,255,69,239,187,255,85,255,175,240,144,245,176,249,80,245,144,254,224,253,80,253,84,245,240,127,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,111,139,79]},{"1835236":[175,162,111]},{"1835240":[31,128,175]},{"1835244":[171,162,15]},{"1835248":[255,116,255,255,255,93,255,255,255,127,255,255,255,93,255,255,1,69,2,39,132,69,2,7,65,21,2,139,1,65]},{"1835279":[11,254,255,253,255,251,255,253,255,254,255,253,255,254,255,255,255,255,171,255,82,255,62,255,82,255,171,255,86,255,187,255,84,255,84,255,173,255,193,255,173,255,84,255,169,255,68,255,171,84,255,169,255,85,255,170,255,85,127,170,255,84,254,239,255,170,255,84,255,170,255,85,255,170,255,84,255,170,254,16,255,255,85,255,171,255,85,255,170,255,213,255,171,254,84,255,239,255,170,255,84,255,170,255,85,255,42,255,84,254,171,255,16,40,255,64,253,32,255,80,247,66,255,64,93,32,126,64,87,128,255,2,255,128,255,8,255,168,255,34,127]},{"1835421":[126,168,255,255,127,255,255,255,127,255,255,255,87,127,127,127,127,255,255,255,128,253,2,255,128,247,8,255,168,93,162,126,129,87,168]},{"1835457":[248]},{"1835459":[212]},{"1835461":[254]},{"1835463":[84]},{"1835465":[238]},{"1835467":[85,192,191,128,21]},{"1835473":[248,40,252]},{"1835477":[254,168,252,16,254,40,125,192,191,162,55,255,255,255,255,255,255,255,255,255,255,127,127,63,191,127,127,248,7,212,43,254,1,84,171,238,17,85,170,191,64,21,234,32]},{"1835529":[160]},{"1835531":[64]},{"1835533":[128]},{"1835536":[48,32,162]},{"1835540":[64]},{"1835542":[8]},{"1835545":[160,2,64]},{"1835549":[128,8]},{"1835552":[239,255,93,255,191,255,215,223,255,255,253,255,255,255,247,255,16,239,162,93,64,191,8,247,160,95,66,189,128,127,8,247]},{"1835591":[128]},{"1835600":[17]},{"1835602":[168]},{"1835604":[5]},{"1835606":[160]},{"1835608":[1]},{"1835610":[168]},{"1835612":[4]},{"1835614":[162]},{"1835616":[238,255,87,253,250,255,223,117,254,255,87,253,251,255,93,247,17,238,170,87,5,250,42,223,1,254,170,87,4,251,170,93]},{"1835650":[4]},{"1835662":[16]},{"1835664":[68]},{"1835666":[150,134,80]},{"1835670":[85]},{"1835672":[84,16,17]},{"1835676":[84]},{"1835678":[85,16,187,238,239,84,175,250,170,85,187,238,238,85,171,254,186,85,85,187,57,239,85,175,255,170,69,187,187,238,85,171,239,186,32]},{"1835714":[64]},{"1835716":[130]},{"1835720":[2]},{"1835722":[4]},{"1835728":[49,49,194,194,138,130,16]},{"1835736":[2,2,5,5]},{"1835742":[16]},{"1835744":[255,168,255,64,247,170,239,16,255,170,255,68,255,170,239,16,70,255,61,255,93,247,255,239,85,255,186,255,85,255,255,239,9,11,15,2,6,1]},{"1835783":[1]},{"1835785":[1,130]},{"1835788":[1,2,65,2,95,92,147,150,216,222,111,110,194,194,29,156,191,156,173,173,242,136,252,4,249,1,254,1,255,9,127,1,220,34,255,3,43,242,109,250,32,255,144,255,52,255,99,254,97,222,80,254,92,92,124,61,60,124,189,190,255,124,58,185,112,117,255,250,126,129,223,225,221,99,190,192,186,71,250,132,127,128,118,143,62,62,126,126,188,188,63,61,126,127,121,121,126,123,254,252,227,163,3,3,194,66,66,195,128,1,198,197,142,141,2,1,92,156,255,62,125,60,221,28,156,95,157,92,190,255,62,190,222,33,93,35,253,67,125,195,126,192,125,195,221,227,94,97,158,30,191,191,221,221,125,253,191,189,61,189,190,62,190,190,227,35,64,128,162,2,34,162,226,98,98,226,193,65,1,129,115,112,59,184,117,244,121,127,4,138,198,124,248,102,112,158,120,135,248,7,252,3,119,136,138,245,196,3,100,3,4,49,120,120,248,120,248,122,120,120,8]},{"1836010":[124,124,254,250,214,242,143,143,199,199,143,138,135,135,255,255,131,69,101,155,13,121,123,120,251,248,254,253,126,125,126,124,252,254,250,248,249,251,123,133,123,135,127,131,251,6,250,7,250,5,254,3,255]},{"1836064":[121,121,251,251,250,250,255,254,254,254,254,252,254,254,254,252,134,132,4,4,5,1,129,129,129,129,3,3,5,5,7,6,246,251,102,109,110,100,246,240,247,241,237,225,252,246,234,246,127,130,239,20,254,13,234,19,234,27,234,25,255,6,255]},{"1836128":[249,240,249,240,248,248,246,246,247,247,237,237,225,225,245,225,13,11,139,141,147,149,9,13]},{"1836153":[4,18,22,27,23,31,19,117,117,242,244,231,234,251,252,255,247,243,245,231,224,241,246,252,3,245,14,250,4,234,17,230,25,252,3,236,17,231,26,249,249,240,240,251,243,244,245,246,246,228,226,226,227,244,240,142,138,15,13,28,31,10,9,11,13,29,11,28,27,15,14,39,215,31,223,111,15,254,30,126,158,127,223,126,222,175,79,183,8,126,33,174,81,62,225,46,241,110,177,47,144,47,208,223,79,207,143,143,207,46,238,62,254,63,255,95,223,15,207,176,144,80,16,176,80,17,193,1,193]},{"1836283":[192,33,193,48,208,29,28,221,28,157,95,153,90,195,36,255,80,71,240,251,132,61,194,253,194,255,129,254,131,230,89,248,215,198,121,94,245,60,60,252,252,254,188,253,189,101,65,132,135,134,57,238,241,227,226,35,34,98,99,102,103,190,61,40,87,134,255,10,63,189,62,184,58,255,125,251,120,251,120,59,188,48,181,62,187,190,65,190,194,186,70,187,199,185,199,253,131,253,133,245,13,63,61,189,188,127,127,250,251,250,251,126,122,123,120,255,126,194,67,70,71,128,1,4,5,4,7,196,199,204,207,192,195,10,138,168]},{"1836420":[66,130,169,65,74,170,160]},{"1836428":[2,2,129,1,255,255,215,255,191,255,87,255,255,255,95,255,255,255,127,255,138,117,40,87,194,29,233,22,170,85,160,95,2,253,129,126]},{"1836465":[255,40,255,64,255,168,255]},{"1836473":[255,160,255]},{"1836477":[255,128,255,174,174,85,85,171,171,21,21,175,175,85,85,171,171,21,21,255,255,255,255,255,255,255,255,253,255,255,255,253,255,255,255,174,81,85,170,171,84,21,234,173,80,85,170,169,84,21,234]},{"1836529":[255]},{"1836531":[255]},{"1836533":[255]},{"1836535":[255]},{"1836537":[255]},{"1836539":[255]},{"1836541":[255]},{"1836543":[255,254,254,222,223,255,255,87,87,239,239,71,95,255,255,87,87,119,255,255,255,221,255,254,255,93,255,186,255,213,255,234,255,118]},{"1836578":[222,33,221]},{"1836582":[86,168,77]},{"1836586":[10,176,213]},{"1836590":[66,168]},{"1836593":[255]},{"1836595":[255]},{"1836597":[255]},{"1836599":[255]},{"1836601":[255]},{"1836603":[255]},{"1836605":[255]},{"1836607":[255,255,255,127,122,239,255,215,238,255,255,255,255,255,255,255,249,80,255,168,250,112,255,184,238,16,255,160,255]},{"1836637":[255,168,249,80]},{"1836642":[40,5,96,16,128,57,16]},{"1836650":[160]},{"1836654":[168,6]},{"1836657":[255,5,255]},{"1836661":[255,1,255]},{"1836665":[255]},{"1836667":[255]},{"1836669":[255,6,255,245,254,250,255,245,255,254,223,181,255,255,251,213,255,254,255]},{"1836689":[244,128,250]},{"1836693":[245,128,222,64,245]},{"1836699":[251]},{"1836701":[213]},{"1836703":[254]},{"1836705":[11,128,5]},{"1836709":[10,128,33]},{"1836713":[74]},{"1836715":[4]},{"1836717":[42]},{"1836719":[1,11,255,5,255,10,255,33,255,10,255,4,255,42,255,1,255,16,231,160,255,64,255,186,255,17,245,170,255,192,191,224,255,8]},{"1836755":[160]},{"1836757":[64]},{"1836759":[186,26,17,17,187]},{"1836765":[128]},{"1836767":[224,10,253,1,94,3,188]},{"1836775":[69,26,238]},{"1836779":[68,3,124]},{"1836783":[31,245,255,94,255,188,255,69,255,228,255,85,238,124,255,31,255,2,255]},{"1836803":[255,2,223,160,255,8,255,20,255]},{"1836813":[255,2,255,2]},{"1836818":[32,32,98,64,64,224,8]},{"1836826":[4,16,16,16,1,3,239,16,223]},{"1836836":[63,224,31,64,255]},{"1836842":[231,8,239]},{"1836846":[124,128,16,255,32,223,128,255]},{"1836855":[255]},{"1836857":[255,8,255,16,239,129,254,63,247,87,255,191,221,95,255,255,117,93,255,191,221,85,255,55]},{"1836882":[87]},{"1836884":[157]},{"1836886":[95]},{"1836888":[117]},{"1836890":[93]},{"1836892":[157]},{"1836894":[85]},{"1836896":[255]},{"1836898":[255]},{"1836900":[255]},{"1836902":[255]},{"1836904":[255]},{"1836906":[255]},{"1836908":[255]},{"1836910":[255]},{"1836913":[255]},{"1836915":[255]},{"1836917":[255]},{"1836919":[255]},{"1836921":[255]},{"1836923":[255]},{"1836925":[255]},{"1836927":[255,255,93,255,185,255,253,255,254,255,255,255,255,255,255,255,255,93,8,187,1,253,168,254,20,255,175,255,21,255,43,255,21,247,8,252,2,87,32,235,16,80,170,234,5,212,42,234,1]},{"1836977":[255,3,254,136,119,4,251,5,250,16,239,1,254,20,235,255,254,255,254,249,253,255,255,255,254,255,239,255,255,255,255,255,254,255,254,255,253,255,125,255,254,255,239,255,255,255,255]},{"1837025":[239]},{"1837027":[81,2,187,130,81]},{"1837033":[185]},{"1837035":[85]},{"1837037":[187]},{"1837039":[87,16,238,174,80,68,187,44,211,70,184,170,69,68,187,168,87,255,145,255,82,255,120,255,212,255,212,255,251,255,20,255,122,213,187,250,87,252,123,254,213,213,254,251,255,212,63,254,123,42,213,5,250,3,252,1,254,42,213,4,123,43,212,1,254,42,145,5,82,3,120,1,212,42,212,132,123,43,20,1,122,254,235,215,94,250,175,253,90,239,168,214,46,235,47,74,171]},{"1837137":[234,34,118]},{"1837141":[170,15,93,23,189,3,7,17,59,30,30,21,255,137,253,85,255,165,247,69,254,248,253,196,254,225,245,255]},{"1837170":[255,2,255]},{"1837174":[255,8,255,1,255,2,255,1,255,10,191,250,239,54,255,190,175,251,255,235,191,184,247,62,255,124,21,191,239,239,85,255,175,175,87,255,255,255,87,119,255,255,69,234,217,80,65,234,84,80,20,168,7,68,201,168,131,1,255,21,255,175,255,21,255,175,255,87,255,187,255,87,255,254,252,160,253,196,254,224,245,128,222,64,53,68,200,64,84,64,127,255,255,255,255,255,255,255,191,255,223,223,191,255,255,255,95,138,59]},{"1837284":[31,1,127]},{"1837288":[255,232,251,192,255,98,191,1,255,117,255,255,255,254,255,255,255,23,255,31,255,157,255,254]},{"1837313":[17,2,131,64,212,136,137,128,17,2,163,128,68,10,15,255,255,253,255,63,255,119,255,255,255,253,255,255,255,245,255,255,234,255,86,255,234,255,216,255,42,255,86,255,42,255,26,255,21,255,169,255,21,255,39,255,213,255,169,255,213,255,229,21,127,169,255,85,127,175,255,85,127,168,253,69,255,160,245,234,255,84,255,170,255,80,255,170,255,87,255,186,255,95,255,255,149,255,171,255,213,255,175,255,213,255,170,255,69,255,170,255,106,255,84,255,42,255,80,255,42,253,87,255,186,245,95,66,255,84,247,138,255,80,215,64,238]},{"1837451":[85,8,175]},{"1837455":[21,168,255,8,255,32,255,40,255,187,255,250,255,240,255,250,255,255,87,255,255,255,223,255,255,255,85,255,175,255,95,255,239,255,168,247,8,255,32,215,40,238,187,85,250,175,240,21,250]},{"1837505":[254]},{"1837507":[84,128,142]},{"1837511":[69,8,238]},{"1837515":[85]},{"1837517":[190]},{"1837519":[85,129,255,169,253,80,206,138,207,144,254,170,255,64,254,160,245,255,127,255,255,239,255,223,223,255,127,255,255,255,255,255,255,254,129,84,171,158,97,69,186,238,145,85,170,190,65,85,170]},{"1837569":[160,2,64]},{"1837573":[160]},{"1837575":[64]},{"1837577":[128]},{"1837581":[128,2]},{"1837585":[160]},{"1837587":[64]},{"1837589":[160]},{"1837591":[64]},{"1837593":[128]},{"1837597":[128,2,2,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,160,95,66,189,160,95,64,191,128,127]},{"1837627":[255,128,127]},{"1837631":[255]},{"1837646":[34]},{"1837648":[1]},{"1837650":[40]},{"1837654":[2]},{"1837658":[34]},{"1837662":[170,34,254,255,215,253,255,255,253,247,255,255,221,255,255,255,119,255,1,254,42,215]},{"1837685":[255,10,253]},{"1837689":[255,34,221]},{"1837693":[255,136,119]},{"1837698":[16]},{"1837704":[4]},{"1837706":[129]},{"1837708":[81]},{"1837710":[4]},{"1837712":[84]},{"1837714":[145,16,85]},{"1837720":[20,4,137,129,85,81,164,4,171,254,126,213,170,255,255,85,239,254,247,221,251,255,95,245,85,171,171,126,85,170,170,255,17,239,42,247,4,251,170,95]},{"1837766":[64]},{"1837768":[2]},{"1837770":[20]},{"1837772":[24,16,85]},{"1837778":[20]},{"1837782":[64,64,67,3,21,21,24,24,125,125,255,170,235,84,255,170,255,80,191,234,255,84,255,186,255,85,85,255,191,235,85,255,175,255,84,191,170,255,85,255,130,255,132,1]},{"1837827":[4,6,4,5,9,41,9,89,5,167,31,39,31,171,140,74,15,31,30,25,18,125,126,103,108,191,160,195,212,219,162,188,64,255,163,245,13,241,169,243,75,235,179,255,15,115,221,241,189,69,249,226,254,10,242,150,254,76,244,32,240,116,122,228,236,252,244,236,248,236,248,240,232,192,225,216,242,255,1,252,10,251,7,248,8,217,61,247,15,255,6,151,84,249,242,245,246,227,224,247,224,235,224,207,192,254,209,253,227,140,139,29,27,28,7,23,31,26,23,48,15,56,47,25,14,207,111,47,79,119,7,7,47,3,23,253,9,221,159,7,251,127,192,47,176,151,248,247,192,253,230,13,10,191,196,119,16,63,31,111,239,183,55,219,59,235,27,249,1,187,121,233,137,48,240,16,208,40,200,20,224,12,244,254,242,186,70,118,114,25,77,133,169,152,174,248,230,225,247,201,221,201,209,203,223,38,153,146,65,255,2,215,48,223,48,253,26,245,6,249,26,109,121,181,181,237,201,255,249,239,233,229,225,249,233,231,231,166,154,90,78,127,99,7,11,30,18,54,58,50,58,48,56,249,251,254,254,223,223,207,207,231,247,231,247,207,223,207,223,254,1,253,2,239,16,239,16,223,32,223,32,215,40,215,56,255,253,255,255,255,255,239,239,255,239,255,239,223,207,207,207,6,6,1,1,32,32,48,48,24,24,24,24,48,48,48,48,201,213,207,211,237,237,235,231,211,203,213,221,197,213,171,179,241,2,249,22,221,34,213,42,201,54,223,32,215,40,243,12,253,237,227,227,233,233,227,227,195,195,195,195,195,203,195,195,50,58,60,52,22,30,28,20,60,60,62,62,62,62,124,92,242,242,255,254,253,252,233,232,225,252,218,200,208,232,208,232,252,3,253,3,253,3,253,2,222,47,221,58,242,7,228,15,254,254,255,255,253,253,252,252,240,225,213,214,234,205,244,219,13,12]},{"1838260":[2,2,23,22,28,29,37,42,48,47,32,63,143,223,147,35,121,177,125,1,215,161,82,87,84,65,196,57,183,88,23,232,89,166,245,142,114,143,3,254,235,21,127,199,47,239,7,231,67,179,117,13,115,143,1,252,170,126,124,196,48,208,28,236,76,212,242,250,80,124,1,175,171,85,57,185,251,196,255,224,221,209,255,245,245,250,243,250,117,126,116,112,174,117,214,57,253,7,239,27,249,14,255]},{"1838364":[253,6,243,14,255,241,247,249,224,230,248,254,240,246,252,246,248,242,245,245,10,31,6,15,56,55]},{"1838391":[7,9,14,13,10,137,142,139,142,118,241,118,245,119,248,98,104,124,118,236,226,72,74,12,103,247,11,247,15,251,5,123,137,111,155,111,159,107,157,243,30,241,114,241,114,254,117,118,113,122,125,234,237,98,101,99,12,140,139,136,143,138,143,154,159,128,135,16,23,176,191,224,235,8,8]},{"1838467":[128]},{"1838469":[128]},{"1838471":[8]},{"1838477":[162]},{"1838479":[144,255,255,255,255,255,255,255,255,255,255,255,255,255,93,255,239,8,247,128,127,128,127,8,247]},{"1838505":[255]},{"1838507":[255,162,93,144,111]},{"1838513":[255]},{"1838515":[255]},{"1838517":[255]},{"1838519":[255]},{"1838521":[255]},{"1838523":[255]},{"1838525":[255]},{"1838527":[255,170,170,5,5,42,42,1,1,8,8]},{"1838540":[2,2]},{"1838544":[247,255,255,255,221,255,255,255,255,255,255,255,253,253,255,255,162,85,5,250,8,213,1,254,8,247]},{"1838571":[255]},{"1838573":[255]},{"1838575":[255]},{"1838577":[255]},{"1838579":[255]},{"1838581":[255]},{"1838583":[255]},{"1838585":[255]},{"1838587":[255]},{"1838589":[255]},{"1838591":[255,255,255,87,87,43,43,21,21,175,175,21,21,42,42,1,1,84,255,250,255,220,255,234,255,80,255,234,251,213,255,254,255,84]},{"1838626":[82,168,8,84]},{"1838631":[234]},{"1838633":[80]},{"1838635":[238]},{"1838637":[213]},{"1838639":[254]},{"1838641":[255]},{"1838643":[255]},{"1838645":[255]},{"1838647":[255]},{"1838649":[255]},{"1838651":[255]},{"1838653":[255]},{"1838655":[255,255,255,255,255,255,255,119,119,255,255,85,85,143,143,85,85,16,255,184,255,16,255,136,255]},{"1838681":[255,170,255,112,126,170,239,16]},{"1838690":[184]},{"1838692":[16]},{"1838695":[136]},{"1838699":[170]},{"1838701":[209]},{"1838703":[186]},{"1838705":[255]},{"1838707":[255]},{"1838709":[255]},{"1838711":[255]},{"1838713":[255]},{"1838715":[255]},{"1838717":[255]},{"1838719":[255,245,255,254,255,221,223,255,255,255,255,255,255,255,255,255,255]},{"1838737":[245,32,254,32,253]},{"1838743":[255,5,250,8,247,19,236,22,169]},{"1838753":[10,32,1]},{"1838757":[2]},{"1838760":[5]},{"1838762":[8]},{"1838764":[19]},{"1838766":[22,64,10,255,1,255,2,255]},{"1838775":[255,5,255,8,255,19,255,22,255]},{"1838785":[255,170,255,64,255,234,255,85,255,250,255,255,253,255,255,39,39,43,129,92,28,126,148,77,24,55,205,191,64,111,144,8,209,46,80,99,128,107]},{"1838824":[71,160,50]},{"1838828":[191]},{"1838830":[111]},{"1838832":[246,217,123,254,220,227,126,235,237,247,55,250,191,253,111,255,16,239,39,221,74,191,171,245,90,191,187,231,215,126,255,250,8,8,39]},{"1838868":[74]},{"1838870":[187,16,90]},{"1838874":[251,64,215]},{"1838878":[255]},{"1838880":[103,144,255]},{"1838884":[255]},{"1838886":[239]},{"1838888":[255]},{"1838890":[191]},{"1838892":[255]},{"1838894":[255]},{"1838896":[152,247,34,221,64,191,186,229,80,191,250,167,213,126,255,250,255,245,127,255,255,255,255,127,255,255,255,95,253,173,255,180,245]},{"1838930":[127]},{"1838932":[255]},{"1838934":[255]},{"1838936":[255]},{"1838938":[255]},{"1838940":[255]},{"1838942":[255]},{"1838944":[255]},{"1838946":[255]},{"1838948":[255]},{"1838950":[255]},{"1838952":[255]},{"1838954":[255]},{"1838956":[253,2,255]},{"1838961":[255]},{"1838963":[255]},{"1838965":[255,128,127]},{"1838969":[255,160,95,80,173,235,180,255,255,255,255,255,255,255,255,253,125,255,255,215,215,127,63,255,175,255,85,255,171,255,21,127,41,255,5,247,3,223,129,80,170,170,4,84,40,234]},{"1839016":[212,2,250]},{"1839020":[220,40,126]},{"1839024":[5,250,81,174,131,124,21,234,41,212,5,250,3,212,97,158,255,255,255,251,255,254,255,238,255,250,255,254,191,181,239,239,255,255,255,251,255,254,255,238,255,250,255,92,191,181,255,69]},{"1839073":[175]},{"1839075":[93]},{"1839077":[187]},{"1839079":[21]},{"1839081":[175,162,5,64,74,170,17,80,175,162,89,68,186,234,4,80,170,88,166,181]},{"1839102":[68,171,255,146,255,246,255,8,255,146,255,2,255,168,255]},{"1839118":[221,200,215,186,255,246,221,42,255,146,247,10,255,168,255]},{"1839134":[223,64,40,215]},{"1839139":[249,34,221]},{"1839143":[255,8,247]},{"1839147":[255]},{"1839149":[255,170,117,40,146,6,240,34,8]},{"1839159":[146,8,2]},{"1839163":[168]},{"1839167":[200,171,173,43,63,61,126,191,247,127,239,253,204,170,170,168,168,81,249,235,235,157,189,191,191,127,127,255,255,255,255,87,87,6,254,20,212,67,227,72,72,144,144,51,49,85]},{"1839214":[255,168,255,1,255,43,255,28,255,183,255,111,255,206,255,255,255,87,223,255,249,136,248,120,80,64,232,65,2,2,4,12,160,176,95,223,255,255,255,255,255,255,255,255,253,255,251,255,95,255,32,160,119,68,135,130,191,16,191,170,255,2,255,4,255,170,255,95,255,187,255,125,255,239,255,85,255,253,255,251,245,95,192,128,64,8,4,21,44,38,8,14,32,32]},{"1839309":[43,10,79,255,255,255,255,227,247,211,239,247,255,223,255,255,255,255,255,127,106,255,68,255,190,231,52,255,152,255,34,255]},{"1839342":[255,170,255,149,255,187,247,73,247,203,239,119,253,223,255,255,95,255,1,87,42,239]},{"1839365":[255,160,241]},{"1839369":[136]},{"1839371":[85]},{"1839373":[186,170,191,254,255,213,255,255,255,95,255,255,255,255,255,255,255,255,255,255,169,255,42,255]},{"1839398":[255,170,255,1,255,170,255,69,255,170,255,86,255,213,255,255,245,95,254,255,85,255,186,255,255,255,16,254,128,213,64,250]},{"1839431":[85]},{"1839433":[238,32,117]},{"1839437":[170,138,128,239,255,127,255,191,255,255,255,250,254,252,253,170,170,138,138,255,17,255,170,255,69,255,170,255,21,255,171,255,85,255,255,254,239,213,127,250,191,85,255,238,251,117,254,170,255,128,255]},{"1839489":[239]},{"1839491":[85]},{"1839493":[186]},{"1839495":[80]},{"1839497":[234,2,64,1,34,170]},{"1839504":[186,255,232,253,234,250,144,208,170,234,66,66,35,35,170,170,255,85,255,191,255,85,255,239,255,85,255,191,255,221,255,255,239,186,85,234,186,239,80,191,234,191,64,255,34,255]},{"1839551":[255]},{"1839553":[250]},{"1839555":[80]},{"1839557":[160,2]},{"1839560":[1,136,170]},{"1839564":[85]},{"1839566":[255]},{"1839568":[128,250]},{"1839571":[80]},{"1839573":[160,2,2,137,137,170,170,85,85,255,255,255,127,255,255,255,255,255,255,255,119,255,255,255,255,255,255,250,133,80,175,160,95]},{"1839607":[255,136,255]},{"1839611":[255]},{"1839613":[255]},{"1839615":[255,2]},{"1839618":[2]},{"1839620":[5]},{"1839622":[170]},{"1839624":[85]},{"1839626":[191]},{"1839628":[255]},{"1839630":[213,42,6,2,2,2,5,5,170,170,85,85,191,191,255,255,255,197,251,255,255,255,255,255,255,255,255,255,255,255,255,255,197,239,4,251]},{"1839667":[255]},{"1839669":[255]},{"1839671":[255]},{"1839673":[255]},{"1839675":[255]},{"1839677":[255,42,255,1]},{"1839682":[170]},{"1839684":[85]},{"1839686":[255]},{"1839688":[127]},{"1839690":[251,12,251,4]},{"1839695":[255,1,1,170,170,85,85,255,255,127,127,255,251,255,251,255]},{"1839712":[255,255,255,255,255,255,255,255,255,255,251,247,251,255]},{"1839727":[255]},{"1839729":[255]},{"1839731":[255]},{"1839733":[255]},{"1839735":[255]},{"1839737":[255,12,255,4,255,255,255,85]},{"1839746":[189]},{"1839748":[93]},{"1839750":[255]},{"1839752":[255]},{"1839754":[84,171,160,95,8,255,85,85,191,191,93,93,255,255,255,255,255,84,255,160,255,8,255,255,255,253,255,255,255,255,255,255,84,255,160,255,8,247]},{"1839793":[255]},{"1839795":[255]},{"1839797":[255]},{"1839799":[255]},{"1839801":[255,171,255,95,255,255,255,118]},{"1839810":[213]},{"1839812":[255]},{"1839814":[213,34,238,17,64,191]},{"1839821":[255,170,255,119,119,253,253,255,255,255,221,255,238,255,64,255]},{"1839838":[255,170,255,254,255,213,255,255,221,247,238,255,64,255]},{"1839853":[255,170,85]},{"1839857":[255,2,255]},{"1839861":[255,34,255,17,255,191,255,255,255,255,255,3,11,71,55,47,191,47,95,31,191,95,127,143,207,16,80,123,76,215,168,199,8,159,128,255]},{"1839898":[143,16,159,224,41,214,247,151,183,7,127,159,255,47,47,143,255,63,159,95,159,95,56,232,24,232,192,224,80,240,176,192,128,192,240,144,105,169,138,178,34,83,190,159,2,117,218,221,240,247,250,253,2,7,175,87,206,82,85,143,253,1,241,8,251,1,248,2,119,138,180,130,191,161,190,186,246,130,255,254,254,252,247,245,247,243,98,92,206,252,85,107,253,251,33,35,11,9,8,2,125,122,5,11,245,241,117,121,247,243,125,125,255,255,255,255,254,254,127,132,117,138,253,6,245,14,243,12,255]},{"1840028":[127,128,191,64,127,117,241,241,253,245,247,247,255,255,255,255,255,255,127,127,250,250,14,10,138,138,8,8,130,130]},{"1840062":[129,129,203,215,233,245,233,245,251,239,203,243,147,155,95,127,48,16,241,18,199,36,231,4,255,8,243,4,251,4,239,16,91,252,239,239,251,251,219,219,199,195,251,203,219,211,187,155,51,19,48,56,6,14,38,14,52,12,52,44,124,100,228,216,135,183,199,231,143,175,135,183,215,215,215,247,143,191,135,191,76,52,247,8,247,8,231,40,183,72,215,8,159,64,191,64,179,76,231,199,239,207,215,215,215,215,183,183,183,167,191,135,183,183,56,56,112,112,104,104,40,56,72,24,88,72,120,72,251,131,139,139,195,219,247,223,199,215,163,187,243,235,7,127,136,184,203,52,131,116,147,100,251,4,191,72,239]},{"1840220":[255]},{"1840222":[63,192,203,219,219,219,223,223,151,135,183,167,191,183,255,167,183,183,116,124,36,52,32,48,120,40,92,108,76,124,248,200,111,31,128,169,212,217,255,219,131,159,245,244,253,255,253,255,5,7,255,38,184,66,187,119,223,38,242,14,249,4,254,1,14,240,214,217,213,219,233,238,217,193,253,253,255,255,251,249,251,248,112,111,52,47,11,20,125,126]},{"1840313":[1,1]},{"1840316":[6,1,14,13,82,81,186,57,251,121,58,56,56,184,127,127,255,255,191,127,123,135,187,198,187,196,250,7,253,130,191,64,255]},{"1840350":[95,96,58,186,187,186,248,248,122,122,125,125,127,127,191,191,191,191,109,109,69,69,7,5,197,197,199,199,128,128,64,128,64,192,112,120,224,233,237,224,244,254,224,234,237,251,201,207,30,58,255,1,255,10,251,12,228,17,239,18,251,8,215,56,147,72,254,244,244,245,250,254,254,254,237,229,247,229,207,201,181,181,143,137,30,27,19,20,5,1,31,19,18,30,38,42,219,207,152,158,172,237,128,3,248,224,204,208,204,216,236,250,58,57,247,9,3,190,219,96,52,220,241,25,243,27,195,33,117,136,102,249,69,90,31,48,215,216,239,232,239,232,253,242,214,209,96,151,160,247,156,7,35,15,62,55,52,63,6,15,111,95]},{"1840513":[234,32,197]},{"1840517":[175]},{"1840519":[1]},{"1840522":[128]},{"1840524":[2,168,168,85,255,21,239,10,175]},{"1840534":[1]},{"1840536":[128,128,122,122,255,87,87,2,234,21,245,10,255]},{"1840550":[255]},{"1840552":[255]},{"1840554":[255]},{"1840556":[87,170,170,85]},{"1840561":[255,48,255,80,255,254,255,127,255,133,255,168,255,253,255,10,170,16,85]},{"1840581":[255,2,119,129,175]},{"1840588":[42,136,33,16,245,85,239,170,255]},{"1840598":[117]},{"1840600":[174,128,128,128,254,126,223,207,160,95,85,170,255]},{"1840614":[255]},{"1840616":[255,128,255]},{"1840620":[127,170,239,17]},{"1840625":[255,16,255]},{"1840629":[255,138,255,209,255,127,255,137,255,48,255,170,170,21,85,43,187]},{"1840647":[247,21,255]},{"1840651":[71,162,162,17,17,85,85,234,170,212,68,255,8,234]},{"1840666":[71]},{"1840668":[162,162,253,253]},{"1840673":[255,64,191,145,110,247,8,255]},{"1840682":[255]},{"1840684":[255,162,255,17]},{"1840689":[255]},{"1840691":[255,1,255]},{"1840695":[255,21,255,184,255,255,255,19,255,251,251,85,85,255,255,87,87,63,255,1,255,170,175,21,21,4,70,170,171]},{"1840726":[168,168,192]},{"1840730":[254]},{"1840732":[175,170,21,21]},{"1840737":[189]},{"1840739":[254,64,191,66,189,245,10,255]},{"1840748":[255,170,255,21]},{"1840753":[255]},{"1840755":[255,64,255,66,255,53,255,1,255,250,255,255,255,247,255,255,255,255,255,253,253,255,255,223,255,243,255,85,95,52,202,10,21,4]},{"1840790":[2,2]},{"1840794":[32]},{"1840796":[174,162,95,85,60,9,10,224,4,251,136,119,80,175,255]},{"1840812":[255,162,255,85,52,247,10,255,4,255,136,255,80,255,223,255,243,255,245,255,87,255,255,255,244,246,234,234,85,85,251,251,255,255,95,255,87,168,159]},{"1840853":[11]},{"1840855":[21]},{"1840857":[170]},{"1840859":[4]},{"1840862":[224,64,255,168,159,96,2,246]},{"1840871":[234]},{"1840873":[85,186,65,255]},{"1840878":[255,64,87,87,159,255]},{"1840885":[253]},{"1840887":[255]},{"1840889":[255,186,255,255,255,95,255,223,112,255,250,70,100,170,170]},{"1840905":[8,170,170,213,213,63,191,255,32,255]},{"1840916":[70,185,42,85]},{"1840921":[255]},{"1840923":[85]},{"1840925":[42,128]},{"1840928":[223]},{"1840930":[255]},{"1840932":[102,32,42,128,8,8,170]},{"1840940":[215]},{"1840942":[255]},{"1840944":[255,80,255,250,70,221,42,255]},{"1840953":[247,170,255,215,255,127,255,255,171,255,160,183,46,149,133,2,8,12,12,68,68,234,234,255]},{"1840978":[255]},{"1840980":[145,76,152,106,2,253]},{"1840987":[247]},{"1840989":[187]},{"1840991":[21,255]},{"1840994":[255]},{"1840996":[187,8,145,12,10,8,4,8,238]},{"1841006":[255]},{"1841008":[85,171,255,160,179,68,145,238,2,245]},{"1841019":[255,238,255,255,255,245,181,255,95,255,191,255,149,239,175,5,5,2,2,128,128,125,128,245]},{"1841044":[106]},{"1841046":[234]},{"1841048":[64,16]},{"1841051":[250]},{"1841053":[253]},{"1841055":[127,119,10,255]},{"1841060":[255]},{"1841062":[255]},{"1841064":[239]},{"1841066":[5]},{"1841068":[170]},{"1841070":[213]},{"1841072":[64,181,170,85,213,42,255,128,239,16,5,250,170,253,213,255,218,202,170,170,220,92,246,118,255,255,95,95,171,171,1,1,250,138,186]},{"1841108":[166]},{"1841110":[132,8,10]},{"1841115":[160]},{"1841117":[84]},{"1841119":[254,85,37,239,85,221,35,247,1,255]},{"1841130":[95]},{"1841132":[191]},{"1841134":[87]},{"1841136":[154,64]},{"1841139":[170,216,4,242,12,245,10,95,160,191,84,87,254,255,84,85,84,170,168,168,168,80,80,250,250,255,255,85,85,255,84,85,84,170,168,232]},{"1841176":[144]},{"1841183":[170]},{"1841185":[171,170,171,85,87,191,87,127,175,255,5,255]},{"1841198":[255]},{"1841200":[84]},{"1841202":[84]},{"1841204":[168]},{"1841207":[168,64,16,250]},{"1841212":[255]},{"1841214":[255,170,1,1]},{"1841220":[85,85,85,85,84,1,255,255,64,191,255,255,254,255,255,255,255,255,247,247,170]},{"1841242":[81,251,191]},{"1841246":[138]},{"1841248":[255,1,255,171,255,255,255,85,255]},{"1841258":[119,34,255,255,117,255,255,254,84,255,85,255,93,255,255,255,217,174,191,64,138]},{"1841281":[12,42,42,85,85,16,85]},{"1841289":[87,254,255]},{"1841293":[255,255,255,255,255,255,255,85,85,255,186,168]},{"1841306":[17,251,255]},{"1841310":[170]},{"1841312":[255,17,255,191,255,255,186,85,255]},{"1841322":[255,235,255,191,85,255,238,255,106,255,85,255,85,255,255,255,16,239,250,5,170]},{"1841345":[34,170,170,95,68,10,85]},{"1841353":[255,255,255]},{"1841357":[255,254,255,254,254,170,170,95,95,245,160]},{"1841369":[7,5,191,255]},{"1841374":[170,1,255,85,255,255,255,255,170,85,248]},{"1841386":[255,191,255,239,85,254,170,255,170,255,68,255,95,255,255,255]},{"1841403":[255,144,111,171,1]},{"1841409":[160,10]},{"1841412":[255]},{"1841414":[133,85]},{"1841417":[255,255,253]},{"1841421":[255,238,255,160,160,10,10,255,255,127,5]},{"1841433":[255,85,255,255]},{"1841438":[238,17,255,95,255,255,255,255,175,80]},{"1841450":[255,253,255,255,17,238,160,255]},{"1841459":[255]},{"1841461":[255,255,255,255,255]},{"1841467":[255]},{"1841469":[255,255,17,1,136,191]},{"1841476":[170,85,21,21]},{"1841481":[238,255,213]},{"1841485":[255,255,255,137,137,191,191,255,170,255,21,17,238,85,255,255]},{"1841502":[255]},{"1841504":[255,119,255,255,170,255,255]},{"1841514":[255,213,255,255]},{"1841519":[255,136,255]},{"1841523":[255,85,255,255,255,238,255]},{"1841531":[255]},{"1841533":[255,255]},{"1841536":[87]},{"1841538":[253,2]},{"1841541":[255,17,251,174,81,255,85]},{"1841549":[213,255,255,87,87,255,253,255]},{"1841558":[17,23,191,255,85,255,255]},{"1841566":[255]},{"1841568":[255,255,253,255]},{"1841573":[255,253]},{"1841576":[191,17,255,85,255,213]},{"1841583":[255]},{"1841585":[255,2,255,255,255,251,255,64,255]},{"1841595":[255]},{"1841597":[255,255]},{"1841600":[254,65,64,191,85,255]},{"1841607":[174,170,85,251,68,21]},{"1841614":[127,127,255,254,255,64,255,85]},{"1841623":[255,255,255,68,255,191,64,127,128,254,191,64,255,85,170,81]},{"1841640":[255,85,255,64,255,85]},{"1841647":[255,65,255,191,255,255,255,174,255]},{"1841657":[255,4,251,64,191,255,128,232,23,42,255,223,255,38,128,168,87,94,161,255]},{"1841678":[85,85,255,232,255,42,255,223,38,166,253,255]},{"1841691":[94,255]},{"1841694":[85,170,232,255,42,213,223,32,38,89,253,85,94]},{"1841708":[255,255]},{"1841711":[255,23,255,255,255,255,255,217,255]},{"1841721":[255]},{"1841723":[255]},{"1841725":[255,255,170,128,127,175,255,255,255,239,16]},{"1841737":[255,167,88,255]},{"1841742":[85,85,255,128,255,175,255,255,239,255,80,255]},{"1841755":[167,255]},{"1841758":[85,170,128,255,175,80,255]},{"1841766":[239]},{"1841768":[80,80,167]},{"1841772":[255,255]},{"1841775":[255,127,255,255,255,255,255,16,255]},{"1841785":[255]},{"1841787":[255]},{"1841789":[255,255,170,21,255,255,255,251,250,255]},{"1841800":[81,255,128,127,170]},{"1841806":[85,85,255,21,255,255,251,251,255,255,81,255]},{"1841819":[128,187,68,85,170,21,234,255]},{"1841828":[251,4,255]},{"1841832":[81,81,128]},{"1841836":[238,255]},{"1841839":[255,255,255,255,255,254,255]},{"1841847":[255]},{"1841849":[255]},{"1841851":[255,68,187,255,170,87,255,255,255,186,186,255]},{"1841864":[8,255,128,127]},{"1841870":[81,81,255,87,255,255,186,186,255,255,29,255]},{"1841884":[170,85,81,170,87,168,255]},{"1841892":[186,69,255]},{"1841896":[29,8]},{"1841899":[128,85,255]},{"1841903":[255,255,255,255,255,255,255]},{"1841911":[255,21,234]},{"1841915":[255,85,170,255,170,217,254,159,176,255,160,85,170]},{"1841929":[255]},{"1841931":[255]},{"1841936":[166,135,176,191,255,255,85,255,95,255]},{"1841948":[187,68]},{"1841951":[170,248,24,191,112,255]},{"1841958":[85]},{"1841960":[95]},{"1841964":[68,255]},{"1841967":[255,167,199,192,255,160,255]},{"1841975":[255,95,160]},{"1841979":[255,68,187,255,170,7,241,255,8,255,2,85,170]},{"1841993":[255,34,255]},{"1841998":[32,32,243,255,15,255,255,255,85,255,255,255,34]},{"1842012":[187,68,32,136,15,9,255,8,255]},{"1842022":[85]},{"1842024":[255]},{"1842028":[68,255,32,223,248,247]},{"1842035":[255,2,255]},{"1842039":[255,255]},{"1842043":[255,68,187,255,136,34,162,73,174,170,93]},{"1842055":[255]},{"1842057":[255,34,255]},{"1842062":[32,32,227,28,174,209,170,255]},{"1842071":[255,255,255,34]},{"1842076":[187,68,32,136,128,128,255,186,170,8]},{"1842088":[255]},{"1842092":[68,255,32,223,127,255,20,235]},{"1842101":[255]},{"1842103":[255,255]},{"1842107":[255,68,187,255,136,59,206,103,140,254,33]},{"1842119":[255]},{"1842121":[255,170,255]},{"1842128":[176,113,100,239,254,255]},{"1842135":[255,255,255,170]},{"1842140":[187,68]},{"1842143":[136,182,70,103,20,254]},{"1842152":[255]},{"1842156":[68,191]},{"1842159":[255,193,57,16,255,32,255]},{"1842167":[255,255]},{"1842171":[255,68,187,255,136,121,102,215,104,186,69]},{"1842183":[255]},{"1842185":[255,171,255]},{"1842192":[102,183,88,252,186,255]},{"1842199":[255,255,255,171]},{"1842204":[187,68]},{"1842207":[128,120,96,220,67,186]},{"1842216":[255]},{"1842220":[68,187]},{"1842223":[255,135,118,8,247]},{"1842229":[255]},{"1842231":[255,255]},{"1842235":[255,68,187,255,128,49,38,79,240,186,69]},{"1842247":[255]},{"1842249":[255,186,255]},{"1842256":[38,255,64,121,186,255]},{"1842263":[255,255,255,186]},{"1842268":[171,84]},{"1842272":[120,104,73,70,186]},{"1842280":[255]},{"1842284":[84,171]},{"1842287":[255,207,54]},{"1842291":[255]},{"1842293":[255]},{"1842295":[255,255]},{"1842299":[255,84,171,255]},{"1842304":[83,162,254,4,143,112]},{"1842311":[255]},{"1842313":[255,170,255]},{"1842320":[167,255,6,254,143,255,32,255,255,255,170]},{"1842332":[187,68]},{"1842336":[3,2,254,5,143]},{"1842342":[32]},{"1842344":[255]},{"1842348":[68,187]},{"1842351":[255,248,243,1,255]},{"1842357":[255,32,223,255]},{"1842363":[255,68,187,255]},{"1842368":[149,117,46,95,236,31]},{"1842375":[255]},{"1842377":[255,170,255]},{"1842382":[128,128,213,130,31,96,236,255]},{"1842391":[255,255,255,170]},{"1842396":[187,68,128]},{"1842400":[224,96,63,159,236,12]},{"1842408":[255]},{"1842412":[68,187,128,127,95,147,144,239]},{"1842421":[255]},{"1842423":[255,255]},{"1842427":[255,68,187,255]},{"1842432":[102,207,199,122,255]},{"1842438":[17,238]},{"1842441":[255,234,255]},{"1842446":[129,129,211,173,70,255,255,255,17,255,255,255,234]},{"1842460":[171,84,129,8,102,70,199,66,255]},{"1842470":[17]},{"1842472":[255]},{"1842476":[84,191,128,127,137,255,56,255]},{"1842485":[255]},{"1842487":[255,255]},{"1842491":[255,84,171,255,8]},{"1842497":[250,213,111,236,17,85,170,138,255,163,254]},{"1842510":[17,17,215,200,21,253,236,253,85,255,255,255,162]},{"1842524":[170,85,17,136,53,50,215,96,236,2,85]},{"1842536":[255,138]},{"1842539":[1,85,255]},{"1842543":[255,223,207,47,223,19,255]},{"1842551":[255,117,138]},{"1842555":[255,85,170,255,136]},{"1842561":[238,85,117,98,191,127,128,170,255,64,191]},{"1842574":[21,21,255]},{"1842578":[95,213,98,255,127,255,255,255]},{"1842588":[170,85,21,168,17,238,255]},{"1842596":[98]},{"1842598":[127]},{"1842600":[255,170]},{"1842603":[64,85,255]},{"1842607":[255,255,255,127,255,191,255]},{"1842615":[255,85,170]},{"1842619":[255,85,170,255,168]},{"1842625":[174,64,69,170,255,219,36,255,255,215,40,2]},{"1842638":[85,85,255,1,255,64,170,250,219,255,255,255]},{"1842652":[170,85,85,170,81,174,250,5,175]},{"1842662":[219]},{"1842664":[255,255]},{"1842667":[215,87,255]},{"1842671":[255,254,255,255,255,255,255,36,255]},{"1842681":[255]},{"1842683":[255,85,170,255,170,10,224]},{"1842691":[85,162,254,11,244,254,255,95,160,171]},{"1842702":[85,85,255,29,255]},{"1842708":[163,162,11,255,255,255]},{"1842715":[10,171,84,85,170,29,232,170,85,255]},{"1842726":[11]},{"1842728":[255,255,10,85,255,255]},{"1842735":[255,224,255,255,255,255,255,244,255]},{"1842745":[255]},{"1842747":[255,84,171,255,170,170]},{"1842755":[85,160,162,128,127,234,255,255]},{"1842764":[168]},{"1842766":[87,87,255,255,255,170,255,160,128,255,245,245]},{"1842779":[191,170,85,87,168,255,170,170,85,253,2,128]},{"1842792":[255,245,191,64,255,253]},{"1842799":[255]},{"1842801":[255,85,255,255,255,127,255]},{"1842809":[255]},{"1842811":[255,85,170,255,168,110,102,69,17,5,170]},{"1842823":[255,164,245,255]},{"1842828":[128,1,127,127,110,110,255,239,250]},{"1842840":[91,81]},{"1842843":[255,171,84,127,128,255,238,239,85,85,170,255]},{"1842856":[245,81,255]},{"1842860":[255,213]},{"1842863":[255,119,255,17,255,255,255,255,255]},{"1842873":[255]},{"1842875":[255,84,171,255,128,254,254,85,85,64,170]},{"1842887":[250]},{"1842889":[17,187,69]},{"1842893":[11,255,255,254,254,255,255,191,21,5]},{"1842904":[255,17]},{"1842907":[255,171,84,255]},{"1842912":[255,254,255,85,85,170,255]},{"1842920":[17,17,187,69,255,94]},{"1842927":[255,255,255,85,255,234,255,255,255]},{"1842937":[255,68,187,85,170,255]},{"1842944":[181,245,85,85,42,136,10]},{"1842953":[155,191,85]},{"1842957":[191,255,255,234,170,85,85,255,127,245]},{"1842968":[100,155]},{"1842971":[255,191,64,255]},{"1842976":[255,170,255,85,127,170,255]},{"1842984":[17]},{"1842986":[191,85,255,235]},{"1842991":[255,181,255,255,255,136,255,255,255,138,255,64,191,84,171,255]},{"1843008":[93,93,127,255,170,170,254]},{"1843017":[223,255,255]},{"1843021":[255,254,255,160,170,213,85,234,234,1,1,32,221]},{"1843035":[255,255]},{"1843038":[238,1,255,168,255,85,255,170,255]},{"1843048":[87]},{"1843050":[255,255,255,170,17,254,95,247,127,255,191,255,254,255,138,255]},{"1843067":[255,85,170,239,1,217,217,251,251,170,191,168]},{"1843081":[255,255,255]},{"1843085":[255,254,255]},{"1843089":[174,68,68,191,170,87,87,1,212]},{"1843099":[255,255]},{"1843102":[170,1,255,136,255,68,255,170,255]},{"1843112":[126,1,255,255,255,170,85,254,255,119,251,255,234,255,168,255,170,255]},{"1843131":[255,95,160,171,1]},{"1843138":[186,186,175,239]},{"1843144":[2,245,255,255]},{"1843149":[255,235,255]},{"1843153":[255,64,69,234,170,18,18,93]},{"1843162":[69,255,255]},{"1843166":[170,20,255]},{"1843170":[255,64,255,170,255]},{"1843176":[170,85,255,186,255,170,85,235,255,255,191,255,191,255,237,255,170,255,69,186,255]},{"1843198":[190,20,10,10,168,168,223,223,129,1,174,80,255,255,9,246,235,255]},{"1843217":[245]},{"1843219":[87,160,160]},{"1843224":[80,9,93,255,246]},{"1843230":[136,20,255]},{"1843234":[253]},{"1843236":[255,160,255]},{"1843240":[166,81,255,162,255,171,119,235,255,245,253,255,223,255,255,255,166,255,93,162,246,9,156,20,255]},{"1843266":[255,255,255,255,255,255,255,255,163,252,241,14,56,254,85]},{"1843282":[255]},{"1843284":[255]},{"1843286":[255]},{"1843288":[255]},{"1843290":[95,3]},{"1843293":[255]},{"1843295":[1,255,255,255,255,255,255,255,255,255,255,160,163]},{"1843309":[255,255,255,255,255]},{"1843322":[255,163,255,255,1]},{"1843328":[255]},{"1843330":[255,255,255,255,255,255,245,245,213,42,242,34,2,170,87]},{"1843346":[255]},{"1843348":[255]},{"1843350":[255]},{"1843352":[255,10,250,133,34,221,2,85,255,255,255,255,255,255,255,255,245,255,85,213,34,221,255,255,255,255]},{"1843384":[10,10,255,213,255,221,85,2,255]},{"1843394":[255,255,255,255,255,255,85,85,223,32,168,170,42,170,119]},{"1843410":[255]},{"1843412":[255]},{"1843414":[255]},{"1843416":[255,170,160,26,168,127,42,85,255,255,255,255,255,255,255,255,85,255,223,223,170,125,255,255,255,255]},{"1843448":[170,170,255,223,215,87,85,42,255]},{"1843458":[255,255,255,255,255,255,87,87,249,6,13,147,50,186,127,128,255]},{"1843476":[255]},{"1843478":[255]},{"1843480":[127,168,14,160,17,238,34,69,255,255,255,255,255,255,255,255,215,255,249,249,130,109,223,191,255,255]},{"1843512":[40,40,255,249,239,254,101,2,254]},{"1843522":[255,255,255,255,255,255,81,81,255,255,255,255,152,141,254,1,255]},{"1843540":[255]},{"1843542":[255]},{"1843544":[119,174,255]},{"1843548":[213]},{"1843550":[157,98,255,255,255,255,255,255,255,255,217,255,255,255,42,255,255,255,255,255]},{"1843576":[38,38,255,255,213]},{"1843582":[98,157,239]},{"1843586":[255,255,255,255,255,255]},{"1843594":[251,255,253,255,154,237,239,16,255]},{"1843604":[255]},{"1843606":[255]},{"1843608":[119,255,250,5,84,2,255]},{"1843616":[255,255,255,255,255,255,255,255,136,255,123,254,171,255,255,255,255,255]},{"1843640":[119,119,255,254,84,2]},{"1843647":[255,238,17,255,255,255,255,255,255,4,4,190,231,77,221,102,104,255]},{"1843666":[255]},{"1843668":[255]},{"1843670":[255]},{"1843672":[95,251,174,81,88,162,15,144,238,238,255,255,255,255,255,255,164,255,60,255,135,237,255,126,255,238]},{"1843704":[91,91,255,255,106,176,144,15,160,85,255,255,255,255,255,255]},{"1843722":[171,255,84,213,127,128,245,10,255]},{"1843732":[255]},{"1843734":[255]},{"1843736":[117,255,32,223]},{"1843741":[171,255]},{"1843744":[170,170,255,255,255,255,255,255,138,255,171,116,255,213,255,255,255,170]},{"1843768":[117,117,255,116,42,129]},{"1843775":[255,179,85,255,255,255,255,255,255]},{"1843786":[187,255,68,84,254,16,230,25,255]},{"1843796":[255]},{"1843798":[255]},{"1843800":[127,255]},{"1843803":[255]},{"1843805":[187,255]},{"1843808":[187,187,255,255,255,255,255,255,128,255,187,68,255,84,238,239,255,187]},{"1843832":[127,127,255,68,171,16]},{"1843839":[255,55,85,255,255,255,255,255,255,16,16,223,223,128,208,149,213,98,157,255]},{"1843860":[255]},{"1843862":[255]},{"1843864":[247,239,16,239,192,31,191,64,191,191,255,255,255,255,255,255,24,255,239,48,31,176,64,234,255,191]},{"1843896":[231,231,255,48,175,80,128,127,215,85,255,255,255,255,255,255]},{"1843913":[170,255,255]},{"1843918":[21,85,130,125,255]},{"1843924":[255]},{"1843926":[255]},{"1843928":[85,85]},{"1843931":[255]},{"1843933":[255,255,64,255,255,255,255,255,255,255,255,170,255,255]},{"1843948":[255]},{"1843951":[234,255,255]},{"1843960":[255,255,255]},{"1843964":[255]},{"1843966":[64,191,125,85,255,255,255,255,255,255]},{"1843977":[170,251,255]},{"1843982":[1]},{"1843984":[40,215,255]},{"1843988":[255]},{"1843990":[255]},{"1843992":[85,85,4,251]},{"1843997":[254,252,2,255,255,255,255,255,255,255,255,170,255,251]},{"1844012":[254,1,2,253,255,255]},{"1844024":[255,255,251,4,255]},{"1844030":[3,252,87,87,255,255,255,255,255,255]},{"1844041":[42,122,127,64,192]},{"1844049":[255,255]},{"1844052":[255]},{"1844054":[255]},{"1844056":[85,213,69,186,192,63,127,128,255,255,255,255,255,255,255,255,170,255,186,192,63,64,128,127,255,255]},{"1844088":[127,127,250,197,127,128,128,127,119,119,255,255,255,255,255,255,136,170,170,255,64]},{"1844110":[8,8]},{"1844113":[255,255]},{"1844116":[255]},{"1844118":[255]},{"1844120":[85,221,85,170,64,255,255,8,255,255,255,255,255,255,255,255,170,255,170]},{"1844140":[255]},{"1844142":[8,255,255,255]},{"1844152":[255,255,170,85,255]},{"1844158":[8,247,127,127,255,255,255,255,255,255,168,168,171,255,64,4,138,138]},{"1844177":[255,255]},{"1844180":[255]},{"1844182":[255]},{"1844184":[87,255,87,168,64,252,250,141,255,255,255,255,255,255,255,255,168,255,168,3,252,7,141,250,255,255]},{"1844216":[255,255,171,87,251,4,143,112,255,255,255,255,255,255,255,255,170,170,160,255,68]},{"1844238":[170,170]},{"1844241":[255,255]},{"1844244":[255]},{"1844246":[255]},{"1844248":[85,255,95,160,68,255,255,170,255,255,255,255,255,255,255,255,170,255,160]},{"1844268":[255]},{"1844270":[170,255,255,255]},{"1844280":[255,255,160,95,255]},{"1844286":[170,85,119,119,255,255,255,255,255,255,170,238]},{"1844299":[255,69]},{"1844302":[170,170]},{"1844305":[255,255]},{"1844308":[255]},{"1844310":[255]},{"1844312":[17,187,255]},{"1844316":[69,255,255,170,255,255,255,255,255,255,255,255,238,255]},{"1844332":[255]},{"1844334":[170,255,255,255]},{"1844344":[255,255]},{"1844347":[255,255]},{"1844350":[170,85,117,117,255,255,255,255,255,255,160,170,46,255,90,2,164,160]},{"1844369":[255,255]},{"1844372":[255]},{"1844374":[255]},{"1844376":[85,245,213,42,90,249,245,174,255,255,255,255,255,255,255,255,170,255,42,4,249,6,174,241,255,255]},{"1844408":[255,255,46,213,255]},{"1844414":[174,81,85,85,255,255,255,255,255,255,170,170,170,255,84]},{"1844430":[168,168]},{"1844433":[255,255]},{"1844436":[255]},{"1844438":[255]},{"1844440":[85,255,85,170,84,255,255,168,255,255,255,255,255,255,255,255,170,255,170]},{"1844460":[255]},{"1844462":[168,255,255,255]},{"1844472":[255,255,170,85,255]},{"1844478":[168,87,85,85,255,255,255,255,255,255,136,170,187,255,68]},{"1844497":[255,255]},{"1844500":[255]},{"1844502":[255]},{"1844504":[85,221,68,187,68,255,255]},{"1844512":[255,255,255,255,255,255,255,255,170,255,187]},{"1844524":[255]},{"1844527":[255,255,255]},{"1844536":[255,255,187,68,255]},{"1844543":[255,87,85,255,255,255,255,255,255,128,170,255,255,20,85,8,8,2,253,255]},{"1844564":[255]},{"1844566":[255]},{"1844568":[85,213,24,231,20,227,251,4,255,255,255,255,255,255,255,255,170,255,231,24,227,93,4,251,255,255]},{"1844600":[255,255,255,24,190,65,12,243,87,85,255,255,255,255,255,255]},{"1844617":[170,255,255,69,85]},{"1844624":[2,253,255]},{"1844628":[255]},{"1844630":[255]},{"1844632":[85,85]},{"1844635":[255,69,186,117,138,255,255,255,255,255,255,255,255,170,255,255]},{"1844652":[186,85,138,255,255,255]},{"1844664":[255,255,255]},{"1844668":[239,16,138,117,8,85,255,255,255,255,255,255]},{"1844681":[170,255,255,85,93]},{"1844688":[93,162,255]},{"1844692":[255]},{"1844694":[255]},{"1844696":[85,85,34,221,85,170,85,170,170,170,255,255,255,255,255,255,170,255,221,34,170,93,170,127,255,170]},{"1844728":[255,255,255,34,247,8,170,85,175]},{"1844738":[255,255,255,255,255,255]},{"1844745":[136,251,255,109,239]},{"1844752":[175,80,255]},{"1844756":[255]},{"1844758":[255]},{"1844760":[119,119,42,213,109,146,64,191,255,255,255,255,255,255,255,255,136,255,209,46,130,255,191,71,255,255]},{"1844792":[255,255,255,46,125,146,191,64,186]},{"1844802":[255,255,255,255,255,255]},{"1844809":[128,186,255,221,255]},{"1844816":[186,69,255]},{"1844820":[255]},{"1844822":[255]},{"1844824":[117,127,170,85,85,34]},{"1844831":[255,255,255,255,255,255,255,255,255,138,255,16,239,170,255,255,119,255,255]},{"1844856":[245,245,255,239,85,34,255]},{"1844864":[175]},{"1844866":[255,255,255,255,255,255]},{"1844874":[187,255,255,255]},{"1844880":[175,80,255]},{"1844884":[255]},{"1844886":[255]},{"1844888":[117,255,171,84,213]},{"1844895":[255,255,255,255,255,255,255,255,255,138,255,17,239,42,255,255,127,255,255]},{"1844920":[117,117,255,239,213]},{"1844926":[255]},{"1844928":[254]},{"1844930":[255,255,255,255,255,255]},{"1844938":[255,255,191,191]},{"1844944":[118,137,255]},{"1844948":[255]},{"1844950":[255]},{"1844952":[85,255,255]},{"1844956":[189,64]},{"1844959":[255,255,255,255,255,255,255,255,255,170,255,223,255,2,255,255,199,255,255]},{"1844984":[85,85,255,255,253,64,255]},{"1844992":[255]},{"1844994":[255,255,255,255,255,255]},{"1845002":[255,255,216,250]},{"1845008":[119,136,255]},{"1845012":[255]},{"1845014":[255]},{"1845016":[119,255,255]},{"1845020":[216,39]},{"1845023":[255,255,255,255,255,255,255,255,255,136,255,255,255,34,221,255,255,255,255]},{"1845048":[119,119,255,255,255,39,255]},{"1845056":[255]},{"1845058":[255,255,255,255,255,255,21,21,255,208]},{"1845069":[170]},{"1845071":[136,87,40,255]},{"1845076":[255]},{"1845078":[255]},{"1845080":[119,234,211,40]},{"1845085":[255]},{"1845087":[119,255,255,255,255,255,255,255,255,157,255,255,255,170,85,255,255,255,255]},{"1845112":[98,98,255,255,255,255,119]},{"1845120":[255]},{"1845122":[255,255,255,255,255,255,85,85,253,2,234,42]},{"1845135":[170,85,32,255]},{"1845140":[255]},{"1845142":[255]},{"1845144":[127,170,170,1,42,255]},{"1845151":[85,255,255,255,255,255,255,255,255,213,255,253,253,42,255,255,191,255,255]},{"1845176":[42,42,255,253,213,213,85]},{"1845184":[255]},{"1845186":[255,255,255,255,255,255,85,85,223,32,42,42]},{"1845199":[170,85]},{"1845202":[255]},{"1845204":[255]},{"1845206":[255]},{"1845208":[247,170,191]},{"1845212":[42,213]},{"1845215":[85,255,255,255,255,255,255,255,255,93,255,223,223,42,213,255,255,255,255]},{"1845240":[162,162,255,223,255,213,85]},{"1845248":[255]},{"1845250":[255,255,255,255,255,255,119,119,68,191,126,33,4,170,85]},{"1845266":[255]},{"1845268":[255]},{"1845270":[255]},{"1845272":[255,136,251]},{"1845276":[32,223,4,85,255,255,255,255,255,255,255,255,119,255,68,68,32,223,251,254,255,255]},{"1845304":[136,136,255,68,255,223,85]},{"1845313":[159,251,123,21,2,255,255,17,17,213,208,85,85,124,124,159,96,68,122,234,232,255,255,255,255,223,223,170,175,119,247,255,111,193,128,253,2,255,255,255,119,255,213,255,85,139,8,255]},{"1845362":[122,191,23,255,255,255,153,255,240,255,255,170,255,247]},{"1845377":[255,191,191,85,42,253,238,85,85,66,21,4,7,178,182,250]},{"1845394":[64,170,170,128,255,253,213,213,252,232,254,252,71,83,250,255,21]},{"1845412":[213,42,253,255,255,255,235,84,253,86,251,182,250,5,170,255,127,255,238,255,85,255,23,255,175,255,255,79]},{"1845441":[255,172,175,78,186,73,252,141,81]},{"1845451":[244]},{"1845453":[10,160,160,1]},{"1845458":[87,172,163,6,211,91,173,141,31,64,126,126,95,255,1,255,7,7,94,162,127,217,223,143,171,20,255,213,255,170]},{"1845489":[255,168,255,240,255,228,255,81,255,255,255,42,255,245,95,10,53,212,127,138,170,80,239,127]},{"1845514":[64,111]},{"1845517":[128,10,11,32,200,43,171,255,138,255,80,127,127,208,64,128,128,255,255,232,245,255,43,223,32,80,255,255,255,255]},{"1845548":[255,127,255,170,194,63]},{"1845555":[255,255,255,239,255]},{"1845561":[255,255,255,128,255,95,255,128,85]},{"1845571":[255,170,239]},{"1845575":[255,232,23]},{"1845579":[255,84]},{"1845582":[160,241]},{"1845585":[42,255,255,186,170,255]},{"1845592":[255,232]},{"1845595":[255,85,84,243,241,42,255,255,255,255]},{"1845607":[255,232,255]},{"1845612":[255,254,255,173]},{"1845617":[255]},{"1845619":[255,255,255,255,255,23,255,255,255,1,255,242,255,131,82,4,254,168,241,188,231,45,199,79,208,63,192,106,128,3,44,255,252,169,191,245,190,239,45,223,223,127,255,106,234,45,253,254,255,239,7,188,69,45,194,223,208,127,127,127,127]},{"1845681":[255]},{"1845683":[255,240,255,227,255,215,255,32,255]},{"1845693":[255,128,255,32,32,197,127,171,254,255,255,87,255,212,43,160,95,255]},{"1845712":[32,223,111,127,171,255,255,255,255,87,254,255,255,160,255,255,223,223,111,231,171]},{"1845734":[255]},{"1845736":[87,168,254,42,160,255,255,255,192,63,8,247,254,255,255,255,255,255]},{"1845755":[255,95,255]},{"1845759":[255,191,191,68,255,255,170,255,255,255,255,1,255,21,255,244,11,191,64,255,255,255,255,255,255,255,255,171,255,255,21,255,244,64,64,255,196,255]},{"1845798":[255]},{"1845800":[255]},{"1845802":[171,169,21,234,244,255]},{"1845809":[255,59,196,170,255,255,255,255,255,2,253,255,255,11,255,246,254,64,248,242,171,253,239,251,255,88,215,143,255,64,191,246,1,249,250,246,249,253,243,251,231,211,239,223,223,191,224,1]},{"1845858":[250,73,240,4,241]},{"1845864":[227]},{"1845866":[235,98,223,16,224,191,1,254,182,77,160,255,225,255,227,255,129,126,207,191,31,255,119,63,128,127,255,162,255,117,255,254]},{"1845899":[255,255,255,170,255,119,128,127,255,255,255,255,255,255,255,255,255,255,255,255,170,192,192,255]},{"1845924":[255]},{"1845926":[255]},{"1845928":[255]},{"1845930":[255]},{"1845932":[255]},{"1845934":[170,85,128,127,127,128,162,255,117,255,254,255,255]},{"1845948":[255,255,255,255,247,255]},{"1845955":[255,250,5,247,93,255,170]},{"1845963":[255,191,191,255,255,247]},{"1845970":[255,255,250,255,247,255,255,255,255,255,191,191,255,255]},{"1845986":[255]},{"1845988":[250]},{"1845990":[247]},{"1845992":[255]},{"1845994":[255]},{"1845996":[191,64,255]},{"1846001":[255,255]},{"1846005":[255,85,255,170,255,255]},{"1846012":[255,255,255,255,248,248,5,221,162,91,121,138,231,180,18,213,247,170,255,183,252,3,213,210,174,249,127,243,255,243,217,195,255,239,255,207,3,4,210]},{"1846052":[168,4,115,4,243,8,195,8,255,48,207]},{"1846064":[3,252,242,45,8,247,2,253,176,239,225,62,138,247,135,255,255,255,2,125]},{"1846085":[255,81,174,254,137]},{"1846091":[255,191,170,95,85,255]},{"1846098":[85,87]},{"1846101":[255,81,255,254,255,221,221,191,191,95,95]},{"1846114":[85,2]},{"1846118":[81]},{"1846120":[254]},{"1846122":[221]},{"1846124":[191,64,95,160]},{"1846129":[255,215,168]},{"1846133":[255]},{"1846135":[255,136,255,221,34,234,255,245,255,235,235,42,213]},{"1846149":[255]},{"1846151":[255,170,85]},{"1846155":[255,255]},{"1846158":[255,16,255,1,68,110]},{"1846165":[255]},{"1846167":[255,170,255,85,85,255,255,255,255,1,21,68,42]},{"1846184":[170]},{"1846186":[85]},{"1846188":[255]},{"1846190":[255]},{"1846192":[1,254,110,145]},{"1846197":[255]},{"1846199":[255]},{"1846201":[255,85,170]},{"1846205":[255,16,255,248,248,169,1,4,253,2,251,128,123,4,223,245,14,253,14,253,18,5,168,31,253,14,251,140,249,85,81,245,243,255,243,18,21,2,174,29,6,10,6,136,4,81]},{"1846252":[241]},{"1846254":[243,2,18,237,250,85,29,226,10,245,8,247,113,174]},{"1846269":[255]},{"1846271":[255,170,168,170,85]},{"1846277":[255]},{"1846279":[255,136,119]},{"1846283":[247,255]},{"1846286":[235,20,253,2]},{"1846291":[170,93,255]},{"1846295":[255,136,255,85,85,255,255,235,255]},{"1846305":[87]},{"1846307":[170,93]},{"1846312":[136]},{"1846314":[85]},{"1846316":[255]},{"1846318":[235]},{"1846320":[2,253,170,85,93,162]},{"1846327":[255]},{"1846329":[255,93,170]},{"1846333":[255,20,255,170,130,170,17]},{"1846341":[255]},{"1846343":[255,138,117]},{"1846347":[255,255]},{"1846350":[249,6,215,40]},{"1846355":[170,85,255]},{"1846359":[255,138,255,93,93,255,255,249,255]},{"1846369":[125]},{"1846371":[170,85]},{"1846376":[138]},{"1846378":[93]},{"1846380":[255]},{"1846382":[249]},{"1846384":[40,215,238,85,85,170]},{"1846391":[255]},{"1846393":[255,93,162]},{"1846397":[255,6,255,232,136,168,65,6,255,2,255,168,85,33,221,250,4,64,190,155,100,68,232,87,249,3,251,174,252,223,252,251,252,66,253,4,115,66,174,81]},{"1846438":[3,2,172,2,252,2,251,2,67,3,100,155,250,21,81,174,3,252,4,251,220,35]},{"1846461":[255,189,254,255,239,170,85]},{"1846469":[255]},{"1846471":[255,174,81]},{"1846475":[255,255]},{"1846478":[40,215,239,16,68,238,64,255]},{"1846487":[255,174,255,255,255,255,255,168,255]},{"1846497":[16,68,170,64]},{"1846504":[174]},{"1846506":[255]},{"1846508":[255]},{"1846510":[168,128,16,239,238,17,64,191]},{"1846519":[255]},{"1846521":[255,255]},{"1846525":[255,87,255,255,255,34,197]},{"1846533":[255,1,254,175,80,69,255,191,64]},{"1846543":[255,255]},{"1846546":[68,102,69,255,1,255,175,255,255,255,191,255]},{"1846559":[255]},{"1846562":[68,34,69]},{"1846566":[1]},{"1846568":[175]},{"1846570":[255,69,191]},{"1846577":[255,126,153,69,186]},{"1846583":[255]},{"1846585":[255,186,69,64,255,255,255,241,241]},{"1846595":[232,2,254,18,239,255,3,86,253,144,111]},{"1846607":[255,251,4,70,64,82,248,18,252,255,254,252,254,145,255]},{"1846623":[255,4,10,64,6,80]},{"1846630":[16]},{"1846632":[254,2,254,84,145,1]},{"1846640":[4,251,81,191,81,175]},{"1846647":[255]},{"1846649":[255,168,87,110,255,255,255,238,239]},{"1846659":[125]},{"1846661":[255,1,254,238,145,221,127,228,91,72,191,255,1]},{"1846676":[85,255,129,255,238,255,127,127,100,127,32,127]},{"1846689":[17]},{"1846692":[85]},{"1846694":[129,128,238,128,127,221,100,192,96,32,1,254,130,255,85,170]},{"1846711":[255]},{"1846713":[255,34,221,27,255,159,255,255,234,32,147,162,255,17,238,254,1,255,255]},{"1846733":[251,136,255,255]},{"1846739":[32,255,255,27,255,255,255,255,255,68,251]},{"1846751":[254,21,21,32]},{"1846756":[255,166,27,10,255,1,255,255,64,64,35]},{"1846769":[255,76,255,89,166]},{"1846775":[255]},{"1846777":[255]},{"1846779":[255,187,255,221,255,243,226,213,6,13,248,21,234,172,83,221,255]},{"1846797":[175]},{"1846799":[255,251,4,6,209,216,255,190,254,253,255,255,255,80,175]},{"1846815":[234,21,29,211,2,223,10,190,171,253,81,255,255,4]},{"1846830":[191]},{"1846832":[4,251,40,255,208,47]},{"1846839":[255,2,255]},{"1846843":[255,171,255,85,255,170,171,238]},{"1846852":[162,255,81,46,128,255,196,63,32,255,56,255,255]},{"1846867":[238,255,255,123,127,208,255,31,223,112,245,2,248,85,1,238]},{"1846884":[255,239,123,42,208,208,223,31,127,112,245,50]},{"1846897":[255,17,255,16,239,132,255,47,255,32,255,138,255,13,255,170,191,255,4,128,255]},{"1846919":[255]},{"1846921":[255,119,255,1,252,5,170,255]},{"1846930":[4,255,223,255,170,255]},{"1846937":[255,136,170,6]},{"1846942":[250]},{"1846944":[85,21,255,4,223,223,170,170]},{"1846954":[221,136,251,4,85,170]},{"1846961":[255]},{"1846963":[255]},{"1846965":[255,85,255,255,255,34,255,251,255,85,255,168,247,249,86,3,254,9,255]},{"1846985":[255,170,171,21,64,126,128,253]},{"1846994":[80,249,254,255,162,254]},{"1847001":[224,84,171,234,1,129,1,93,95,249,86,255,254,163,162,31]},{"1847018":[1]},{"1847020":[190,64,127,128]},{"1847025":[255]},{"1847027":[255]},{"1847029":[255,92,255,255,255,170,255,190,255,126,255]},{"1847041":[255,213,127,128,247,128,191]},{"1847049":[240,32,175,196,24,2,12,85]},{"1847058":[85,213,93,119,64,172,79,224,82,168,35,27,120,244,85,255,213,85,213,85,187,128,95,64,141,2,255]},{"1847086":[119,136]},{"1847089":[255,42,255,34,255,23,255,191,255,37,255,228,255,3,255]},{"1847105":[255,238,255]},{"1847109":[255,6,248,117]},{"1847114":[23,168,2,2]},{"1847119":[23,84]},{"1847122":[85,255,64,255,1]},{"1847128":[138,10,232]},{"1847132":[242,242,23]},{"1847136":[84,255,255,255,85,64,255]},{"1847144":[255]},{"1847146":[87,168,255,2,255]},{"1847152":[84,171]},{"1847155":[255,170,255,255,255,245,255,87,255,15,255,232,255]},{"1847169":[255,191,241,7,255,254,1,2,10,250]},{"1847180":[42,191,15,255,255]},{"1847186":[64,255]},{"1847189":[69]},{"1847192":[254,246,5,69,191,42,240]},{"1847200":[255,239,254,240,250]},{"1847206":[255]},{"1847208":[247,10,191]},{"1847212":[255,42,255]},{"1847216":[215,40,1,255,189,255,255,255,11,255,186,255,106,255,15,255,1,254,255,255,9,212,168,192,106,15,24]},{"1847244":[209,211,236,239,254]},{"1847251":[187,102,128,22,150,159,154,64,96,166,164,3,16,255,255,238,170,59,68,127]},{"1847272":[255,10,223,32,255,160,255]},{"1847280":[254,1,17,255,187,255,233,255,106,255,159,255,217,255,252,255,21,234,255,255,255]},{"1847304":[255,255]},{"1847307":[95,224,224,129,129,234]},{"1847314":[158,191]},{"1847317":[16,224,224,234,234,95]},{"1847325":[63]},{"1847327":[126,255,255,222]},{"1847332":[239]},{"1847334":[255]},{"1847336":[255,234,255]},{"1847340":[255,160,255]},{"1847344":[234,21,191,97,239,255,31,255,255,255,160,255,255,95,255,254,95,95,43,47,94,120,216,13,242,140,223,145,47,15,255,63,255,255,251,251,223,223,240,253,27,159,40,185,240,239,128,191]},{"1847393":[160,4,212,39,167,255,223,126,119,126,94,96,233,192,192,255,95,255,43,254,89,253,34,255,8,255,32,239]},{"1847422":[255]},{"1847424":[128,144,149,149,5,5,124,125,129,1,208,2,255,170,255,212,247,231,47,159,58,63,130,255,127,127,45,13]},{"1847453":[170]},{"1847455":[212,111,60,218,240,255,205,255,255,128,254,210,223,85,255,43,107,211,255,191,79,63,242,125,130,255,1,223]},{"1847484":[255]},{"1847486":[255]},{"1847490":[64]},{"1847492":[85,95]},{"1847495":[85,87,93,43,47,160,5,80,10,255,255,255,255,170,255,170,255,247,247,251,251,90,90,165,5,255,128,255,64,255,85,255,255,10,170,4,212,165,255,90,95,255,127,255,191,255,170,85,170,255,85,255,43,255]},{"1847550":[95]},{"1847553":[174,160,173]},{"1847557":[187,5]},{"1847560":[224,193,241,128,82,112,181,162,255,255,95,255,228,255,15,5,254,255,253,252,218,216,245,243,255,1,255,162,255,95,245,255,63,43,126,118,44,172,19,83,254,255,253,95,187,228,10,245,255,212,252,139,248,87,243,172,2,225,2,73,36,144,154,32,209,51,192,64,248,16,253,8,243,246,227,239,36,188,223,32,206,191,191,127,255,255,255,255,254,25,247,178,239,231,64,5,191,185,127,69,239,170,247,117,225,255,73,255,144,127,101,250,63,198,127,186,255,85,255,138,1,170,32,117,85]},{"1847686":[255]},{"1847688":[16,254,170,191,5,7,10,10,171,171,244,245,85,85,255]},{"1847704":[239,255,85,255,250,255,245,255,255,85,255,171,255,255]},{"1847720":[255,17,255,170,255,165,255,91,170,255,117,254]},{"1847733":[255]},{"1847735":[255,254,239,255,85,255,90,255,164,21,168,10,64,255]},{"1847750":[80]},{"1847753":[174,128,213,85,127,239,255,189,189,74,74,255,250,251,4,251,255,127,255,170,255,16,255,255,87,255,191,250,250,175]},{"1847784":[255,85,255,170,255,85,255,239,168,255,64,255]},{"1847797":[255,171,255,174,251,213,127,255,170,255,16,126,129,173]},{"1847812":[227,25,6,138,14,236,60,89,56,178,5,37,255,255,174,173,253,163,42,95,154,234,190,223,207,143,218,47,255,127,253,252,163,185,255,10,255,107,223,223,191,77,15,191,128,255]},{"1847859":[255,24,255,160,255,240,159,65,190,194,191,181,74,122,197,127,128,220,34,132,59]},{"1847885":[170]},{"1847887":[80,191,186,255,255,255]},{"1847895":[123]},{"1847900":[85,255,174,254,250,63,255,255,1,34,64]},{"1847912":[255,255,255,255,255,255,255,255,133,127]},{"1847923":[255,35,255,59,255]},{"1847929":[255]},{"1847931":[255,170,85,80,175,128,127,84,171,170,130,128,117,85]},{"1847946":[42]},{"1847952":[255,128,255,84,191,194,10,117,85,85,42,42]},{"1847966":[192,192,128,255,84,255,215]},{"1847976":[255,255,255,255,255,255,255,255,127,255,171,255,151,255,117,255]},{"1847993":[255]},{"1847995":[255]},{"1847997":[255]},{"1847999":[255,21,255,2,255,32,100,1,81,125,3,158,2,64,2,5,129,255,21,255,2,32,187,175,81,127,124,190,159,70,69,169,6,21,234,2,253,255]},{"1848038":[1,1,253,255,223,253,255,251,215,125,255,255,255,255,100,255,80,255,3,254,35,220,1,254,47,208,127,255,105,141,160,225,64,170,45,18,212,129,138]},{"1848080":[255,95,15,185,128,159,191,106,255,40,255,62,31,15,7,2,95,208,59,68,190,192,234,170,168,58,190,149,111,58,250,85,143,255,143,255,1,255]},{"1848119":[255,18,255,129,127,80,239,173,250,254,255,85,95]},{"1848133":[127,5,175,64,168,87]},{"1848140":[138,32]},{"1848144":[254,255,245,85]},{"1848149":[255,250,170,255]},{"1848154":[253,168,255,213,127,127,254]},{"1848162":[255]},{"1848164":[128]},{"1848166":[175,170,23,168,170]},{"1848172":[213,160,255]},{"1848176":[255,255,255,255,127,255]},{"1848183":[255,191,255,2,255,32,255,128,255,171,254,64,239]},{"1848197":[186,119,255]},{"1848202":[226]},{"1848204":[239]},{"1848206":[170]},{"1848208":[171,255,64,127,69,186,136,136,255]},{"1848218":[93]},{"1848220":[186,16,85,85,171]},{"1848226":[208]},{"1848230":[255,136,255]},{"1848234":[191]},{"1848236":[85]},{"1848238":[255]},{"1848240":[254,255,239,255,186,255]},{"1848247":[255,255,255,191,255,69,255,170,255,154,233,20,251,22,188,209,239,24,37,24,46,77,24,239,56,154,247,24,247,67,182,42,182,194,28,203,48,178,12,56,104,150,4,28,24,22,28,251,174,255]},{"1848298":[253,10,219,24,191,16,225,255,227,255,160,255,4,251,227,255,205,247,211,239,191,199,16,239]},{"1848323":[255]},{"1848325":[170,255,255]},{"1848329":[81,139,32,223]},{"1848334":[255]},{"1848336":[16,255]},{"1848339":[255,85,170]},{"1848343":[170,174]},{"1848346":[116,10,32,64]},{"1848351":[5,16]},{"1848358":[255,170,255]},{"1848362":[213,32,191]},{"1848366":[250]},{"1848368":[239,255,255,255,170,255]},{"1848375":[255,255,255,213,255,191,255,250,255]},{"1848385":[255]},{"1848387":[255]},{"1848389":[170,255,255,1,80,159,32,221]},{"1848398":[80]},{"1848401":[255]},{"1848403":[230,85,170]},{"1848407":[170,174]},{"1848410":[96]},{"1848412":[34,247,5,239]},{"1848418":[25]},{"1848422":[87,2,255]},{"1848426":[223,32,42]},{"1848430":[21,170,255,255,255,255,170,255,168,255,255,255,223,255,8,255,16,255]},{"1848449":[254,1,255,29,29,188,255,66,20,253,2,83]},{"1848462":[5,4,2,253,2,232,228,7,12,241,188,3,1,14,168,238,80,254,3,2,23,3,31,2,190,255,234,23,242]},{"1848492":[185,4,81,175,253,254,252,254,7,248,77,177,235,253,241,255,16,254]},{"1848511":[251,128,255]},{"1848515":[255,53,253,175,183,71,240,213,192,192,128,135,135,128,254,128,64,118,140,54,193,88,163,64,106,42,127,80,63,129,128,191,128,245,56,255,47,236,80,213,170,170,213,208,239,127,255,127,255,252,131,214,41,204,191,85,63]},{"1848573":[127,64,56]},{"1848577":[255]},{"1848579":[255]},{"1848581":[95,255,255,255]},{"1848586":[85]},{"1848590":[85,85]},{"1848593":[159,2]},{"1848596":[160,95,101,239]},{"1848601":[134]},{"1848603":[255,170,255]},{"1848607":[255,96]},{"1848610":[253,2,95]},{"1848614":[245,128,121]},{"1848619":[170,170,85]},{"1848623":[255,255,255,253,255]},{"1848629":[255,111,154,121,255]},{"1848635":[255]},{"1848637":[255]},{"1848639":[170]},{"1848641":[255]},{"1848643":[255]},{"1848645":[255,239,255,250,4,68]},{"1848652":[170,42,85,85]},{"1848657":[95,42]},{"1848661":[255,67,255,4,251]},{"1848667":[255]},{"1848669":[255]},{"1848671":[255,160]},{"1848674":[213,42,255]},{"1848678":[83]},{"1848681":[5]},{"1848683":[187]},{"1848685":[127]},{"1848687":[255,255,255,213,255]},{"1848693":[255,239,188]},{"1848697":[255]},{"1848699":[255]},{"1848701":[213]},{"1848703":[170,224,191,96,255,112,255,254,255,154,60,24,28,164,160,89,91]},{"1848721":[87,41,210,96,223,54,206,60,203,28,243,24,231,12,243,249]},{"1848738":[246,105,255,48,63,57,24,117,24,239,24,239,4,255,14,255,36,223,96,159,246,201,24,231,24,231,24,71,4,170]},{"1848769":[255]},{"1848771":[255]},{"1848773":[255,248,255,170]},{"1848780":[186,186,21,183]},{"1848785":[85,59,128,20,235,136,248]},{"1848793":[255]},{"1848795":[255]},{"1848797":[255,162,255,255]},{"1848802":[196,59,235,20,143,7]},{"1848809":[85]},{"1848811":[255]},{"1848813":[255]},{"1848815":[93,170,255,68,255]},{"1848821":[255,248,119]},{"1848825":[255]},{"1848827":[255]},{"1848829":[85]},{"1848831":[234]},{"1848833":[255]},{"1848835":[255]},{"1848837":[255,20,255,170,2,69,69,171,175,87,125,5,80,255]},{"1848852":[111,144]},{"1848855":[20]},{"1848857":[255]},{"1848859":[255,4,255,42,253,250,5]},{"1848867":[255,144,111,235,235]},{"1848873":[87]},{"1848875":[255]},{"1848877":[251,2,213,170,255]},{"1848883":[255]},{"1848885":[255,20,255]},{"1848889":[253]},{"1848891":[186]},{"1848893":[84,2,170,26,253,77,190,6,223,3,253,173,45,87,215,191,255,84,255,93,24,190,13,251,6,17,7,3,252,128,255,64,255,171,255,186,69,76,178,38,221,233,254,2,125]},{"1848939":[127]},{"1848941":[191,1,84,186,231,76,243,34,221,1,254,2,209]},{"1848955":[169]},{"1848957":[64]},{"1848959":[171,191,64,85,128,42,64]},{"1848967":[224,127,127,158,255,234,245,101,250,64,51,128,47,192,63,95,170,128,127,161,127,85,181,186,218,140,64,80,170,128,85,21,224,128,127,1,222,21,234,2,101,140,255,80,255,128,127,31,234,128]},{"1849019":[225]},{"1849021":[245]},{"1849023":[250,208]},{"1849026":[2,2,191,159,33,33,254,219,213,170,172,64,64,232,47,47,84,254]},{"1849045":[255,80,175,1,219,42,170,83,83,255,255,255]},{"1849058":[85,170]},{"1849061":[223,80,175,139,116,42,213,64,188,168,64,208,255,1,253]},{"1849077":[96,80,174]},{"1849081":[139]},{"1849083":[42]},{"1849085":[83]},{"1849087":[191,4]},{"1849090":[3,6,255,255,127,126,164,164,64]},{"1849100":[1,1,22]},{"1849104":[130,133,4,3]},{"1849109":[255]},{"1849111":[254,81,245,186,186,212,213,232,232,250,1,252,2,46,209]},{"1849127":[255,174,81,5,234,42,68,23,190,122,253,248,253]},{"1849141":[46]},{"1849143":[128,10,245,5,186,42,213,1,232,1,255,143,127,243,63,213,221,124,127,170,163,80,112,168,252,254]},{"1849170":[112,128,12,240,42,223]},{"1849177":[59,4,165,6,54,83,255,255]},{"1849186":[122,5,60,3,45,210,171,87,81,11,169,96,4,4,1,255,10,255]},{"1849205":[255,32,15,128,108,80,166,137,86,80,171,255,95,122,250,253,255,7,39,5,240,59,193,5,209,254,128,160,160,128,5]},{"1849237":[2,168,136,5,240,58,192,6,208,127,128,95,10,160,90,2,255,112,143,245,250,251,196,213,250,126,1,255,85,32,255]},{"1849269":[253,80,175,5]},{"1849274":[59]},{"1849276":[5]},{"1849278":[126,128,171,171]},{"1849285":[170,160,245,93,93,234,74,66,64,133,132]},{"1849297":[84]},{"1849299":[255]},{"1849301":[255]},{"1849303":[95,10,8,180]},{"1849308":[182]},{"1849310":[125,4,171,170,5]},{"1849316":[170,170,85,245,93,162,235,21,73,189,130,122,171,85,5,255]},{"1849333":[85]},{"1849335":[170,85]},{"1849338":[234]},{"1849340":[64]},{"1849342":[132]},{"1849344":[231,239,71,103,17,57]},{"1849351":[6,13,4,4]},{"1849356":[175]},{"1849358":[87]},{"1849361":[16,32,152]},{"1849365":[108]},{"1849367":[174,9]},{"1849370":[5]},{"1849372":[175]},{"1849374":[81,6,63,224,39,64,41,186,6,87,245,242,250,251,80,123,168,191,63,208,7,248,1,84]},{"1849399":[168,5]},{"1849408":[21,255,221,194,93,255,138,127]},{"1849417":[255,224,127,224,31,240,95]},{"1849425":[255,32,192]},{"1849429":[255]},{"1849431":[255]},{"1849433":[255]},{"1849435":[159]},{"1849437":[255]},{"1849439":[175]},{"1849442":[31,95]},{"1849445":[5]},{"1849456":[125]},{"1849458":[223]},{"1849460":[93]},{"1849462":[127]},{"1849464":[255]},{"1849466":[127]},{"1849468":[31]},{"1849470":[95]},{"1849472":[127,254,67,172,251,250,175,255,21,255,43,255,5,255,170,255]},{"1849489":[254,19,19,4,250]},{"1849495":[255]},{"1849497":[255]},{"1849499":[255]},{"1849501":[255]},{"1849503":[255,1,9,239,253,1,187]},{"1849511":[11]},{"1849520":[127]},{"1849522":[255,2,251]},{"1849526":[175]},{"1849528":[189]},{"1849530":[107]},{"1849532":[175]},{"1849534":[234]},{"1849536":[254,169,240,128,161,244,253,246,123,253,255,241,115,231,199,207]},{"1849553":[168,255,255,11,171,1,244,2,249,14,251,24,251,48,247,87,255,127,127,85,255,10,203,5,111,10,191,28,111,56,127,255]},{"1849586":[255,128,255]},{"1849590":[255]},{"1849592":[127]},{"1849594":[255]},{"1849596":[127,16,255]},{"1849600":[129,131,197,139,159]},{"1849606":[85,56,254,171,85,86,251,250,85,85,101,229,100,139,191,63,66,80]},{"1849625":[170,168,84,4,250,170,85,38,230,139,239,63,191,109,125,85,255,3,87,1,251]},{"1849647":[69,231,25,239,16,191,64,125,128,255]},{"1849658":[87]},{"1849660":[251]},{"1849662":[85]},{"1849664":[215,172,70,253,128]},{"1849670":[10,175,168,221,64,171,170,183,81,11,87,215]},{"1849683":[253,255,255,90,90,2,138,20,20,64,162,164,1,123,248,255,253,255,255,165,245,117,255,235,255,29,191,90,91,255,7,255]},{"1849716":[255]},{"1849718":[255,10,255]},{"1849722":[255]},{"1849724":[191]},{"1849726":[91]},{"1849728":[232]},{"1849730":[162,80,95,93,191,209,20,111,42,191,128,85,16,238,255,255]},{"1849747":[80,162,253,191,191,148,148,106,106,42,42,1,1,255,255,242,80,253,255,110,110,123,251,149,213,213,255,254,255,255]},{"1849778":[242,13,255]},{"1849782":[255,145,255,4,255,42,255]},{"1849790":[255]},{"1849792":[20,22,3]},{"1849796":[171,217,254,10,117,152,169,64,85,139,138,39,234,254,42]},{"1849812":[33,217,247,250,107,97,183,163,77,69,186,170,255,189,132,172,216,249,252,251,241,251,227,247,198,206,173,189,254,67,40,215,249,6,251,4,251,4,247,8,207,49,191,66,182,30,98,128,80,42,239,175,237,5,247,162,95,224,255,162,105,63,127,128,128,42,80,80,250,250,253,253,95,95,255,255,63,55,64,157,126,174,255,255,255,239,95,87,191,191,93,93,30,233,157,98,250,5,255]},{"1849912":[255,16,255,168,255,64,255,162,170,234,149]},{"1849924":[32]},{"1849926":[255,255,95,95,255,191,253,21,255,175,21,255,255,42,5]},{"1849943":[127,160,191,64,77,234,234,80,80,255,255,42,64,48,21,255,255,255,255,255,255,255,255,255,255,234,21,64,191,37,218,255]},{"1849976":[255]},{"1849978":[255]},{"1849980":[255]},{"1849982":[255]},{"1849984":[128,168,85]},{"1849990":[125,125,255,255,255,255,255,255,255,255,86,254,255,170,85]},{"1850006":[130,255]},{"1850009":[255]},{"1850011":[151]},{"1850013":[183]},{"1850015":[35,255,255,175]},{"1850020":[40,125,255,255,255,255,255,255,255,255,255,255,168,87]},{"1850035":[255,85,170,125,130,255]},{"1850042":[255]},{"1850044":[255]},{"1850046":[255]},{"1850048":[10,1,241,10,24,18,8,58,249,180,159,226,247,155,23,101,9,4,91,4,255,30,255,193,111,235,69,149,12,167,154,111,254,245,255,10,2,251,247,205,178,158,170,248,211,251,221,61,4,249,174,241,251]},{"1850102":[28,227,237,2,215,26,175,96,247,104]},{"1850114":[160,10]},{"1850117":[10]},{"1850119":[138,77,1,103,34,255,136,251,234,20]},{"1850130":[95,160,255,85,250,112,242,242,216,216,118,254,21,85,235,254,85,10,85,170,255,117,191,178,191,152,137,136,238,68,21,235,85,255,170,85]},{"1850167":[255,77,179,103,186,255]},{"1850174":[251,174]},{"1850178":[20,171,1,32]},{"1850183":[255,160,87,4,171,106,85,187,174,127,21,239,16,254,223,255]},{"1850200":[87]},{"1850202":[251,80,149,128,68,64,149,234,68,171,222,32,255]},{"1850216":[255,8,255,80,255,128,255,64,106,149,64,255,32,223]},{"1850231":[255,160,95,4,251,106,213,187,238]},{"1850243":[255,87]},{"1850247":[64,2,98]},{"1850251":[253,160,95]},{"1850255":[255,255,127,245,10,168,255,66,2,232,2,253]},{"1850268":[95]},{"1850270":[255]},{"1850272":[127,128,10,245,168]},{"1850278":[255]},{"1850280":[119,136,255]},{"1850284":[255]},{"1850286":[255]},{"1850288":[128,127]},{"1850291":[255]},{"1850293":[255,189,255,157,119,2,255,160,95]},{"1850303":[255,120,56,112,255,191,80,58,122,170,218,53,69,255,255,212,255,191,239,243,68,64,190,245,159,80,170]},{"1850331":[53,96,255,75,212,183,24,60,251,49,112,181,106,175,112,207,96,239,16,127,160,56,199,112,143,33,223,48,197,37,223,138,255,96,143,64,63,85]},{"1850371":[187,255]},{"1850374":[170,170,171,171,87,87,175,255,179,255,170,251,255]},{"1850389":[255]},{"1850391":[170]},{"1850393":[171]},{"1850395":[87,80,175,76,179,174]},{"1850402":[68,187]},{"1850406":[85,170,254,1,253,2,255]},{"1850414":[255]},{"1850416":[4,255,68,187]},{"1850421":[255,85,85,84,254,168,253]},{"1850429":[255]},{"1850431":[255,85,21]},{"1850435":[170,174,4,171,169,191,191,125,95,171,255,85,213,170,255,255]},{"1850453":[255,2,169]},{"1850457":[191,34,95,84,171,170,255,170,21,85,170]},{"1850469":[85,87,168,239,16,255]},{"1850476":[255]},{"1850478":[213,42]},{"1850481":[234,85,170]},{"1850485":[251,86,87,64,239,160,255]},{"1850493":[255]},{"1850495":[255,85,84,1,33,186,138,255,85,255,255,81,255,186,186,85,215,170,255,119,139,1,254,170,85]},{"1850521":[255,174,251,69,255,170,255,170,85,85,168,1,206,254,1,254,1,255]},{"1850540":[186,69,215,40]},{"1850545":[171,87,170,1,116,170,254]},{"1850553":[254]},{"1850555":[255]},{"1850557":[255]},{"1850559":[255,181,53,64,32,95,95,221,146,43,63,20,191,74,31,96,250,192,181,148,171,96,223,138,178,212,63,75,63,53,223,255,159,74,245,84,107,32,159,90,101,222,225,223,224,63,192,26,101,202,10,20,107,32,64,8,250,64,62,64,191,32,223]},{"1850623":[255,87,87,4,6,251,251,240,63,170,221,64,191,170,117,16,170]},{"1850641":[87,64,191]},{"1850645":[255,143,63,85,221,191,191,85,117,239,239,168,87,64,191]},{"1850661":[255,143,112,221,34,191,64,117,138,170,81,168,168,64,191]},{"1850677":[4,128,143]},{"1850681":[221]},{"1850683":[191]},{"1850685":[117]},{"1850687":[239,255,255,65,107,170,191,10,255,152,119,2,255,34,221]},{"1850703":[255]},{"1850705":[255]},{"1850707":[255,21,255,245,255,103,119,253,255,221,221,255,255]},{"1850721":[255]},{"1850723":[255]},{"1850725":[234,245,10,103,152,253,2,221,34,255]},{"1850739":[255]},{"1850741":[85]},{"1850743":[245]},{"1850745":[103]},{"1850747":[253]},{"1850749":[221]},{"1850751":[255,242,243,84,253,174,254,244,254,3,255,1,255,42,247,1,255,15,241,6,249,83,252,9,254,253,254,254,255,247,247,255,255,12,246,2,255,1,175,1,247,252,3,252,1,212,42,254,1,12,3,2,253]},{"1850805":[86]},{"1850807":[10]},{"1850809":[253]},{"1850811":[255]},{"1850813":[213]},{"1850815":[254,239,250,87,253,162,255,1,255,202,191,198,253,11,191,221,119,21,250,2,255,93,255,126,255,255,63,191,125,63,191,223,183,5,234]},{"1850851":[255]},{"1850853":[162,84,129,116,138,27,196,116,139,10,245,5,21]},{"1850867":[255]},{"1850869":[221]},{"1850871":[254,64,245,2,251]},{"1850877":[244,8,234,173,250,255,85,32,255,41,215,175,255,117,223,191,255,215,127,87,250,170,255,223,255,255,215,255,255,255,223,255,255,255,127,7,168]},{"1850915":[255]},{"1850917":[32,124,1,80,175,170,85,64,191,168,87,5,87]},{"1850931":[255]},{"1850933":[223,40,254]},{"1850937":[80,32,170]},{"1850941":[64,128,168,136,255,234,127,34,255,221,119,255,255,93,255,255,255,87,255,119,255,149,255,255,255,255,127,255,255,255,255,255,255,255,255,119,136]},{"1850979":[234,8,34,130,85]},{"1850985":[255,160,95]},{"1850989":[255]},{"1850991":[255]},{"1850993":[119]},{"1850995":[255]},{"1850997":[221,128,170]},{"1851003":[162]},{"1851007":[168,170,127]},{"1851011":[255,179,255,121,255,164,167,72,235,145,145,224,224,79,127,231,255,251,255,253,255,247,247,251,251,213,213,232,232,69,186,1,24]},{"1851045":[183,128,123,2,174,1,239]},{"1851053":[187]},{"1851055":[247]},{"1851057":[117]},{"1851059":[239]},{"1851061":[72]},{"1851063":[132]},{"1851065":[89]},{"1851067":[182]},{"1851069":[110]},{"1851071":[31,64,64,93,255,248,248,2,3,17,63,10,27,5,221,10,255,255,255,255,255,253,253,239,238,126,81,191,170,250,197,253,235]},{"1851105":[64,2,93,2,248,2,17,16,174,14,213,226,250,104,244]},{"1851121":[191]},{"1851123":[162]},{"1851125":[5]},{"1851127":[254]},{"1851129":[209]},{"1851131":[110]},{"1851133":[39,1,138,181,7,240,240,5,47,168,255,64,255,160,191]},{"1851149":[255,129,62,66,71,254,254,122,85,87,175,191,95,95,191,252,124,255,62,184,176]},{"1851171":[241]},{"1851173":[170]},{"1851175":[80]},{"1851177":[160,64,64,3,128,65,192,10,69]},{"1851187":[15]},{"1851189":[213,7,168,31,64,31,224,124,3,190,192,2,253,10,95,2,253,30,224,170,80,95,160,191,96,93,161,255,252,245,171,255,61,255,224,165]},{"1851226":[218,128,128,32,75,1,2,1]},{"1851235":[84,2,192,30,1,250,5,127]},{"1851244":[255]},{"1851246":[252,2,254]},{"1851250":[1,170,61]},{"1851254":[234]},{"1851257":[90,138,37]},{"1851261":[95,9,180,240,64,134,152,200,48,149,137,187,55,93,91,255,159,127,126,63,64,63,184,255]},{"1851286":[251,9,113,51,252,89,190,159,255,126,176,143,70,1,200,55,148,98,142,64,7,164,97,32]},{"1851311":[129,16,64,26,160,64]},{"1851318":[9,132,49,140,88,2,158,64,126]},{"1851328":[191,16,164,4,191,148,255,232,255,68,254,177,252,67,122,45,255,16,255,4,255,148,255,232,255,68,255,176,127,64,191,40]},{"1851361":[66,160,91]},{"1851365":[67]},{"1851367":[23]},{"1851369":[191,1,94,131,60,69,154,16]},{"1851378":[164]},{"1851380":[148]},{"1851382":[232]},{"1851384":[64,4,160,16,64,128,32,72,248]},{"1851394":[127,42,253,2,229,17,18,239,140,87,51,239,41,215,239,16,255,42,255]},{"1851414":[186,68,237,16,242,9,192,28,192,62,7,248]},{"1851427":[149,2,253,95,160,255]},{"1851434":[127,128,255]},{"1851438":[255]},{"1851442":[42]},{"1851446":[68]},{"1851448":[16]},{"1851450":[9]},{"1851452":[28]},{"1851454":[62]},{"1851456":[240,239,43,255,5,255,255,175,238,255,235,92,251,213,252,61]},{"1851473":[31]},{"1851475":[255]},{"1851477":[255]},{"1851479":[80,128,17]},{"1851483":[183,128,46]},{"1851487":[195]},{"1851491":[11]},{"1851504":[239]},{"1851506":[43]},{"1851508":[239]},{"1851510":[175]},{"1851512":[127]},{"1851514":[92]},{"1851516":[85]},{"1851518":[60]},{"1851520":[1,255,212,223,91,252,5,243,9,235,138,255,48,255,106,255]},{"1851537":[255,32,212,3,251,12,117,20,235]},{"1851547":[79]},{"1851549":[191]},{"1851551":[127]},{"1851554":[11,223,7,94,6,7]},{"1851561":[8,48,56,64,112,128,192,235]},{"1851570":[223]},{"1851572":[95,1,215]},{"1851576":[201]},{"1851578":[186]},{"1851580":[122]},{"1851582":[254]},{"1851584":[149,191,2,61,170,175,174,255,85,255,170,255,85,255,174,255,64,223,194,194,80,170]},{"1851607":[255]},{"1851609":[255]},{"1851611":[255]},{"1851613":[255]},{"1851615":[255,96,245,255,253,5,175]},{"1851623":[6]},{"1851625":[1]},{"1851627":[40]},{"1851629":[5]},{"1851631":[12,245]},{"1851634":[255,2,175]},{"1851638":[174]},{"1851640":[85]},{"1851642":[170]},{"1851644":[85]},{"1851646":[174]},{"1851648":[127,255,254]},{"1851652":[160,255,247,247,85,255,221,221,85,255,175,255]},{"1851665":[255,255,255]},{"1851669":[160,8,247]},{"1851673":[255,34,221]},{"1851677":[255]},{"1851679":[255]},{"1851681":[127,255,89,95,255]},{"1851687":[119]},{"1851689":[68]},{"1851691":[221]},{"1851693":[1]},{"1851695":[165,127]},{"1851698":[255,166,255]},{"1851702":[247]},{"1851704":[85]},{"1851706":[221]},{"1851708":[85]},{"1851710":[175]},{"1851712":[238,186,235,2,71,184,85,85,118,254,85,85,219,251,117,117,1,170,253,246,71,71,170,85,1,254,170,85,4,251,138,117,84,254,246,255,255,255]},{"1851751":[85]},{"1851753":[38]},{"1851755":[85]},{"1851757":[219]},{"1851759":[117,254]},{"1851762":[255]},{"1851764":[255]},{"1851766":[85]},{"1851768":[118]},{"1851770":[85]},{"1851772":[219]},{"1851774":[117]},{"1851776":[170,221,252,170,245,2,86,1,233,160,67,80,134,162,13,69]},{"1851793":[136,84,170,253,254,175,4,29,169,170,66,69,134,138,5,119,255,170,254,255,254,84,85,73,236,19,27,36,38,64,76,255]},{"1851826":[254,1,254,1,85,2,237,3,91,4,166,24,77,48,80,135,235,20,69,64,128,47,168,128,64]},{"1851852":[170,168,85,84,120,152,192,20,191,122,208,144,87,130,191,5,85,173,170,84,215,191,255,20,122,255,175,191,40,170,64,69,2,167,1,17,191,64,63,192,255]},{"1851894":[191]},{"1851896":[170]},{"1851898":[69]},{"1851900":[175]},{"1851902":[85]},{"1851904":[87,168,245]},{"1851908":[255,69]},{"1851911":[255]},{"1851913":[23]},{"1851915":[43]},{"1851917":[5]},{"1851919":[10,87,87]},{"1851924":[186,69]},{"1851928":[232,104,212,64,250,2,245,1,255,255,245]},{"1851940":[69,255,255,255,23,127,43,107,5,7,10,11,255]},{"1851954":[245,10,255]},{"1851958":[255]},{"1851960":[127]},{"1851962":[107]},{"1851964":[7]},{"1851966":[11]},{"1851968":[255,1,132,42,191,18,175,248]},{"1851977":[255,34,255]},{"1851981":[95]},{"1851983":[175,254,254,42]},{"1851988":[232,82,175,175]},{"1851994":[34,34,160,32,80,16,255,255,174]},{"1852004":[87,250,87,87,255,254,221,221,95,123,175,181,255]},{"1852018":[132,123,191,64,255,168,255]},{"1852026":[255,34,127]},{"1852030":[191]},{"1852032":[254,87,11,180,241,15,254,15,108,145,8,240,12,245,31,226,169,166,180,14,6,2,242,243,108,111,14,11,13,3,23,26,246,255,135,54,249,7,253,254,249,234,252,73,245,239,244,87,255]},{"1852082":[54,200,244]},{"1852086":[255,1,253,1,252]},{"1852092":[253]},{"1852094":[247,8,176,13,206,176,27,65,63,110,255,87,111,191,247,13,159,235,95,104,204,53,157,243,81,192,170,42,68,68,242,242,21,21,249,126,210,229,207,190,46,255,255,253,255,107,255,247,255,158,30,1,252,248,79,64,191,128,253]},{"1852154":[123]},{"1852156":[255]},{"1852158":[254]},{"1852160":[255,42,199,32,5,191,255,239,255,213,221,221,255,247,255,255,85,127,24,71,250,133,16]},{"1852184":[170,128]},{"1852187":[34,170,162,16,16,170,42,248,224,69,186,229,255,213,127,221,221,247,93,255,239,255]},{"1852210":[88,167,122,5,245,10,127]},{"1852218":[221,34,93]},{"1852222":[239]},{"1852224":[207,129,250,39,93,253,255,218,255,98,119,51,251,81,85,84,112,240,5,250,162,93,37,37,157,21,68,136,170,4,1,170,191,176]},{"1852259":[39,93,162,90,208,98,234,17,119,81,251,84,85,207,49,5,216,162,93,127,138,255]},{"1852282":[85,170,251,4,85,170,170,85,187,212,251,255,254,171,255,137,255,107,255,95,127,107,87,2,68,187,4,251,84,84,118,119,148,149,160,1,20,133,253]},{"1852323":[212,255]},{"1852326":[169,2,137,136,65,106,10,255,64,123,170,85,68,43]},{"1852341":[255,252,170,254,1,212,43,170,84,84,170,145,95,31,119,63,95,53,255,31,53,95,171,127,85,123,106,38,145,128,31,128,63,10,32,202,10,52,84,170,106,145,85,127,64,224,119,223,64,234,213,224,21,160,139,128,85,192,42,32,215,128,104,128,127]},{"1852407":[255,202,21,20,235,170,21,145,110,125,255,255,183,255,255,85,255,253,85,223,187,247,93,255,239,130,125]},{"1852435":[255]},{"1852437":[255,170]},{"1852440":[168,168,100,68,162,170,16,16,255]},{"1852451":[183,186,69,170,85,2,85,32,155,8,93]},{"1852463":[239]},{"1852465":[255]},{"1852467":[72]},{"1852469":[186]},{"1852471":[255,170,85,68,187,162,85,16,239,252,254,255,95,255,238,68,228,85,85,187,187,213,213,255,255,3,253]},{"1852499":[255]},{"1852501":[238,170,10]},{"1852512":[254,1]},{"1852515":[95,170,85,177,78,170,85,68,187,42,213]},{"1852527":[255]},{"1852529":[255]},{"1852531":[160]},{"1852533":[170,17,238,170,85,68,187,42,213]},{"1852543":[255,102,102,253,255,251,172,4,4,85,85,185,185,85,85,238,238,17,119,2,255,4,172,170,170]},{"1852570":[2,2]},{"1852576":[238,17]},{"1852579":[253,172,83,81,174,170,85,68,187,170,85,17,238,136,119]},{"1852595":[2]},{"1852597":[172,81,174,170,85,68,187,170,85,17,238,158,122,61,255,202,117,80,112,112,112,80,48,89,25,182,190,1,123,162,223,53,117,142,254,5,117,138,186,36,29,8,62,10,245]},{"1852643":[125,5,234,1,250,138,117,5,250,170,84,73,176]},{"1852657":[107]},{"1852659":[226]},{"1852661":[85,1,238,138,53,5,186,162,29,65,190,136,133,85,255,170,85,4]},{"1852686":[4]},{"1852688":[119,247,170,255,85,85,251,251,85,85,187,187,85,85,170,170,133,88]},{"1852707":[85,85,170]},{"1852711":[174,170,16,68,170,170,84,85,174]},{"1852721":[247]},{"1852723":[170]},{"1852725":[85]},{"1852727":[251,170,85,68,187,170,85,81,170,138,87,64,255,170,85]},{"1852743":[10]},{"1852750":[64]},{"1852752":[119,119,191,255,85,85,255,255,95,95,255,255,95,95,191,191,85,138,4,64,85,170,10,128,160]},{"1852779":[32,160,64,64,200]},{"1852785":[117]},{"1852787":[191]},{"1852789":[85]},{"1852791":[255,160,95]},{"1852795":[255,160,95]},{"1852799":[191,170,127]},{"1852803":[255,170,127,5,175,3,3]},{"1852812":[1,1]},{"1852816":[127,127,255,255,127,127,255,255,255,255,255,255,255,255,255,255,85,170]},{"1852836":[16,170,170,5]},{"1852841":[3]},{"1852845":[1]},{"1852849":[85]},{"1852851":[255]},{"1852853":[85]},{"1852855":[250]},{"1852857":[252]},{"1852859":[255]},{"1852861":[254]},{"1852863":[255,239,255]},{"1852867":[223,146,255,86,254,115,127,200,222,103,111]},{"1852879":[14,159,159,143,223,207,239,239,239,231,255,243,247,243,251,251,255]},{"1852897":[239,32,80]},{"1852901":[178,128,86]},{"1852905":[123,2,204]},{"1852909":[111]},{"1852911":[4]},{"1852913":[16]},{"1852915":[175]},{"1852917":[77]},{"1852919":[169]},{"1852921":[148]},{"1852923":[51]},{"1852925":[144]},{"1852927":[251,255,255,130,56,171,171,247,255,248,248,248,248,72,64,1]},{"1852944":[255,255,255,255,255,255,255,255,253,253,250,250,246,246,254,254]},{"1852961":[255]},{"1852963":[69]},{"1852965":[255]},{"1852967":[255]},{"1852969":[250,5,248,10,73,1,1]},{"1852979":[186]},{"1852983":[8]},{"1852985":[7]},{"1852987":[2]},{"1852989":[181]},{"1852991":[254,181,181,167,21,255,255,64,64,16,16]},{"1853005":[2,66,23,245,245,255,255,255,255,234,234,16,16,170,170,110,68,191,170]},{"1853025":[191,16,93]},{"1853029":[255,4,81,128,127]},{"1853035":[85,40,187,66,85]},{"1853041":[74]},{"1853043":[162]},{"1853047":[187]},{"1853049":[111]},{"1853051":[255]},{"1853053":[253]},{"1853055":[170]},{"1853058":[93,255,244,244,10,30]},{"1853065":[41,42,58,64,226,170,235,24,24,255,255,244,244,157,138,175]},{"1853082":[125,42,255,64,213,171,8,231,162,255]},{"1853093":[255,9,117,134,255,109,213,93,191,148,84]},{"1853105":[247]},{"1853109":[11]},{"1853111":[235]},{"1853113":[214]},{"1853115":[239]},{"1853117":[93,1,190,112,123,200,248,28,28,172,173]},{"1853129":[168,130,186]},{"1853133":[238,128,118,255,113,249,248,63,60,223,173,249]},{"1853146":[126,186,254,236,249,112,132,254,53,251,35,223,210,94,81,255,68,71,17,18,15,137,1,132]},{"1853171":[3]},{"1853173":[195,1,242]},{"1853177":[87,56,197,236,16,240,143,10,245,8,14,2,161,21,107,175,82,85,174,47,80,23,56,90,80,119,14,255,1,244,97,164,2,208,132,228,192,96,48,175]},{"1853218":[113,241,94,252,159,128,255]},{"1853226":[127]},{"1853228":[191]},{"1853230":[223,64,80,165,6,249,1,92,96,138]},{"1853241":[89,128,43,64,27,32,79,255,65,21,138,191,108,87,135,255,21,255,43,255,85,127,63,1,65,244,128,128,44,47,7,31,21,47,43,95,85,191,63,254]},{"1853282":[127,96,255]},{"1853286":[208,40,234,10,212,4,170,10,64,128,1,190,128,107]},{"1853301":[83,7,208,21,224,43,208,85,160,63,64,255,124,255,27,255,23,255,251,255,214,255,238,253,234,254,253,255,124,31,27,63,23,255,251,255,214,255,238,255,232,255,252,128,139,228,4,232,42]},{"1853351":[21]},{"1853353":[175]},{"1853355":[85,2,61,1,22,116,8,27,224,21,194,234,17,80,134,170,68,192,40,232,20,240,95,255,170,254,79,239,190,77,242,176,207,80,239,144,239,255,80,239,170,255,78,255,174,243,76,239,144,236,83,238,145,47,160,80,69,1,186,16,237,191,65,95,160,191,64,127,128,80]},{"1853426":[170,16,68,10,2,172,12,64,16,128,19,64,17,128,7,255,178,237,36,223,138,126]},{"1853449":[244,224,218,64,248,4,252,192,56,236,179,192,59]},{"1853463":[245,192,63,192,255,112,207,184,67,255]},{"1853474":[95,160,255]},{"1853478":[255]},{"1853480":[255]},{"1853482":[63,192,191,64,255]},{"1853488":[56]},{"1853490":[19,160,59]},{"1853494":[244]},{"1853496":[52]},{"1853498":[58,192,136,64,64]},{"1853504":[120,222,244,221,236,159,181,245,72,255,63,209,127,177,255,253,129,38,66,37]},{"1853525":[127,10,245]},{"1853529":[247]},{"1853531":[238,32,206]},{"1853535":[2]},{"1853539":[4]},{"1853541":[12]},{"1853543":[53]},{"1853545":[64]},{"1853552":[92]},{"1853554":[156]},{"1853556":[159]},{"1853558":[181]},{"1853560":[222]},{"1853562":[17]},{"1853564":[145]},{"1853566":[253]},{"1853568":[1,255]},{"1853571":[255]},{"1853573":[255,16,31,5,255,192,255,64,127,16,223]},{"1853585":[255]},{"1853587":[255]},{"1853589":[255,224,16]},{"1853593":[255]},{"1853595":[29]},{"1853597":[191]},{"1853599":[103]},{"1853606":[15,31]},{"1853609":[1]},{"1853616":[127]},{"1853618":[244]},{"1853620":[248]},{"1853622":[31]},{"1853624":[133]},{"1853626":[255]},{"1853628":[127]},{"1853630":[223]},{"1853632":[21,255,170,255,85,255,175,80,118,254,34,255]},{"1853645":[255,10,255]},{"1853649":[255]},{"1853651":[255]},{"1853653":[255,175,175,1,254]},{"1853659":[255]},{"1853661":[255]},{"1853663":[255]},{"1853665":[16]},{"1853667":[42]},{"1853669":[5,255,222]},{"1853673":[118]},{"1853680":[149]},{"1853682":[170]},{"1853684":[85]},{"1853686":[255,33,118]},{"1853690":[34]},{"1853692":[160]},{"1853694":[10]},{"1853696":[21,255,185,253,89,251,234]},{"1853704":[170,170,170,255,84,255,170,255]},{"1853713":[255,2,253,4,251,255,245,85,170]},{"1853723":[255]},{"1853725":[255]},{"1853727":[255]},{"1853729":[20]},{"1853731":[185]},{"1853733":[89,245,223]},{"1853737":[170]},{"1853739":[32]},{"1853741":[84]},{"1853744":[21]},{"1853746":[185]},{"1853748":[89]},{"1853750":[255,32,170]},{"1853754":[170]},{"1853756":[84]},{"1853758":[170]},{"1853760":[85,255,156,220,139,170,191,136,173,170,175,241,78,243,154,235]},{"1853777":[255,35,220,85,170,116,200,85,170,10,249,12,227,20,203]},{"1853793":[68]},{"1853795":[148]},{"1853797":[139,203,252,2,175,12,171,16,94,40,184,85]},{"1853810":[156]},{"1853812":[139]},{"1853814":[255]},{"1853816":[175]},{"1853818":[175]},{"1853820":[94]},{"1853822":[186]},{"1853824":[222,142,181,21,106,42,254,33,170,185,170,255,68,255,170,255,17,158,42,21,85,42,84,33,68,168]},{"1853851":[255]},{"1853853":[255]},{"1853855":[255,80,158,128,36]},{"1853861":[106,171,117,19,187]},{"1853872":[222,32,181,64,106,128,255]},{"1853880":[187]},{"1853882":[170]},{"1853884":[68]},{"1853886":[170]},{"1853888":[238,238,85,85,170,162,174,81]},{"1853897":[81,137,221,68,255,170,255,17,238,170,85,85,163]},{"1853911":[81,174]},{"1853914":[34,221]},{"1853917":[255]},{"1853919":[255]},{"1853921":[170]},{"1853923":[64,8,171,255,81,81,81]},{"1853936":[238]},{"1853938":[85]},{"1853940":[171]},{"1853942":[255]},{"1853944":[81]},{"1853946":[137]},{"1853948":[68]},{"1853950":[170]},{"1853952":[168,128,84]},{"1853957":[17,251]},{"1853961":[127,145,213,85,255,34,119,87,135,171]},{"1853972":[238]},{"1853976":[128]},{"1853978":[42,213]},{"1853981":[255,136,119,40,175,84,84,17,17,251]},{"1853992":[127,127]},{"1853997":[16]},{"1854000":[175]},{"1854002":[84]},{"1854004":[17]},{"1854006":[251,4,127]},{"1854010":[145]},{"1854012":[85]},{"1854014":[34]},{"1854017":[5]},{"1854019":[34]},{"1854021":[31,199,8,21,239,84,84,42,170,85,84,250,18,221,17,224,64,8]},{"1854040":[21,21,171,84,85,170,43,85,5,22,34,17,31,91,207]},{"1854056":[255,250]},{"1854061":[2,129,129,23]},{"1854066":[51]},{"1854068":[95]},{"1854070":[199,56,250]},{"1854074":[84]},{"1854076":[42]},{"1854078":[85]},{"1854080":[23,104,40,215,53,218,24,247,143,112,176,66,136,80,32,192,139,143,52,56,29,25,176,56,191,174,221,160,71,65,255]},{"1854112":[117,237,251,125,235,223,231,48,238,191,130,208,216,73]},{"1854127":[224,247]},{"1854130":[255]},{"1854132":[255]},{"1854134":[48,136,191]},{"1854138":[210,32,217,32,224]},{"1854144":[5,251,2,255,67,189]},{"1854151":[63,255,81]},{"1854155":[175]},{"1854157":[85]},{"1854160":[4,4]},{"1854164":[66,66,200]},{"1854168":[238,234,80,16,170]},{"1854174":[119]},{"1854176":[255,173,255,66,255,227,63,192,251,191,175,16,85]},{"1854190":[136,136,255]},{"1854194":[255]},{"1854196":[255]},{"1854198":[192,8,191]},{"1854202":[191]},{"1854204":[85]},{"1854208":[63,215,187,255,255,125]},{"1854215":[191,255,24]},{"1854219":[255]},{"1854221":[127]},{"1854223":[111,42,42,16,16,170,170,64]},{"1854232":[239,136]},{"1854236":[128]},{"1854238":[16]},{"1854240":[255,189,255,171,255,215,191,64,152,247,255]},{"1854252":[127]},{"1854254":[239,128,253]},{"1854258":[239]},{"1854260":[215]},{"1854262":[64]},{"1854264":[247]},{"1854266":[255]},{"1854268":[127]},{"1854270":[111]},{"1854272":[254,244,213,209,250,242,139,255,238,129,97,253]},{"1854285":[255]},{"1854287":[255,170,161,68,106,170,167]},{"1854295":[139,238,145,65,67]},{"1854304":[244,94,209,149,242,88,255]},{"1854312":[129,111,255,32,255]},{"1854318":[255]},{"1854320":[94,1,149,42,88,5]},{"1854327":[139,110,16,190,2,255]},{"1854334":[255]},{"1854336":[235,64,85,2,169,2,63,255,173,83,215,209,127,251,246,243,170,23,86,169,168,85,128,63,174,85,84,121,124,127,116,126,64,232,2,84,2,168,252,3,80,251,217,134,251]},{"1854382":[251]},{"1854384":[234,21,84,171,168,85]},{"1854391":[188,174]},{"1854394":[140,41,132,3,140,10,191,85,242,167,106,209,255,255,41,86,213,85,186,59,85,85,42,128,80,205,170,21]},{"1854423":[255,41,119,213,255,170,111,85,255,64,63,5,183,17,251,127,128,214,94,85]},{"1854444":[59,129,85]},{"1854448":[42,149,80,42,170,68]},{"1854455":[127,169]},{"1854458":[128,42,144,68]},{"1854463":[170,221,119,170,255,32,159,255,117,241,14,68,84,170,186,81,81,136,42]},{"1854483":[85,32,223]},{"1854487":[117,241,255,68,254,170,255,81,251,34,247,85,255,159,191,117,138,14,14,84,17,186,16,81,4,136,85]},{"1854515":[170,32,64]},{"1854519":[117,241]},{"1854523":[170]},{"1854525":[69]},{"1854527":[170,85,255,170,255,69,255,223,17,16,234]},{"1854539":[1,170,171]},{"1854545":[170]},{"1854547":[85]},{"1854549":[186,32,49,16,250]},{"1854555":[171,170,255]},{"1854559":[170,170,255,85,255,186,255,17,206,239,234,1,85,171,1]},{"1854575":[85]},{"1854577":[85]},{"1854579":[170]},{"1854581":[69]},{"1854583":[49,21]},{"1854587":[170]},{"1854589":[84]},{"1854591":[170,85,255,170,255,84,254,255]},{"1854601":[170]},{"1854603":[157]},{"1854605":[85]},{"1854609":[170]},{"1854611":[85]},{"1854613":[170]},{"1854617":[170]},{"1854619":[191]},{"1854621":[85]},{"1854623":[170,170,255,85,255,171,254]},{"1854631":[255,255,170,157,221,85,255]},{"1854639":[85]},{"1854641":[85]},{"1854643":[170,1,84]},{"1854648":[85]},{"1854651":[34]},{"1854655":[170,29,149,178,178,108,214,239,40,28,148,16,195,24,97,85,34,32,177,8,56,16,146,16,56]},{"1854681":[148,9,203,5,101,73,170,194,188,69,186,131,238]},{"1854695":[255,231,152,230,218,96,250,99,62,66,21,69,130,1,84]},{"1854712":[99,4,37]},{"1854716":[1,4,65,128,17,144,168,168,69,69,247,73,1]},{"1854731":[245]},{"1854733":[255,16,239]},{"1854737":[144,2,170]},{"1854741":[69,73,73]},{"1854746":[36,245,129,255,17,239,239,129,85,2,186]},{"1854759":[247,255,1,219,209,126,126,254,238,110,16,85,170,186,69]},{"1854775":[8,254]},{"1854778":[46]},{"1854780":[129]},{"1854782":[17]},{"1854784":[70]},{"1854786":[21]},{"1854788":[26]},{"1854790":[85,138,6]},{"1854794":[162,231]},{"1854797":[254]},{"1854799":[255,17,17,170,170,69,69,170,170,81,81,5,231,150,254,174,255,238,70,85,191,186,26]},{"1854823":[117,174,6,88,64,105,104,81,81,168,17,64,170,160,69]},{"1854839":[138,168,81,29,162,151]},{"1854846":[174]},{"1854848":[42]},{"1854850":[84]},{"1854852":[170]},{"1854854":[17,139,170]},{"1854858":[174,170,4,174,8,95,85,85,171,171,85,85,239,239,85,85]},{"1854875":[170,170,164,87,95,170,42,84,84,170,170]},{"1854887":[117,170,170,85,4,81,10,160]},{"1854896":[128,85]},{"1854899":[171]},{"1854901":[85]},{"1854903":[138]},{"1854905":[85,81,170,241,4,247,8,160,6,68,7,168,1,16,155,168]},{"1854922":[235,124,64,255,168,255,93,95,189,191,86,87,254,255,85,85,20,104,191,198,87,186,160,163,64,70,168,171]},{"1854951":[117,170,169,131,151]},{"1854957":[57]},{"1854959":[69]},{"1854961":[92]},{"1854963":[185]},{"1854965":[84]},{"1854967":[138]},{"1854969":[84]},{"1854971":[104,134,64,18,168,128,40,193,148,188,134,85,213,5]},{"1854986":[10,159,224,255,32,111,127,85,190,170,198,196,255,255,218,216,245,238,191,171,143,197,130,170,65,213,60,187]},{"1855015":[127,47,199]},{"1855019":[81]},{"1855021":[244,16,106]},{"1855025":[87]},{"1855027":[42]},{"1855029":[69]},{"1855031":[128]},{"1855033":[18,4,170,11]},{"1855038":[5,128]},{"1855041":[133,162,247,16,42,87,127,16,174,128,255]},{"1855053":[255]},{"1855055":[255,175]},{"1855058":[247,162,171]},{"1855062":[255,255,175]},{"1855066":[127,157,255,62,255,255,42,255,162,93,145,255,40,255,17,255]},{"1855083":[98]},{"1855085":[193]},{"1855089":[122]},{"1855091":[170]},{"1855093":[197]},{"1855097":[65,29,128,62]},{"1855102":[255]},{"1855105":[187,128,255,64,127,104,232]},{"1855113":[255,5,250,42,213,5,250,255,3,127,174,191,71,232,232,255,1,255,250,250,208,229,224,68,252]},{"1855139":[81,128,184,148,235]},{"1855145":[254,5]},{"1855148":[47]},{"1855150":[31]},{"1855152":[3,68,46,128,7,192]},{"1855159":[3,1]},{"1855162":[250]},{"1855164":[208,5,224,26,10,245,5,122,43,212]},{"1855175":[5,46,193,85,172,191,96,125,132,218,208,245,112,255,212,215,192,254,192,210,132,144,32,42,4,47]},{"1855202":[143,128,43]},{"1855206":[82,63,63,16,125,2,255]},{"1855214":[253,2,208,37,112,138,212]},{"1855223":[186,192,17,128,41]},{"1855229":[79,40,209,31,128,15,154,135,108,1,14,251,48,85,1,190,25,127,126,48]},{"1855250":[82,26,24,12,255,14,198,48,174,1,88,24,255,126,255,32,205,96,247,16,241,240,255,4,87,170,167,64,1,128]},{"1855281":[175,18,229,8,243,14,240]},{"1855289":[13]},{"1855291":[82,24,167,126]},{"1855296":[255,87,255,63,255,95,87,168,255,23,255,250,255,92,127,104,127,87,127,63,127,95,64]},{"1855320":[191,23,255,250,127,92,255,104,168,40,192,64,160,34,255]},{"1855336":[232,168]},{"1855339":[5,128,47,128,151,87,128,63,128,93,130]},{"1855351":[191,23,64,250]},{"1855356":[80,140,104,128,253,195,250,239,253,102,255,14,253,115,250,71,224,191,232,31,255,193,255,234,255,100,31,14,255,113,255,66,255,160,254,9,2,189,5,90,2,189,241,17,2,189,5,250,31,224,23,232,64,129,160,74,64,36,14,224,64,49]},{"1855419":[66]},{"1855421":[160,1,8]},{"1855425":[255,193,191]},{"1855429":[255,254,187,64,191,19,255,3,255,38,254,240,15,186,196,244,11,255,186,253,2,224,12,192,60,192,25,255]},{"1855458":[127,128,255]},{"1855462":[65,86,191,64,255]},{"1855468":[255]},{"1855470":[255]},{"1855472":[15]},{"1855474":[68,128,11]},{"1855478":[168,18,2]},{"1855482":[12]},{"1855484":[60]},{"1855486":[24]},{"1855489":[220,64,239,1,214,128,255]},{"1855497":[208,160,160]},{"1855502":[128,128,12,243,6,185]},{"1855509":[255,251,132]},{"1855513":[255]},{"1855515":[95]},{"1855517":[255]},{"1855519":[127,255]},{"1855522":[255]},{"1855524":[255]},{"1855526":[127,128,255]},{"1855530":[255]},{"1855532":[255]},{"1855534":[255]},{"1855536":[208]},{"1855538":[169]},{"1855540":[215]},{"1855542":[4,128,208]},{"1855552":[127,169,255,222,95,235,255,246,127,250,255,254,95,251,248,215,168,86,212,33,226,20,80,9,248,5,212,1,250,4]},{"1855583":[47]},{"1855600":[1]},{"1855602":[10]},{"1855604":[9]},{"1855606":[166]},{"1855608":[2]},{"1855610":[42]},{"1855612":[1]},{"1855614":[212]},{"1855616":[240,255,224,235,240,179,240,31,250,159,253,107,224,255,165,245]},{"1855633":[15]},{"1855635":[31]},{"1855637":[79]},{"1855639":[231,128,100]},{"1855643":[150]},{"1855645":[31,10,245]},{"1855663":[165,255]},{"1855666":[233]},{"1855668":[179]},{"1855670":[31]},{"1855672":[31]},{"1855674":[107]},{"1855676":[255]},{"1855678":[165]},{"1855680":[1,255,2,255]},{"1855685":[255]},{"1855687":[255]},{"1855689":[255]},{"1855691":[223]},{"1855693":[255]},{"1855695":[175]},{"1855697":[255]},{"1855699":[255]},{"1855701":[255]},{"1855703":[95]},{"1855705":[255]},{"1855707":[255]},{"1855709":[255,80]},{"1855726":[175,175,169]},{"1855730":[198]},{"1855732":[250]},{"1855734":[245]},{"1855736":[238]},{"1855738":[213]},{"1855740":[170]},{"1855742":[175]},{"1855744":[1,255,42,255,4,254,129,252,7,252,10,253,85,251,142,113]},{"1855761":[255]},{"1855763":[255,1,254,3,253,3,254,2,248,4,245,142,134]},{"1855782":[1]},{"1855784":[2,7,5,15,14,31,247,127,129]},{"1855794":[42]},{"1855796":[132]},{"1855798":[129,1,175]},{"1855802":[15]},{"1855804":[95]},{"1855806":[255,128,56,207,106,47,96,63,168,63,128,255,32,255]},{"1855821":[255,191,96,48,143,208,47,192,191,192,63]},{"1855833":[255]},{"1855835":[255]},{"1855837":[255,191,191,64,120,32,96,128,224]},{"1855847":[128]},{"1855849":[128]},{"1855854":[255,95,120]},{"1855858":[106]},{"1855860":[226]},{"1855862":[168]},{"1855864":[138]},{"1855866":[100]},{"1855870":[223,128]},{"1855873":[255,162,255]},{"1855877":[255]},{"1855879":[255]},{"1855881":[255]},{"1855883":[255]},{"1855885":[255,255]},{"1855889":[255]},{"1855891":[255]},{"1855893":[255]},{"1855895":[255]},{"1855897":[255]},{"1855899":[255]},{"1855901":[255,255,223]},{"1855918":[223,239,8]},{"1855922":[162]},{"1855924":[34]},{"1855928":[170]},{"1855930":[85]},{"1855934":[255,16,1,255,42,255]},{"1855941":[255]},{"1855943":[255]},{"1855945":[255]},{"1855947":[255]},{"1855949":[255,255]},{"1855953":[255]},{"1855955":[255]},{"1855957":[255]},{"1855959":[255]},{"1855961":[255]},{"1855963":[255]},{"1855965":[255,255,85]},{"1855982":[85,255,1]},{"1855986":[42]},{"1855988":[170]},{"1855990":[1]},{"1855992":[174]},{"1855994":[85]},{"1855998":[255]},{"1856000":[1,255,34,255]},{"1856005":[255,10,255,2,253,65,190]},{"1856013":[255,255]},{"1856017":[255]},{"1856019":[255]},{"1856021":[255]},{"1856023":[255]},{"1856025":[255]},{"1856027":[255]},{"1856029":[255,255,80]},{"1856046":[80,255,1]},{"1856050":[34]},{"1856054":[10]},{"1856056":[136]},{"1856062":[255]},{"1856064":[85,252,138,220,2,248,135,240,7,241,14,241,13,243,255]},{"1856080":[2,252,34,220,4,252,4,240,9,241,10,241,8,225,247]},{"1856096":[1]},{"1856099":[2,2,4,11,12,7]},{"1856106":[4,10,22,26,8,247,85]},{"1856114":[138,1,6,1,135]},{"1856120":[134]},{"1856122":[14]},{"1856124":[31]},{"1856126":[255]},{"1856128":[98,170,149,85,144,58]},{"1856135":[117]},{"1856137":[255,42,221]},{"1856141":[186,255]},{"1856144":[149,42,40,21,197,58,128,117]},{"1856153":[255]},{"1856155":[255,69,186,255]},{"1856160":[64,128,194,66]},{"1856165":[128,10,10]},{"1856171":[34]},{"1856175":[255,226]},{"1856178":[213]},{"1856180":[144]},{"1856186":[8]},{"1856190":[255]},{"1856192":[160,161,64,64]},{"1856197":[170,64,80]},{"1856201":[238,128,213,8,170,247,8,94,160,157,64,85,170,37,80,17,238]},{"1856219":[213,85,170,247,8,1]},{"1856226":[34,34]},{"1856230":[138,138]},{"1856234":[42,42]},{"1856238":[8,255,161]},{"1856242":[64]},{"1856246":[64]},{"1856250":[128]},{"1856252":[8]},{"1856254":[247]},{"1856257":[21]},{"1856259":[12,160,160]},{"1856265":[170]},{"1856267":[84]},{"1856270":[85,42,234]},{"1856274":[209,128,95,160,85]},{"1856280":[69,170,1,84,255]},{"1856286":[85,170,21]},{"1856290":[46,162]},{"1856294":[170,170,16,16,170,170]},{"1856302":[42,127,21]},{"1856306":[140]},{"1856308":[160]},{"1856318":[85,128]},{"1856321":[127]},{"1856323":[63]},{"1856325":[21]},{"1856327":[1]},{"1856329":[128]},{"1856334":[85,171,128]},{"1856338":[64]},{"1856340":[234]},{"1856342":[84]},{"1856344":[127,128,85]},{"1856348":[191]},{"1856350":[85,171,127]},{"1856354":[191,128,21]},{"1856358":[171,170]},{"1856362":[170,170,64,64,171,254,127]},{"1856370":[63]},{"1856372":[21]},{"1856374":[1]},{"1856382":[84]},{"1856384":[6,250,13,250,10,93,5,65,15,25,4,11,30,83,85,171,4,6,9,9,168,9,17,9,235,11,84,14,190,22,85,171,251]},{"1856418":[254]},{"1856420":[95,1,231,160,29]},{"1856426":[171,170,83,8,171,254,253,2,245]},{"1856436":[82]},{"1856438":[70,8,22]},{"1856442":[5]},{"1856444":[77]},{"1856446":[84]},{"1856448":[223,255,127,255,29,255]},{"1856455":[85]},{"1856457":[70]},{"1856460":[1,81,85,63,222,222,85,85,29,29]},{"1856472":[168]},{"1856474":[85]},{"1856476":[171,1,85,191,255]},{"1856482":[255]},{"1856484":[255]},{"1856486":[255,170,87,17,170,170,85,4,63,106,33]},{"1856498":[170]},{"1856500":[226]},{"1856502":[85]},{"1856504":[70]},{"1856508":[80]},{"1856510":[64,128,235,235,254,254,239,239,125,125,4,46,20,17,48,24]},{"1856527":[254,234,234,84,84,170,170,85,85,132,4,84,16,178,16]},{"1856543":[254,235,20,254,1,255,16,255,130,127,81,187,170,93,69,254,255,1]},{"1856562":[170]},{"1856564":[69]},{"1856566":[40]},{"1856568":[42]},{"1856570":[1]},{"1856572":[8]},{"1856576":[170,170,234,234,238,238,255,255,234,106,21,85,186,186]},{"1856591":[255,170,170,64,64,186,170,85,85,234,106,21,21,186,186]},{"1856607":[255,170,85,234,21,238,17,255]},{"1856616":[127,21,255,170,255,69,255,255]},{"1856626":[170]},{"1856628":[68]},{"1856630":[170]},{"1856634":[64]},{"1856640":[128,128,170,170,230,230,154,154,170,170,85,85,170,170]},{"1856655":[255,128,128]},{"1856660":[162,162,85,16,191,170,85,85,239,170]},{"1856671":[255,128,127,170,85,230,25,186,101,234,85,255,170,186,85,255,255]},{"1856690":[170]},{"1856692":[68]},{"1856694":[138]},{"1856704":[12,3,140,130,1,19,164,34,164,162,80,80,160,170]},{"1856719":[241]},{"1856721":[3]},{"1856723":[34,4,22,137,10,224,162,209,80,224,170]},{"1856735":[241,19,239,146,79,27,242,166,87,174,87,126,161,174,91,255,241,16]},{"1856754":[144,32,9,4,160,8,8]},{"1856762":[14]},{"1856764":[4]},{"1856766":[14]},{"1856768":[68,17,8,163,85]},{"1856774":[170]},{"1856776":[184,168,34,32,162,162]},{"1856783":[85,68,17,8,163,85]},{"1856790":[170]},{"1856792":[186,168,215]},{"1856796":[170,162,69,16,85,187,171,247,85,170,170,85,184,71,34,221,162,93,186,85,68]},{"1856818":[8]},{"1856820":[85]},{"1856822":[170]},{"1856824":[16]},{"1856826":[34]},{"1856830":[170]},{"1856833":[119,160,11,4,65,168,2,5]},{"1856842":[42]},{"1856847":[21,52,119,168,11,4,65,170,2,133]},{"1856858":[106]},{"1856862":[21]},{"1856864":[67,203,163,87,69,251,168,85,5,250,42,213]},{"1856877":[255,234,21,52]},{"1856882":[168]},{"1856884":[4]},{"1856886":[170]},{"1856888":[5]},{"1856890":[42]},{"1856894":[234]},{"1856897":[255]},{"1856899":[191,2,85,136,34,83]},{"1856906":[171]},{"1856908":[174]},{"1856910":[159]},{"1856912":[159,255,172,191,86,85,170,34,83]},{"1856922":[171]},{"1856924":[174]},{"1856928":[96,96,19,83,3,169,136,85,83,172,171,84,174,81,255,159,159]},{"1856946":[172]},{"1856948":[84]},{"1856950":[170]},{"1856952":[81]},{"1856954":[170]},{"1856956":[4]},{"1856958":[96]},{"1856961":[255]},{"1856963":[255,10,85,23,232,123]},{"1856970":[251]},{"1856972":[174,81,144,19,255,255,253,255,95,85,255,232,251]},{"1856986":[255]},{"1856988":[255,81,60,63]},{"1856994":[2,2,10,160,23]},{"1857000":[123,132,251,4,174]},{"1857006":[64,191,255]},{"1857010":[253]},{"1857012":[85]},{"1857014":[234]},{"1857016":[80]},{"1857018":[170]},{"1857020":[81]},{"1857025":[191,40,239,186,109,201,50,229,2,225,18,162,81,137,194,207,215,223,143,247,113,239,6,247,28,253,4,254,14,58,4]},{"1857057":[120,16,120,130,60,193,52,225,30,225,18,160,91,2,194,135]},{"1857074":[135]},{"1857076":[65]},{"1857078":[138]},{"1857082":[168]},{"1857084":[2]},{"1857086":[61]},{"1857088":[138,117,85,170,191,64,237,2,250,170,224,64,63,67,168,24,255,117,255,170,255,64,252]},{"1857112":[85,170,191,64,124,3,166,230,138]},{"1857122":[85]},{"1857124":[191]},{"1857126":[239,16,250,5,224,31,191,64,129,254,117]},{"1857138":[170]},{"1857140":[64]},{"1857142":[168,3,80]},{"1857146":[160]},{"1857152":[191,72,119,136,250,48,217,17,170,8,5,5,170,160,149,106,181,8,114]},{"1857172":[69,48,174,17,87,8,255,5,87,160,127,34,255]},{"1857186":[255]},{"1857188":[250,5,217,38,170,87]},{"1857195":[250,170,87,149,200]},{"1857201":[66,34,141]},{"1857205":[138,136,64]},{"1857209":[160,5]},{"1857213":[8,34]},{"1857216":[250,144,85,5,171,1,23,23,191,55,95,95,191,191,119,141,5,144,175,5,95,1,255,23,255,55,255,95,255,191,242,133,250,5,80,170,170,94]},{"1857255":[232,136,200]},{"1857259":[160]},{"1857261":[64,127]},{"1857265":[106,5,80,1,160,23]},{"1857272":[55]},{"1857274":[95]},{"1857276":[191]},{"1857278":[128,8,255,87,95,95,255,253,255,254,255,85,255,235,255,212,117,128,255,87,255,95,255,253,255,254,255,85,255,235,255,212,15]},{"1857312":[168,168]},{"1857315":[160]},{"1857317":[2]},{"1857319":[17]},{"1857321":[171]},{"1857323":[21]},{"1857325":[43,245,15,87]},{"1857330":[95]},{"1857332":[253]},{"1857334":[238,16,84,1,234,1,212]},{"1857343":[240,255,48,255,155,253,106,254,171,252,87,254,11,255,5,255,255,63,48,159,155,207,104,239,170,255,84,255,10,255,5,255,255,192,31,96,15,50,141,17,70,11,232,5,244,2,251]},{"1857392":[32,208,144,107,64,24,168,18,20,64,10]},{"1857404":[4,1,255]},{"1857408":[64,191,130,125,4,251,136,247,1,255,4,255,5,255,250,191,255]},{"1857426":[253,2,249,6,246,137,240,14,250,1,240,10,255,186,191,64,127,128,255]},{"1857446":[127,128,255]},{"1857450":[255]},{"1857452":[255]},{"1857454":[5,90]},{"1857458":[2]},{"1857460":[6]},{"1857462":[9,128,14]},{"1857466":[1]},{"1857468":[10]},{"1857470":[160,26,21,253,34,250,20,252,64,248]},{"1857481":[208,104,232,16,212,97,159]},{"1857489":[234,128,93]},{"1857493":[235]},{"1857495":[191]},{"1857497":[255]},{"1857499":[151]},{"1857501":[239,138,116,255]},{"1857506":[255]},{"1857508":[255]},{"1857510":[255]},{"1857512":[255]},{"1857514":[255]},{"1857516":[255]},{"1857518":[255]},{"1857520":[232]},{"1857522":[88]},{"1857524":[232]},{"1857526":[184]},{"1857528":[208]},{"1857530":[128]},{"1857532":[196]},{"1857534":[116]},{"1857536":[2,2]},{"1857540":[2,2,1,1,10,10,5,5,2,2,26,250,2,253]},{"1857555":[255,2,253,1,254,10,245,5,250,2,253,128,101,255]},{"1857570":[255]},{"1857572":[255]},{"1857574":[255]},{"1857576":[255]},{"1857578":[255]},{"1857580":[255]},{"1857582":[255]},{"1857598":[96]},{"1857600":[127,232,47,255,149,255,175,255,21,255,2,255,149,127,82,175,232,23,253]},{"1857620":[127]},{"1857622":[255]},{"1857624":[255]},{"1857626":[255]},{"1857628":[107]},{"1857630":[175]},{"1857650":[2]},{"1857665":[255,255,122,255,170,255,252,119,234,255,247,85,254,175,255]},{"1857681":[255,80,133,170,85,80,3,234,21,213,8,254,1,255]},{"1857712":[250]},{"1857714":[42]},{"1857718":[172]},{"1857722":[34]},{"1857728":[1,255,236,79,238,13,248,1,248,179,248,70,242,187,229,230]},{"1857745":[255]},{"1857747":[179]},{"1857749":[243]},{"1857751":[255,160,78,65,188,164,75,72,23]},{"1857761":[1]},{"1857768":[1,1,2,2]},{"1857773":[2]},{"1857775":[4,1]},{"1857778":[79]},{"1857780":[13]},{"1857784":[17]},{"1857786":[2]},{"1857788":[26]},{"1857790":[164]},{"1857792":[84,238,96,223,160,246,28,185,189,219,127,200,255]},{"1857806":[255,40,17,214,32,239]},{"1857813":[191,64,39]},{"1857817":[230]},{"1857819":[183]},{"1857821":[255]},{"1857823":[215,56,124,48,112,64,224,128,128]},{"1857833":[128]},{"1857840":[124]},{"1857842":[117]},{"1857844":[230]},{"1857846":[153]},{"1857848":[155]},{"1857850":[72]},{"1857854":[40]},{"1857856":[96,234]},{"1857859":[184,2,77,124,128,223,32,254]},{"1857868":[255]},{"1857870":[217,1,21,234]},{"1857875":[255]},{"1857877":[255]},{"1857879":[255]},{"1857881":[255]},{"1857883":[255]},{"1857885":[255,1,254]},{"1857889":[96]},{"1857904":[96]},{"1857906":[152]},{"1857908":[77]},{"1857910":[128]},{"1857912":[32]},{"1857920":[34,170]},{"1857923":[1]},{"1857925":[162,139,64,239,8,229]},{"1857932":[255,2,191,17,85,170]},{"1857939":[255]},{"1857941":[255]},{"1857943":[255,8,247]},{"1857947":[255,2,253,17,238]},{"1857953":[34]},{"1857968":[34]},{"1857970":[1]},{"1857972":[162]},{"1857974":[64]},{"1857985":[170,249]},{"1857988":[248]},{"1857990":[156]},{"1857992":[255,10,23,4,255,10,245,21,85,170]},{"1858003":[255]},{"1858005":[255]},{"1858007":[255,10,245,4,251,10,245,21,234]},{"1858048":[8,136,240,2,2]},{"1858054":[9]},{"1858056":[40,1,27,1,168,169,85,84,119,136]},{"1858067":[255]},{"1858069":[255]},{"1858071":[255]},{"1858073":[255]},{"1858075":[255,168,86,87,169]},{"1858081":[8]},{"1858092":[1,1,1,1,8]},{"1858106":[1]},{"1858108":[1]},{"1858110":[1]},{"1858112":[184,132,57,70,52,72,98,24,105,144,207]},{"1858124":[223,72,151,5,107,160,56,207,48,143,224,79,96,63,224,95,200,247,197,58,52,172,8,56,64,112,80,112,160,224,64,192,192,128]},{"1858159":[128,188]},{"1858162":[56]},{"1858164":[112]},{"1858166":[112]},{"1858168":[224]},{"1858170":[192]},{"1858172":[128]},{"1858174":[128]},{"1858178":[80,175,162,69,69,186,85]},{"1858186":[240,2,89]},{"1858190":[165]},{"1858192":[255]},{"1858195":[255]},{"1858197":[255]},{"1858199":[255]},{"1858201":[255]},{"1858203":[255]},{"1858205":[255]},{"1858207":[255]},{"1858230":[16]},{"1858242":[106,157,2,93,139,36,52,1,169,2,68]},{"1858254":[226,8,255]},{"1858259":[255]},{"1858261":[255]},{"1858263":[255]},{"1858265":[255]},{"1858267":[255]},{"1858269":[255,8,255]},{"1858275":[34]},{"1858279":[138]},{"1858283":[32]},{"1858290":[8]},{"1858305":[17,42,213,4,251,170,85,2,85,122,128,16,69,64,138,238]},{"1858323":[255]},{"1858325":[255]},{"1858327":[255]},{"1858329":[255,128,255,4,255,170,223,17]},{"1858339":[42]},{"1858341":[4]},{"1858343":[170]},{"1858347":[42]},{"1858350":[32]},{"1858352":[17]},{"1858369":[21,160,85,69,186,170,85,17,68,174,80,78,17,246,8,234]},{"1858387":[245]},{"1858389":[255]},{"1858391":[255]},{"1858393":[255]},{"1858395":[255,1,255,8,255,21]},{"1858402":[10,170]},{"1858405":[69]},{"1858407":[170]},{"1858409":[17]},{"1858411":[170]},{"1858413":[68]},{"1858415":[162,21]},{"1858432":[27,87,149,92,93,190,150,93,29,90,154,89,88,25,177,118,187,23,20,221,28,255,52,223,124,219,28,219,61,219,118,247,87,12,62,171,28,65,28,138,24,1,56,162,24,64,56,136,72]},{"1858496":[21,119,152]},{"1858500":[149,42,117]},{"1858504":[117,138,171,84,85,42,170,69,157,21,69,152,64,191,130,117]},{"1858521":[255,16,255]},{"1858525":[255,69,255,119]},{"1858530":[34,186]},{"1858533":[149,8,125]},{"1858537":[117]},{"1858539":[171]},{"1858541":[85]},{"1858543":[170,98]},{"1858560":[127,255,205]},{"1858564":[247]},{"1858566":[244]},{"1858568":[118,136,255]},{"1858572":[5,250,170,85,127,127,16,205,8,247,3,244,1,254]},{"1858587":[255,208,255,85,255,255]},{"1858594":[34,239]},{"1858597":[247,8,252]},{"1858601":[118]},{"1858603":[255]},{"1858605":[5]},{"1858607":[170,128]},{"1858624":[238,110,65]},{"1858628":[167]},{"1858630":[245]},{"1858632":[255]},{"1858634":[255]},{"1858636":[87,168,162,93,239,110,20,65,89,166]},{"1858647":[245]},{"1858649":[255]},{"1858651":[255,168,255,93,255,126,17,170,235]},{"1858661":[166,10,255]},{"1858665":[255]},{"1858667":[255]},{"1858669":[87]},{"1858671":[162]},{"1858688":[234,234,85]},{"1858692":[179]},{"1858694":[85]},{"1858696":[255]},{"1858698":[255]},{"1858700":[255]},{"1858702":[170,85,255,234,21,64,25,162]},{"1858711":[85,1,254]},{"1858715":[255]},{"1858717":[255,85,255,234,21,170,234,68,230,170,255]},{"1858729":[254]},{"1858731":[255]},{"1858733":[255]},{"1858735":[170]},{"1858752":[160,163,80,4,218,6,80,2,248]},{"1858762":[252,6,248]},{"1858766":[252]},{"1858768":[226,161,88,4,122,132,88,2,16,232,44,214,4,248,4,248,165,91,166,173,4,135,162,175]},{"1858793":[239,6,211]},{"1858797":[255]},{"1858799":[251,4]},{"1858802":[2]},{"1858816":[128,128,85,1,255,5,85]},{"1858824":[127]},{"1858826":[95]},{"1858828":[255]},{"1858830":[127]},{"1858832":[128,128,95,1,255,5,85]},{"1858840":[247,8,95]},{"1858844":[213,42,139,116,128,127,161,170,5]},{"1858854":[170,170]},{"1858857":[8,160,160]},{"1858861":[42]},{"1858863":[245]},{"1858882":[84,16,186,16,85,4,255]},{"1858890":[255]},{"1858892":[255]},{"1858894":[255]},{"1858898":[255,16,255,16,95,4,255]},{"1858906":[255]},{"1858908":[85,170,255]},{"1858913":[255,16,171,16,69,164,170]},{"1858925":[170]},{"1858927":[1]},{"1858944":[110,3,64,64,170,8,81]},{"1858952":[255]},{"1858954":[255]},{"1858956":[255]},{"1858958":[255]},{"1858960":[111]},{"1858962":[255,64,255,8,255]},{"1858968":[255]},{"1858970":[255]},{"1858972":[223,32,254,1,108,147,64,191,8,85]},{"1858983":[174]},{"1858989":[32]},{"1858991":[5]},{"1859008":[157,225]},{"1859012":[170]},{"1859014":[81]},{"1859016":[255]},{"1859018":[255,34,255]},{"1859022":[255]},{"1859024":[225,1,255]},{"1859028":[255]},{"1859030":[255]},{"1859032":[255]},{"1859034":[255,34,255]},{"1859038":[255]},{"1859040":[30,253]},{"1859043":[255]},{"1859045":[85]},{"1859047":[174]},{"1859053":[10]},{"1859055":[81]},{"1859066":[34]},{"1859072":[16,56,2,4,169]},{"1859078":[84]},{"1859080":[255,20,255,2,255]},{"1859086":[255]},{"1859088":[99,103,255,7,253,1,255,1,255,20,255,2,255]},{"1859102":[255]},{"1859104":[160,92]},{"1859107":[250,2,85]},{"1859111":[171,1]},{"1859117":[42]},{"1859119":[23,3]},{"1859122":[4]},{"1859128":[20]},{"1859130":[2]},{"1859136":[160,113,129,129,127,149,31,14,63,32,31,162,47,64,255,152,131,146,127,1,127,21,191,14,223,224,191,2,255]},{"1859166":[239,152,14,241]},{"1859171":[254,64,128,192,160,32,203,64,173,32,223,112,7]},{"1859186":[1]},{"1859188":[21]},{"1859190":[14]},{"1859194":[2]},{"1859198":[136]},{"1859200":[234,104,255,191,255,85,255,170,255]},{"1859210":[255,32,253,2,248,5,151,104,255,191,255,85,255,170,255]},{"1859226":[255,32,255]},{"1859230":[255]},{"1859232":[234,23]},{"1859237":[34]},{"1859239":[17]},{"1859241":[255]},{"1859243":[223,2,253,7,248]},{"1859250":[191]},{"1859252":[85]},{"1859254":[170]},{"1859258":[32]},{"1859264":[171,1,255,170,255,64,255,128,245,10,250,5,84,171,136,87,255,1,255,170,255,64,255,128,255]},{"1859290":[255]},{"1859292":[255]},{"1859294":[255]},{"1859296":[170,254]},{"1859299":[85]},{"1859301":[191]},{"1859303":[127,10,245,5,250,171,84,119,136,1]},{"1859314":[170]},{"1859316":[64]},{"1859318":[128]},{"1859328":[255,84,234,21,212,107,232,23]},{"1859337":[255]},{"1859339":[127,42,191,5,127,255,84,255]},{"1859348":[255,64,255]},{"1859352":[255]},{"1859354":[255]},{"1859356":[213]},{"1859358":[248,2,128,171,21,234,43,212,23,232,255]},{"1859370":[255]},{"1859372":[255]},{"1859374":[255]},{"1859376":[84]},{"1859381":[64]},{"1859390":[2]},{"1859392":[253,23]},{"1859395":[255]},{"1859397":[255,5,255,237,255,28,255,185,253,70,254,255,21,255]},{"1859412":[245,10,234,16,16,2,160,67,64,6,128,57,2,252,255]},{"1859428":[255]},{"1859430":[255]},{"1859432":[255]},{"1859434":[255]},{"1859436":[255]},{"1859438":[255]},{"1859440":[1,20]},{"1859444":[10]},{"1859446":[16]},{"1859448":[2]},{"1859450":[67]},{"1859452":[4]},{"1859454":[56]},{"1859456":[198,63,192,250,68,180,32,216,68,124,244,252,80,94,173,175,240,9,224,223,224,27,240,15,24,163,8,3,4,171,2,80,63,192,63,192,191,64,223,32,255]},{"1859498":[255]},{"1859500":[255]},{"1859502":[255]},{"1859504":[9]},{"1859506":[26,192,16]},{"1859510":[8]},{"1859512":[32]},{"1859516":[10]},{"1859520":[80,240]},{"1859524":[2,2,129,129,10,10,5,5,43,43,23,23]},{"1859537":[175]},{"1859539":[255,2,253,1,126,10,245,5,250,43,212,23,232,255]},{"1859554":[255]},{"1859556":[255]},{"1859558":[255]},{"1859560":[255]},{"1859562":[255]},{"1859564":[255]},{"1859566":[255]},{"1859568":[160]},{"1859584":[10,10,85,85,191,191,87,87,191,191,95,95,255,255,126,127,10,245,85,170,191,64,87,168,191,64,95,160,255]},{"1859614":[126,129,255]},{"1859618":[255]},{"1859620":[255]},{"1859622":[255]},{"1859624":[255]},{"1859626":[255]},{"1859628":[255]},{"1859630":[255]},{"1859648":[1]},{"1859650":[2]},{"1859652":[3]},{"1859654":[4]},{"1859656":[5]},{"1859658":[6]},{"1859660":[7]},{"1859662":[8]},{"1859664":[9]},{"1859666":[10]},{"1859668":[11]},{"1859670":[12]},{"1859672":[13]},{"1859674":[14]},{"1859676":[15]},{"1859678":[16]},{"1859680":[17]},{"1859682":[18]},{"1859684":[19]},{"1859686":[20]},{"1859688":[21]},{"1859690":[22]},{"1859692":[23]},{"1859694":[24]},{"1859696":[25]},{"1859698":[26]},{"1859700":[27]},{"1859702":[28]},{"1859704":[29]},{"1859706":[30]},{"1859708":[31]},{"1859710":[32]},{"1859712":[33]},{"1859714":[34]},{"1859716":[35]},{"1859718":[36]},{"1859720":[37]},{"1859722":[38]},{"1859724":[39]},{"1859726":[40]},{"1859728":[41]},{"1859730":[42]},{"1859732":[43]},{"1859734":[44]},{"1859736":[45]},{"1859738":[46]},{"1859740":[47]},{"1859742":[48]},{"1859744":[49]},{"1859746":[50]},{"1859748":[51]},{"1859750":[52]},{"1859752":[53]},{"1859754":[54]},{"1859756":[55]},{"1859758":[56]},{"1859760":[57]},{"1859762":[58]},{"1859764":[59]},{"1859766":[60]},{"1859768":[61]},{"1859770":[62]},{"1859772":[63]},{"1859774":[64]},{"1859776":[65]},{"1859778":[66]},{"1859780":[67]},{"1859782":[68]},{"1859784":[69]},{"1859786":[70]},{"1859788":[71]},{"1859790":[72]},{"1859792":[73]},{"1859794":[74]},{"1859796":[75]},{"1859798":[76]},{"1859800":[77]},{"1859802":[78]},{"1859804":[79]},{"1859806":[80]},{"1859808":[81]},{"1859810":[82]},{"1859812":[83]},{"1859814":[84]},{"1859816":[85]},{"1859818":[86]},{"1859820":[87]},{"1859822":[88]},{"1859824":[89]},{"1859826":[90]},{"1859828":[91]},{"1859830":[92]},{"1859832":[93]},{"1859834":[94]},{"1859836":[95]},{"1859838":[96]},{"1859840":[97]},{"1859842":[98]},{"1859844":[99]},{"1859846":[100]},{"1859848":[101]},{"1859850":[102]},{"1859852":[103]},{"1859854":[104]},{"1859856":[105]},{"1859858":[106]},{"1859860":[107]},{"1859862":[108]},{"1859864":[109]},{"1859866":[110]},{"1859868":[111]},{"1859870":[112]},{"1859872":[113]},{"1859874":[114]},{"1859876":[115]},{"1859878":[116]},{"1859880":[117]},{"1859882":[118]},{"1859884":[119]},{"1859886":[120]},{"1859888":[121]},{"1859890":[122]},{"1859892":[123]},{"1859894":[124]},{"1859896":[125]},{"1859898":[126]},{"1859900":[127]},{"1859902":[128]},{"1859904":[129]},{"1859906":[130]},{"1859908":[131]},{"1859910":[132]},{"1859912":[133]},{"1859914":[134]},{"1859916":[135]},{"1859918":[136]},{"1859920":[137]},{"1859922":[138]},{"1859924":[139]},{"1859926":[140]},{"1859928":[141]},{"1859930":[142]},{"1859932":[143]},{"1859934":[144]},{"1859936":[145]},{"1859938":[146]},{"1859940":[147]},{"1859942":[148]},{"1859944":[149]},{"1859946":[150]},{"1859948":[151]},{"1859950":[152]},{"1859952":[153]},{"1859954":[154]},{"1859956":[155]},{"1859958":[156]},{"1859960":[157]},{"1859962":[158]},{"1859964":[159]},{"1859966":[160]},{"1859968":[161]},{"1859970":[162]},{"1859972":[163]},{"1859974":[164]},{"1859976":[165]},{"1859978":[166]},{"1859980":[167]},{"1859982":[168]},{"1859984":[169]},{"1859986":[170]},{"1859988":[171]},{"1859990":[172]},{"1859992":[173]},{"1859994":[174]},{"1859996":[175]},{"1859998":[176]},{"1860000":[177]},{"1860002":[178]},{"1860004":[179]},{"1860006":[180]},{"1860008":[181]},{"1860010":[182]},{"1860012":[183]},{"1860014":[184]},{"1860016":[185]},{"1860018":[186]},{"1860020":[187]},{"1860022":[188]},{"1860024":[189]},{"1860026":[190]},{"1860028":[191]},{"1860030":[192]},{"1860032":[193]},{"1860034":[194]},{"1860036":[195]},{"1860038":[196]},{"1860040":[197]},{"1860042":[198]},{"1860044":[199]},{"1860046":[200]},{"1860048":[201]},{"1860050":[202]},{"1860052":[203]},{"1860054":[204]},{"1860056":[205]},{"1860058":[206]},{"1860060":[207]},{"1860062":[208]},{"1860064":[209]},{"1860066":[210]},{"1860068":[211]},{"1860070":[212]},{"1860072":[213]},{"1860074":[214]},{"1860076":[215]},{"1860078":[216]},{"1860080":[217]},{"1860082":[218]},{"1860084":[219]},{"1860086":[220]},{"1860088":[221]},{"1860090":[222]},{"1860092":[223]},{"1860094":[224]},{"1860096":[225]},{"1860098":[226]},{"1860100":[227]},{"1860102":[228]},{"1860104":[229]},{"1860106":[230]},{"1860108":[231]},{"1860110":[232]},{"1860112":[233]},{"1860114":[234]},{"1860116":[235]},{"1860118":[236]},{"1860120":[237]},{"1860122":[238]},{"1860124":[239]},{"1860126":[240]},{"1860128":[241]},{"1860130":[242]},{"1860132":[243]},{"1860134":[244]},{"1860136":[245]},{"1860138":[246]},{"1860140":[247]},{"1860142":[248]},{"1860144":[249]},{"1860146":[250]},{"1860148":[251]},{"1860150":[252]},{"1860152":[253]},{"1860154":[254]},{"1860156":[255]},{"1860159":[1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55,1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,1,64,1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,1,113,1,114,1,115,1,116,1,117,1,118,1,119,1,120,1,121,1,122,1,123,1,124,1,125,1,126,1,127,1,128,1,129,1,130,1,131,1,132,1,133,1,134,1,135,1,136,1,137,1,138,1,139,1,140,1,141,1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1,154,1,155,1,156,1,157,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,1,176,1,177,1,178,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213,1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1,226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238,1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1,251,1,252,1,253,1,254,1,255,1]},{"1860671":[2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80,2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95,2,96,2,97,2,98,2,99,2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120,2,121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,2,132,2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2,145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157,2,158,2,159,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171,2,172,2,173,2,174,2,175,2,176,2,177,2,178,2,179,2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187,2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195,2,196,2,197,2,198,2,199,2,200,2,201,2,202,2,203,2,204,2,205,2,206,2,207,2,208,2,209,2,210,2,211,2,212,2,213,2,214,2,215,2,216,2,217,2,218,2,219,2,220,2,221,2,222,2,223,2,224,2,225,2,226,2,227,2,228,2,229,2,230,2,231,2,232,2,233,2,234,2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242,2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250,2,251,2,252,2,253,2,254,2,255,2]},{"1861183":[3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34,3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50,3,51,3,52,3,53,3,54,3,55,3,56,3,57,3,58,3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66,3,67,3,68,3,69,3,70,3,71,3,72,3,73,3,74,3,75,3,76,3,77,3,78,3,79,3,80,3,81,3,82,3,83,3,84,3,85,3,86,3,87,3,88,3,89,3,90,3,91,3,92,3,93,3,94,3,95,3,96,3,97,3,98,3,99,3,100,3,101,3,102,3,103,3,104,3,105,3,106,3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114,3,115,3,116,3,117,3,118,3,119,3,120,3,121,3,122,3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130,3,131,3,132,3,133,3,134,3,135,3,136,3,137,3,138,3,139,3,140,3,141,3,142,3,143,3,144,3,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,162,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170,3,171,3,172,3,173,3,174,3,175,3,176,3,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202,3,203,3,204,3,205,3,206,3,207,3,208,3,209,3,210,3,211,3,212,3,213,3,214,3,215,3,216,3,217,3,218,3,219,3,220,3,221,3,222,3,223,3,224,3,225,3,226,3,227,3,228,3,229,3,230,3,231,3,232,3,233,3,234,3,235,3,236,3,237,3,238,3,239,3,240,3,241,3,242,3,243,3,244,3,245,3,246,3,247,3,248,3,249,3,250,3,251,3,252,3,253,3,254,3,255,3]},{"1861695":[4]},{"1861698":[35,12,33,8,35,16,103,32,132,32,36,12,36,20,69,20,37,24,70,24,166,24,49,90,174,57,100,28,99,20,7,49,50,74,202,52,98,24,99,32,197,40,130,28,65,16,97,24,33,16,65,12,196,36,6,45,99,12,42,41,135,36,166,40,233,56,139,61,106,65,164,40,131,32,230,44,199,32,208,69,100,32,73,65,234,64,41,57,206,69,77,57,7,57,101,44,231,48,50,102,86,102,108,69,195,36,57,107,255,127,222,119,23,95,167,48,186,123,91,111,78,102,71,61,215,94,25,103,181,94,70,20,38,20,139,73,206,97,125,123,57,123,147,94,181,106,38,24,39,32,213,94,169,48,197,48,163,40,200,48,170,48,103,40,102,48,12,65,165,48,178,89,216,94,186,101,129,32,129,28,221,118,61,118,188,105,213,80,46,73,92,110,190,113,62,109,156,104,172,56,137,40,204,52,89,106,126,113,217,92,49,73,40,28,40,40,84,78,118,85,14,65,123,113,40,36,104,36,105,48,110,77,144,61,114,85,80,81,181,89,79,69,108,52,106,48,106,40,105,40,237,56,89,101,172,48,239,64,22,85,52,77,240,68,174,60,188,110,54,89,135,56,236,64,180,76,197,56,231,56,39,73,41,65,174,89,106,73,195,40,195,52,241,72,117,85,206,56,170,60,163,48,176,68,51,85,238,72,202,56,172,64,178,72,232,64,229,64,5,57,52,85,83,89,168,56,88,93,72,73,237,72,76,73,235,72,77,85,43,73,42,65,199,64,41,73,6,65,161,40,108,56,113,89,45,73,74,85,5,49,118,89,116,89,180,101,52,89,170,89,218,113,48,81,107,56,110,60,241,80,242,76,246,96,51,89,48,89,71,69,81,114,117,86,218,122,213,118,85,123,86,114,176,72,238,80,235,80,7,81,178,106,41,48,171,64,173,72,175,72,137,64,174,68,233,72,210,118,165,56,104,56,231,72,150,94,71,77,42,52,106,36,76,44,113,68,178,68,227,64,195,56,5,65,30,123,3,61,111,68,30,119,90,114,217,106,26,107,5,73,191,127,157,123,3,65,89,103,24,95,92,111,190,119,157,119,220,127,125,119,221,119,60,119,94,119,61,123,150,86,126,123,149,86,33,4,26,103,107,64]},{"2064384":[8,226,32,175,205,80,127,240,16,24,105,41,197,188,240,9,133,188,156,16,7,34,48,128,191,40,107,175,205,80,127,208,34,169,16,133,188,194,33,175,91,243,126,34,255,237,27,107,226,48,175,205,80,127,208,11,194,48,175,84,243,126,34,33,238,27,107,218,90,72,139,75,171,194,32,175,91,243,126,41,255]},{"2064466":[170,191,6,236,27,41,255]},{"2064474":[10,105]},{"2064477":[240,133]},{"2064480":[194,16,169,226,1,162,14]},{"2064488":[155,170,165,188,41,255]},{"2064495":[133,2,167]},{"2064499":[159]},{"2064501":[195,126,159]},{"2064505":[197,126,230]},{"2064509":[230]},{"2064511":[232,232,136,16,237,226,48,171,230,21,104,122,250,107]}] \ No newline at end of file diff --git a/data/sprites/official/birdo.1.zspr b/data/sprites/official/birdo.1.zspr new file mode 100644 index 00000000..54c49747 Binary files /dev/null and b/data/sprites/official/birdo.1.zspr differ diff --git a/data/sprites/official/cadence.1.zspr b/data/sprites/official/cadence.1.zspr new file mode 100644 index 00000000..05f174f7 Binary files /dev/null and b/data/sprites/official/cadence.1.zspr differ diff --git a/data/sprites/official/cat.2.zspr b/data/sprites/official/cat.3.zspr similarity index 54% rename from data/sprites/official/cat.2.zspr rename to data/sprites/official/cat.3.zspr index e7a3c015..69946d73 100644 Binary files a/data/sprites/official/cat.2.zspr and b/data/sprites/official/cat.3.zspr differ diff --git a/data/sprites/official/chibity.1.zspr b/data/sprites/official/chibity.1.zspr new file mode 100644 index 00000000..949dbe2e Binary files /dev/null and b/data/sprites/official/chibity.1.zspr differ diff --git a/data/sprites/official/corona.1.zspr b/data/sprites/official/corona.1.zspr new file mode 100644 index 00000000..2ed39a78 Binary files /dev/null and b/data/sprites/official/corona.1.zspr differ diff --git a/data/sprites/official/d_owls.1.zspr b/data/sprites/official/d_owls.1.zspr new file mode 100644 index 00000000..147283ea Binary files /dev/null and b/data/sprites/official/d_owls.1.zspr differ diff --git a/data/sprites/official/dragonite.1.zspr b/data/sprites/official/dragonite.2.zspr similarity index 57% rename from data/sprites/official/dragonite.1.zspr rename to data/sprites/official/dragonite.2.zspr index ee127257..37d95ad0 100644 Binary files a/data/sprites/official/dragonite.1.zspr and b/data/sprites/official/dragonite.2.zspr differ diff --git a/data/sprites/official/finn.1.zspr b/data/sprites/official/finn.1.zspr new file mode 100644 index 00000000..6272246f Binary files /dev/null and b/data/sprites/official/finn.1.zspr differ diff --git a/data/sprites/official/flavor_guy.1.zspr b/data/sprites/official/flavor_guy.1.zspr new file mode 100644 index 00000000..5e1df365 Binary files /dev/null and b/data/sprites/official/flavor_guy.1.zspr differ diff --git a/data/sprites/official/froglink.2.zspr b/data/sprites/official/froglink.3.zspr similarity index 96% rename from data/sprites/official/froglink.2.zspr rename to data/sprites/official/froglink.3.zspr index 1932df06..f5c46d82 100644 Binary files a/data/sprites/official/froglink.2.zspr and b/data/sprites/official/froglink.3.zspr differ diff --git a/data/sprites/official/fujin.1.zspr b/data/sprites/official/fujin.1.zspr new file mode 100644 index 00000000..23ae8234 Binary files /dev/null and b/data/sprites/official/fujin.1.zspr differ diff --git a/data/sprites/official/future_trunks.1.zspr b/data/sprites/official/future_trunks.1.zspr new file mode 100644 index 00000000..456e64c7 Binary files /dev/null and b/data/sprites/official/future_trunks.1.zspr differ diff --git a/data/sprites/official/king_graham.1.zspr b/data/sprites/official/king_graham.1.zspr new file mode 100644 index 00000000..28b75cf1 Binary files /dev/null and b/data/sprites/official/king_graham.1.zspr differ diff --git a/data/sprites/official/lest.1.zspr b/data/sprites/official/lest.1.zspr new file mode 100644 index 00000000..99764924 Binary files /dev/null and b/data/sprites/official/lest.1.zspr differ diff --git a/data/sprites/official/matthias.1.zspr b/data/sprites/official/matthias.1.zspr new file mode 100644 index 00000000..062dae6d Binary files /dev/null and b/data/sprites/official/matthias.1.zspr differ diff --git a/data/sprites/official/mew.1.zspr b/data/sprites/official/mew.1.zspr new file mode 100644 index 00000000..a06dc8d6 Binary files /dev/null and b/data/sprites/official/mew.1.zspr differ diff --git a/data/sprites/official/mikejones.1.zspr b/data/sprites/official/mikejones.1.zspr deleted file mode 100644 index 6b83b72c..00000000 Binary files a/data/sprites/official/mikejones.1.zspr and /dev/null differ diff --git a/data/sprites/official/piranha_plant.1.zspr b/data/sprites/official/piranha_plant.1.zspr new file mode 100644 index 00000000..59bf4d0d Binary files /dev/null and b/data/sprites/official/piranha_plant.1.zspr differ diff --git a/data/sprites/official/rydia.1.zspr b/data/sprites/official/rydia.1.zspr new file mode 100644 index 00000000..ff98ab56 Binary files /dev/null and b/data/sprites/official/rydia.1.zspr differ diff --git a/data/sprites/official/sighn_waive.1.zspr b/data/sprites/official/sighn_waive.1.zspr new file mode 100644 index 00000000..d961dc4d Binary files /dev/null and b/data/sprites/official/sighn_waive.1.zspr differ diff --git a/data/sprites/official/tgh.1.zspr b/data/sprites/official/tgh.1.zspr new file mode 100644 index 00000000..929b8705 Binary files /dev/null and b/data/sprites/official/tgh.1.zspr differ diff --git a/data/sprites/official/ty.1.zspr b/data/sprites/official/ty.1.zspr new file mode 100644 index 00000000..1091b298 Binary files /dev/null and b/data/sprites/official/ty.1.zspr differ diff --git a/data/sprites/official/vaporeon.1.zspr b/data/sprites/official/vaporeon.1.zspr new file mode 100644 index 00000000..55372722 Binary files /dev/null and b/data/sprites/official/vaporeon.1.zspr differ diff --git a/data/sprites/official/vegeta.1.zspr b/data/sprites/official/vegeta.1.zspr new file mode 100644 index 00000000..b4f46019 Binary files /dev/null and b/data/sprites/official/vegeta.1.zspr differ diff --git a/data/sprites/official/wolf_link.1.zspr b/data/sprites/official/wolf_link.1.zspr new file mode 100644 index 00000000..5ee07dcb Binary files /dev/null and b/data/sprites/official/wolf_link.1.zspr differ diff --git a/data/sprites/official/wolf_link_tp.1.zspr b/data/sprites/official/wolf_link_tp.1.zspr new file mode 100644 index 00000000..9627cd73 Binary files /dev/null and b/data/sprites/official/wolf_link_tp.1.zspr differ diff --git a/easy.yaml b/easy.yaml new file mode 100644 index 00000000..c4f9db5c --- /dev/null +++ b/easy.yaml @@ -0,0 +1,160 @@ +#More general info here: https://docs.google.com/document/d/1r7qs1-MK7YbFf2d-mEUeTy2wHykIf1ALG9pLtVvUbSw/edit +description: Easy/Open/Normal #please describe your options. Especially useful when you have multiple yamls for different occasions +name: PleaseEnterNameHere #your name ingame, space and "_" gets replaced with a dash "-" +glitches_required: none #there is also no_logic. +item_placement: basic #this is based on Entrance Randomizer, which does not (yet?) support advanced +map_shuffle: #to shuffle dungeon maps into the outside world and other dungeons, as well as other player's worlds in multiworld + on: 0 + off: 1 +compass_shuffle: #same for compass + on: 0 + off: 1 +smallkey_shuffle: #same for small keys + on: 0 + off: 1 +bigkey_shuffle: #same for big keys + on: 0 + off: 1 +dungeon_items: # alternative to the 4 shuffles above this, does nothing until the respective 4 shuffles are deleted + mc: 0 # shuffle Maps and Compass + none: 1 # shuffle none of the 4 + mcsb: 0 # shuffle all of the 4, any combination of m, c, s and b will shuffle the respective item, or not if it's missing, so you can add more options here +accessibility: + items: 0 # item accessibility means you can get all inventory items. So a key could lock itself, but you can fill your inventory + locations: 1 # location accessibility means you can access every location in your seed and get all 216 checks + none: 0 # no accessibility means your seed is "beatable only", meaning any items you do not need to beat the game can be unreachable. This can mean you have to defeat ganon with a lamp and master sword. +progressive: #not available in bonta's multiworld at this time. If you want this option, make sure the host uses the correct Multiworld + on: 1 # progressive items, you will always get progressive items like swords in their order: figher sword -> master sword -> tempered sword -> golden sword + off: 0 # turns progressive items off, so you can find, for example, silver arrows before a bow + random: 0 # rolls a 50/50 chance for each potentially progressive item. So, for example, you can have progressive swords but non-progressive mittens +entrance_shuffle: + none: 1 # no entrance shuffle + dungeonssimple: 0 # shuffle just dungeons amongst each other, swapping dungeons entirely, so Hyrule Castle is always 1 dungeon + dungeonsfull: 0 # shuffle any dungeon entrance with any dungeon interior, so Hyrule Castle can be 4 different dungeons + simple: 0 #dungeons are shuffled with each other and the other entrances are shuffled with each other + restricted: 0 #dungeons still shuffle along each other but connects other entrances more feely with each other while keeping entrances in one world + full: 0 # mixes caves and dungeons freely, except for confining all entrances to one world + crossed: 0 #introduces cross world connectors + insanity: 0 #any entrance can lead to any other entrance +goals: + ganon: 5 #beat GT and then Ganon + fast_ganon: 4 # Just kill Ganon + dungeons: 1 # All Dungeons, including GT, and Agahnims Tower + pedestal: 0 # Pull the win out of the Pedestal + triforce-hunt: 0 # Collect 20 of 30 Triforce pieces then hand them in in front of Hyrule Castle +tower_open: # Crystals required to open GT + '0': 0 + '1': 0 + '2': 0 + '3': 0 + '4': 0 + '5': 0 + '6': 0 + '7': 0 + random: 1 +ganon_open: # Crystals required to hurt Ganon + '0': 0 + '1': 0 + '2': 0 + '3': 0 + '4': 0 + '5': 0 + '6': 0 + '7': 0 + random: 1 +world_state: + standard: 1 # Do standard escape to bring Zelda to Sanctuary + open: 9 # Start with the ability to skip the standard opening and go where you want + inverted: 0 # You start in the Dark World, the Light World has changes to it's Map and requires a Moon Pearl to not be Bunny + retro: 0 # Keys are universal, you have to buy a quiver, there are take any caves and some other changes. Makes it more like Z1 +hints: + 'on': 1 # Hint tiles can give useful item location hints on occasion + 'off': 0 # You get gameplay hints, but not location/item hints +weapons: # this means swords + randomized: 5 # Your swords can be anywhere + assured: 2 # You start with a sword, the rest are anywhere + vanilla: 3 # Your swords are in vanilla locations in your own game (Uncle, Pyramid Fairy, Smiths, Pedestal) + swordless: 0 # You don't have a sword. A hammer can be used like a Master Sword in certain situations +item_pool: + normal: 1 + hard: 0 + expert: 0 + crowd_control: 0 +item_functionality: + normal: 1 + hard: 0 + expert: 0 +boss_shuffle: + none: 1 + simple: 0 # existing bosses gets shuffled around + full: 0 # all bosses exist once, except 3 can appear twice + random: 0 # any boss can appear any number of times +enemy_shuffle: + none: 1 + shuffled: 0 # enemies get shuffled around + random: 0 # any enemy can appear any number of times +enemy_damage: + default: 1 + shuffled: 0 # damage tables get shuffled, however armor effects are not + random: 0 # all damages are completely shuffled, including armor effects, making it possible red mail is worse than green +enemy_health: + default: 1 + easy: 0 + hard: 0 + expert: 0 +pot_shuffle: # Shuffle pots, their contents and whatever is hiding under them. Broken with any door shuffle that is not vanilla, do not combine + on: 0 + off: 1 +beemizer: # replace items with bees, that will attack you + 0: 1 + 1: 0 # max 15 hearts + 2: 0 # max 10 hearts + 3: 0 + 4: 0 +timer: + none: 1 + timed: 0 + timed_ohko: 0 + ohko: 0 + timed_countdown: 0 + display: 0 +remote_items: # Warning: currently broken. Stores all your items on the server, effectively sending them to you as if another player picked it up + on: 0 # intended for racing, as the item information is missing from the ROM + off: 1 +rom: + sprite: + random: 1 + randomonhit: 1 + link: 1 # to get other sprite names, open up gui/Creator, select a sprite and write down the sprite name as it is there + disablemusic: off # turn on for V30 MSU packs + extendedmsu: off #turn on to have V31 extended MSU support + quickswap: + on: 1 # press L/R to swap items without opening the menu + off: 0 + menuspeed: + normal: 1 + instant: 0 + double: 0 + triple: 0 + quadruple: 0 + half: 0 + heartcolor: + red: 1 + blue: 1 + green: 1 + yellow: 1 + random: 0 + heartbeep: + double: 0 + normal: 1 + half: 0 + quarter: 0 + off: 0 + ow_palettes: + default: 1 + random: 1 # shuffle the palette of overworld colors + blackout: 0 # makes everything blank, making it almost a blind playthrough + uw_palettes: + default: 1 + random: 1 # shuffle the palette of dungeon/cave colors + blackout: 0 # makes everything blank, making it almost a blind playthrough diff --git a/host.yaml b/host.yaml new file mode 100644 index 00000000..906f43c6 --- /dev/null +++ b/host.yaml @@ -0,0 +1,56 @@ +general_options: + #File name of the v1.0 J rom + rom_file: "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" +#options for MultiServer +#null means nothing, for the server this means to default the value +#these overwrite command line arguments! +server_options: + host: null + port: 38281 + password: null + multidata: null + savefile: null + disable_save: false + loglevel: "info" + #automatically forward the port that is used, then close that port after 24 hours + port_forward: false + #Disallow !getitem. Old /getitem cannot be blocked this way + disable_item_cheat: false + #Client hint system + #points given to player for each acquired item + location_check_points: 1 + #point cost to receive a hint via !hint for players + hint_cost: 1000 #set to 0 if you want free hints +#options for MultiMystery.py +multi_mystery_options: +#teams, however, note that there is currently no way to supply names for teams 2+ through MultiMystery + teams: 1 +#Where to place the resulting files + output_path: "MultiMystery" +#location of your Enemizer CLI, available here: https://github.com/Bonta0/Enemizer/releases + enemizer_path: "EnemizerCLI/EnemizerCLI.Core.exe" +#folder from which the player yaml files are pulled from + player_files_path: "Players" +#meta file name, within players folder + meta_file_path: "meta.yaml" +#automatically launches {player_name}.yaml's ROM file using the OS's default program once generation completes. (likely your emulator) + #does nothing if the name is not found + #example: player_name = "Berserker" + player_name: "" # the hosts name + #create a spoiler file + create_spoiler: 1 + #Zip the resulting roms + #0 -> Don't + #1 -> Create a zip + #2 -> Create a zip and delete the ROMs that will be in it, except the hosts (requires player_name to be set correctly) + zip_roms: 0 + # zip diff files, 2-> delete the non-zipped one. Note that diffs are only created if they are placed in a zip. + zip_diffs: 2 + #include the spoiler log in the zip, 2 -> delete the non-zipped one + zip_spoiler: 0 + #include the multidata file in the zip, 2 -> delete the non-zipped one, which also means the server won't autostart + zip_multidata: 0 + #zip algorithm to use + zip_format: 1 # 1 -> zip, 2 -> 7z, 3->bz2 + #create roms flagged as race roms + race: 0 \ No newline at end of file diff --git a/meta.yaml b/meta.yaml new file mode 100644 index 00000000..9eeef267 --- /dev/null +++ b/meta.yaml @@ -0,0 +1,47 @@ +# this file has to be in the Players folder to take effect, keeping the "meta.yaml" name. +# A meta file rolls its own set of options first +# the result will then overwrite each player's option in that particular field +# for example, if a meta.yaml fast_ganon result is rolled, every player will have that fast_ganon goal +# there is the special case of null, which ignores that part of the meta.yaml, +# allowing for a chance for that meta to not take effect +# players can also have a meta_ignore option to ignore specific options +# example of ignore that would be in a player's file: +# meta_ignore: +# world_state: +# inverted +#this means, if world_state is meta-rolled and the result happens to be inverted, then defer to the player's yaml instead. +meta_description: Meta-Mystery file with the intention of having similar-length completion times for a hopefully better experience +goals: + ganon: 10 + fast_ganon: 25 + dungeons: 5 + pedestal: 10 + triforce-hunt: 1 + null: 0 # maintain individual goals +world_state: + standard: 10 + open: 60 + inverted: 10 + retro: 10 + null: 10 # maintain individual world states +tower_open: + '0': 8 + '1': 7 + '2': 6 + '3': 5 + '4': 4 + '5': 3 + '6': 2 + '7': 1 + random: 10 # a different GT open time should not usually result in a vastly different completion time, unless ganon goal and tower_open > ganon_open +ganon_open: + '0': 3 + '1': 4 + '2': 5 + '3': 6 + '4': 7 + '5': 8 + '6': 9 + '7': 10 + random: 5 # this will mean differing completion times. But leaving it for that surprise effect +#do not use meta rom options at this time. \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..94956255 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +colorama>=0.4.3 +websockets>=8.1 +PyYAML>=5.3.1 +fuzzywuzzy>=0.18.0 +bsdiff4>=1.1.9 +upnpy>=1.1.5 +prompt_toolkit>=3.0.5 \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..05495896 --- /dev/null +++ b/setup.py @@ -0,0 +1,105 @@ +import os +import shutil +import sys +import sysconfig +from pathlib import Path + +import cx_Freeze + +is_64bits = sys.maxsize > 2 ** 32 + +folder = "exe.{platform}-{version}".format(platform=sysconfig.get_platform(), + version=sysconfig.get_python_version()) +buildfolder = Path("build", folder) +sbuildfolder = str(buildfolder) +libfolder = Path(buildfolder, "lib") +library = Path(libfolder, "library.zip") +print("Outputting to: " + str(buildfolder)) +build_resources = "exe_resources" +compress = False +holoviews = False +from hashlib import sha3_512 +import base64 + +def _threaded_hash(filepath): + hasher = sha3_512() + hasher.update(open(filepath, "rb").read()) + return base64.b85encode(hasher.digest()).decode() + +os.makedirs(buildfolder, exist_ok=True) + +def manifest_creation(): + hashes = {} + manifestpath = os.path.join(buildfolder, "manifest.json") + from concurrent.futures import ThreadPoolExecutor + pool = ThreadPoolExecutor() + for dirpath, dirnames, filenames in os.walk(buildfolder): + for filename in filenames: + path = os.path.join(dirpath, filename) + hashes[os.path.relpath(path, start=buildfolder)] = pool.submit(_threaded_hash, path) + import json + manifest = {"buildtime": buildtime.isoformat(sep=" ", timespec="seconds")} + manifest["hashes"] = {path: hash.result() for path, hash in hashes.items()} + json.dump(manifest, open(manifestpath, "wt"), indent=4) + print("Created Manifest") + +scripts = {"MultiClient.py" : "BerserkerMultiClient", + "MultiMystery.py" : "BerserkerMultiMystery", + "MultiServer.py" : "BerserkerMultiServer", + "gui.py" : "BerserkerMultiCreator", + "Mystery.py" : "BerserkerMystery"} + +exes = [] + +for script, scriptname in scripts.items(): + exes.append(cx_Freeze.Executable( + script=script, + targetName=scriptname + ("" if sys.platform == "linux" else ".exe")) + ) + + +import datetime + +buildtime = datetime.datetime.now() + +cx_Freeze.setup( + name="HonorarPlus", + version=f"{buildtime.year}.{buildtime.month}.{buildtime.day}.{buildtime.hour}", + description="HonorarPlus", + executables=exes, + options={ + "build_exe": { + "zip_include_packages": ["*"], + "zip_exclude_packages": [], + "include_files": [], + "include_msvcr": True, + "replace_paths": [("*", "")], + "optimize": 2, + "build_exe": buildfolder + }, + }, +) + + + +def installfile(path): + lbuildfolder = buildfolder + print('copying', path, '->', lbuildfolder) + if path.is_dir(): + lbuildfolder /= path.name + if lbuildfolder.is_dir(): + shutil.rmtree(lbuildfolder) + shutil.copytree(path, lbuildfolder) + elif path.is_file(): + shutil.copy(path, lbuildfolder) + else: + print('Warning,', path, 'not found') + + +extra_data = ["LICENSE", "data", "EnemizerCLI", "host.yaml", "QUsb2Snes", "meta.yaml"] + +for data in extra_data: + installfile(Path(data)) + + +manifest_creation()