From 39bf3d6aba245a75a87a1ea6d40e43b997859ca3 Mon Sep 17 00:00:00 2001 From: mhsjlw Date: Tue, 14 Jun 2016 07:51:41 -0400 Subject: [PATCH] update protocol to 0.15 and start jwt decryption --- README.md | 2 +- data/protocol.json | 216 +++++++++++++++++++++++++++------------------ jwt.js | 25 ++++++ package.json | 1 + 4 files changed, 156 insertions(+), 88 deletions(-) create mode 100644 jwt.js diff --git a/README.md b/README.md index ed407ea..813b64b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Parse and serialize Minecraft PE packets. ## Features - * Supports Minecraft PE `0.14.3` + * Supports Minecraft PE `0.14.3` and `0.15.0` * Pure JavaScript * Easily send and listen for any packet * RakNet support through [node-raknet](https://github.com/mhsjlw/node-raknet) diff --git a/data/protocol.json b/data/protocol.json index 8964c20..9d4a087 100644 --- a/data/protocol.json +++ b/data/protocol.json @@ -310,7 +310,7 @@ [ { "name": "slot", - "type": "slot" + "type": "itemstacks" } ] ] @@ -567,60 +567,63 @@ "0x14": "id_no_free_incoming_connections", "0x17": "id_connection_banned", "0x1A": "id_ip_recently_connected", - "0x8f": "game_login", - "0x90": "player_status", - "0x91": "disconnect", - "0x92": "batch", - "0x93": "text", - "0x94": "set_time", - "0x95": "start_game", - "0x96": "add_player", - "0x97": "remove_player", - "0x98": "add_entity", - "0x99": "remove_entity", - "0x9a": "add_item_entity", - "0x9b": "take_item_entity", - "0x9c": "move_entity", - "0x9d": "move_player", - "0x9e": "remove_block", - "0x9f": "update_block", - "0xa0": "add_painting", - "0xa1": "explode", - "0xa2": "level_event", - "0xa3": "tile_event", - "0xa4": "entity_event", - "0xa5": "mob_effect", - "0xa6": "update_attributes", - "0xa7": "player_equipment", - "0xa8": "player_armor_equipment", - "0xa9": "interact", - "0xaa": "use_item", - "0xab": "player_action", - "0xac": "hurt_armor", - "0xad": "set_entity_data", - "0xae": "set_entity_motion", - "0xaf": "set_entity_link", - "0xb0": "set_health", - "0xb1": "set_spawn_position", - "0xb2": "animate", - "0xb3": "respawn", - "0xb4": "drop_item", - "0xb5": "container_open", - "0xb6": "container_close", - "0xb7": "container_set_slot", - "0xb8": "container_set_data", - "0xb9": "container_set_content", - "0xba": "crafting_data", - "0xbb": "crafting_event", - "0xbc": "adventure_settings", - "0xbd": "tile_entity_data", - "0xbf": "full_chunk_data", - "0xc0": "set_difficulty", - "0xc3": "player_list", - "0xc8": "request_chunk_radius", - "0xc9": "chunk_radius_update", - "0x1b": "transfer", - "0xc5": "spawn_experience_orb" + "0x03": "server_to_client_handshake", + "0x04": "client_to_server_handshake", + "0x01": "game_login", + "0x02": "player_status", + "0x05": "disconnect", + "0x06": "batch", + "0x07": "text", + "0x08": "set_time", + "0x09": "start_game", + "0x0a": "add_player", + "0x0b": "remove_player", + "0x0c": "add_entity", + "0x0d": "remove_entity", + "0x0e": "add_item_entity", + "0x0f": "take_item_entity", + "0x10": "move_entity", + "0x11": "move_player", + "0x12": "remove_block", + "0x13": "update_block", + "0x14": "add_painting", + "0x15": "explode", + "0x16": "level_event", + "0x17": "tile_event", + "0x18": "entity_event", + "0x19": "mob_effect", + "0x1a": "update_attributes", + "0x1b": "player_equipment", + "0x1c": "player_armor_equipment", + "0x1d": "interact", + "0x1e": "use_item", + "0x1f": "player_action", + "0x20": "hurt_armor", + "0x21": "set_entity_data", + "0x22": "set_entity_motion", + "0x23": "set_entity_link", + "0x24": "set_health", + "0x25": "set_spawn_position", + "0x26": "animate", + "0x27": "respawn", + "0x28": "drop_item", + "0x29": "container_open", + "0x2a": "container_close", + "0x2b": "container_set_slot", + "0x2c": "container_set_data", + "0x2d": "container_set_content", + "0x2e": "crafting_data", + "0x2f": "crafting_event", + "0x30": "adventure_settings", + "0x31": "tile_entity_data", + "0x32": "player_input", + "0x33": "full_chunk_data", + "0x34": "set_difficulty", + "0x37": "player_list", + "0x3c": "request_chunk_radius", + "0x3d": "chunk_radius_update", + "0x3a": "spawn_experience_orb", + "0x3f": "replace_selected_item" } } ] @@ -636,6 +639,8 @@ "id_no_free_incoming_connections": "packet_id_no_free_incoming_connections", "id_connection_banned": "packet_id_connection_banned", "id_ip_recently_connected": "packet_id_ip_recently_connected", + "server_to_client_handshake": "packet_server_to_client_handshake", + "client_to_server_handshake": "packet_client_to_server_handshake", "game_login": "packet_game_login", "player_status": "packet_player_status", "disconnect": "packet_disconnect", @@ -689,7 +694,8 @@ "request_chunk_radius": "packet_request_chunk_radius", "chunk_radius_update": "packet_chunk_radius_update", "transfer": "packet_transfer", - "spawn_experience_orb": "packet_spawn_experience_orb" + "spawn_experience_orb": "packet_spawn_experience_orb", + "replace_selected_item": "packet_replace_selected_item" } } ] @@ -712,40 +718,50 @@ "container", [] ], + "server_to_client_handshake": [ + "container", + [ + { + "name": "public_key", + "type": "string" + }, + { + "name": "server_token", + "type": "string" + } + ] + ], + "client_to_server_handshake": [ + "container", + [ + { + "name": "magic", + "type": "i64" + } + ] + ], "packet_game_login": [ "container", [ { - "name": "username", - "type": "string" + "name": "unknown", + "type": "short" }, { "name": "protocol", + "type": "long" + }, + { + "name": "body_length", "type": "i32" }, { - "name": "protocol2", - "type": "i32" + "name": "chain", + "type": ["pstring", {"countType": "li32"}] }, { - "name": "client_id", - "type": "i64" - }, - { - "name": "client_uuid", - "type": "uuid" - }, - { - "name": "server_address", - "type": "string" - }, - { - "name": "client_secret", - "type": ["buffer",{"countType":"i16"}] - }, - { - "name": "skin", - "type": "skin" + "name": "client_data", + "type": ["pstring", {"countType": "li32"}] } ] ], @@ -864,7 +880,7 @@ }, { "name": "gamemode", - "type": "i32" + "type": "i8" }, { "name": "entity_id", @@ -895,19 +911,19 @@ "type": "f32" }, { - "name": "unknown1", + "name": "is_loaded_in_creative", + "type": "bool" + }, + { + "name": "day_cycle_stop_time", "type": "i8" }, { - "name": "unknown2", - "type": "i8" + "name": "edu_mode", + "type": "bool" }, { - "name": "unknown3", - "type": "i8" - }, - { - "name": "unknown4", + "name": "unknown", "type": "string" } ] @@ -1794,6 +1810,23 @@ } ] ], + "packet_player_input": [ + "container", + [ + { + "name": "motion_x", + "type": "f32" + }, + { + "name": "motion_z", + "type": "f32" + }, + { + "name": "flags", + "type": "short" + } + ] + ], "packet_full_chunk_data": [ "container", [ @@ -1931,6 +1964,15 @@ "type": "i32" } ] + ], + "packet_replace_selected_item": [ + "container", + [ + { + "name": "slot", + "type": "slot" + } + ] ] } } diff --git a/jwt.js b/jwt.js new file mode 100644 index 0000000..7d14499 --- /dev/null +++ b/jwt.js @@ -0,0 +1,25 @@ +var jwt = require('jwt-simple'); +var example = { + "chain": { + "chain": [ + "eyJ4NXUiOiJNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThFTGtpeHlMY3dsWnJ5VVFjdTFUdlBPbUkyQjd2WDgzbmRuV1JVYVhtNzR3RmZhNWZcL2x3UU5UZnJMVkhhMlBtZW5wR0k2SmhJTVVKYVdacmptTWo5ME5vS05GU05CdUtkbThyWWlYc2ZhejNLMzZ4XC8xVTI2SHBHMFp4S1wvVjFWIiwiYWxnIjoiRVMzODQifQ.eyJuYmYiOjE0NjA4OTYzMzcsInJhbmRvbU5vbmNlIjo3MzI2MDA4MDM2OTAzODU5NzM0LCJpc3MiOiJSZWFsbXNBdXRob3JpemF0aW9uIiwiZXhwIjoxNDYwOTgyNzk3LCJpYXQiOjE0NjA4OTYzOTcsImNlcnRpZmljYXRlQXV0aG9yaXR5Ijp0cnVlLCJpZGVudGl0eVB1YmxpY0tleSI6Ik1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFQlJ1MEd5VUFkYkZjd1wvUU1vNmFBTGFaZHJTeVNkZFwva1F2OXFHOHlHSWxnc0orVStNMVVpZWtjaDFPc3NHdXlFZW1oSWR1OUZWYklJanRWKzY4bXVkc0orSE1MdGYrMDJTYVk0elBtXC9iR3RURkRIUDBRK2FoUmhvVWRiNVptaFwvIn0.J9vCSKZOH6ZuO_rMv3Tlo0Z7nAnXI44rdlL4FyXcWfdTHG3HlHywos0WLWnMnlxP_Ex2co2M21CSyIhIFM6EvugemsuEZIQpz3WTAmUlaEoaNT7dgGFbqGUn9tr6S1MD", + "eyJ4NXUiOiJNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRUJSdTBHeVVBZGJGY3dcL1FNbzZhQUxhWmRyU3lTZGRcL2tRdjlxRzh5R0lsZ3NKK1UrTTFVaWVrY2gxT3NzR3V5RWVtaElkdTlGVmJJSWp0Vis2OG11ZHNKK0hNTHRmKzAyU2FZNHpQbVwvYkd0VEZESFAwUSthaFJob1VkYjVabWhcLyIsImFsZyI6IkVTMzg0In0.eyJuYmYiOjE0NjA4OTYzMzcsImV4dHJhRGF0YSI6eyJpZGVudGl0eSI6Ijk4YjBjYmNmLWU5MWUtMzAwNC05NjUyLWFlZDkyZjhlMjU2ZCIsImRpc3BsYXlOYW1lIjoieWF3a2F0IiwiWFVJRCI6IjI1MzU0Mzc2MTMzNTc1MzUifSwicmFuZG9tTm9uY2UiOi0zMzg4NzY3NzYzMDEyODY5NTg3LCJpc3MiOiJSZWFsbXNBdXRob3JpemF0aW9uIiwiZXhwIjoxNDYwOTgyNzk3LCJpYXQiOjE0NjA4OTYzOTcsImlkZW50aXR5UHVibGljS2V5IjoiTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUVERUtuZXFFdmNxVXFxRk1NMUhNMUE0eldqSkMrSThZK2FLekc1ZGwrNndOT0hIUTRObUcyUEVYUkpZaHVqeW9kRkgrd08wZEVyNEdNMVdvYVdvZzh4c1lRNm1RSkFDMGVWcEJNOTZzcFVCMWVNTjU2K0J3bEo0SDNReDRUQXZBcyJ9.gmAdOsTXU68QIqWweaU9FBuSyhNHcGI2hslrP0AQtVqGHyfPIhm54aUesZSj9mLGIIJTx_I50wijDlsj_lFExb3W3UQV0BDWCsYNBoJ5Kb9AX5O11onqtGbNynCVufJB" + ] + }, + "clientData": "eyJhbGciOiJFUzM4NCIsIng1dSI6Ik1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFREVLbmVxRXZjcVVxcUZNTTFITTFBNHpXakpDK0k4WSthS3pHNWRsKzZ3Tk9ISFE0Tm1HMlBFWFJKWWh1anlvZEZIK3dPMGRFcjRHTTFXb2FXb2c4eHNZUTZtUUpBQzBlVnBCTTk2c3BVQjFlTU41NitCd2xKNEgzUXg0VEF2QXMifQo,.eyJDbGllbnRSYW5kb21JZCI6MTM2NTg2NDYwOCwiU2VydmVyQWRkcmVzcyI6IjE5Mi4xNjguMS41NjoxOTEzMiIsIlNraW5EYXRhIjoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGxtVWYvNVpsSC8rV05QLy9sbVVmLzVabEgvK1dOUC8vbG1VZi81WTAvLzlpQU12L1lnREwvMklBeS85aUFNdi9ZZ0RMLzJJQXkvOWlBTXYvWWdETC9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNVkwLy8rV1pSLy9salQvLzVabEgvK1daUi8vY2t6ei81WmxILytpZFRQL1lnREwvMklBeS82cUpYditxaVY3L3FvbGUvNnFKWHYvWWdETC8ySUF5L3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPV1pSLy9ja3p6LzZKMU0vK1daUi8vbGpULy8zSk04LytXTlAvL2xtVWYvMklBeS82cUpYditjZTFEL25IdFEvNXg3VVArY2UxRC9xb2xlLzlpQU12OEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURsalQvLzNKTTgvK2lkVFAvbG1VZi81WmxILytXWlIvL2xqVC8vM0pNOC85aUFNditxaVY3L25IdFEvNXg3VVArY2UxRC9uSHRRLzZxSlh2L1lnREwvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTVZMC8vK1dOUC8vb25Vei81WTAvLytXWlIvL2xqVC8vNkoxTS85eVRQUC9meHFQL3FvbGUvNXg3VVArY2UxRC9uSHRRLzV4N1VQK3FpVjcvMklBeS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT1daUi8vbGpULy81WmxILytXTlAvL2NrenovNVpsSC8raWRUUC9vblV6LzM4YWovNnFKWHYrY2UxRC9uSHRRLzV4N1VQK2NlMUQvcW9sZS85aUFNdjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEY2t6ei81WTAvLytXTlAvL2xtVWYvNVpsSC8rV1pSLy9salQvLzZKMU0vOS9Hby8rcWlWNy9xb2xlLzZxSlh2K3FpVjcvcW9sZS82cUpYdi9ZZ0RML0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE2SjFNLytXWlIvL2xqVC8vNkoxTS8raWRUUC9salQvLzZKMU0vOXlUUFAvZnhxUC8zOGFqLzkvR28vL2Z4cVAvMzhhai85L0dvLy9meHFQLzM4YWovd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGxtVWYvNVkwLy8raWRUUC9sbVVmLzZKMU0vK2lkVFAvb25Vei81WTAvLytXWlIvL2xqVC8vNVpsSC8rV05QLy9salQvLzVabEgvK1dOUC8vbG1VZi81WmxILytXTlAvL2xtVWYvNVkwLy8rV1pSLy9salQvLzZKMU0vK1daUi8vbGpULy81WmxILytXTlAvL2xtVWYvNVkwLy8rV1pSLy9vblV6LzVZMC8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNVkwLy8rV1pSLy9sbVVmLzVZMC8vK1daUi8vbGpULy81WTAvLytXWlIvL2xqVC8vNVpsSC8rV05QLy9sbVVmLzNKTTgvK1daUi8vbG1VZi81WTAvLytXWlIvL29uVXovNkoxTS8raWRUUC9salQvLzVabEgvK1dOUC8vbG1VZi82SjFNLytpZFRQL2xtVWYvNVkwLy8raWRUUC9vblV6LzVZMC8vK1daUi84QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPaWRUUC9vblV6LzVZMC8vK1daUi8vbGpULy81WmxILytpZFRQL2xtVWYvNVpsSC8rV05QLy9sbVVmLzNKTTgvK3ZUcy8vcjA3UC81WmxILytXTlAvL29uVXovNVkwLy8rV05QLy9salQvLzZKMU0vK1daUi8vbGpULy82SjFNLytpZFRQL29uVXovNVkwLy8raWRUUC9sbVVmLzZKMU0vK1dOUC8vbG1VZi9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURsbVVmLzNKTTgvK1daUi8vbG1VZi82SjFNLzl5VFBQL2NrenovNVpsSC85eVRQUC9ja3p6LzNKTTgvK3ZUcy8veTJyci81TXVwLytUTHFmL2xtVWYvNVpsSC8rV1pSLy9ja3p6LzVabEgvK1dOUC8vb25Vei82SjFNLytXWlIvL2xqVC8vNkoxTS8rV05QLy9vblV6LzVabEgvK1dOUC8vbG1VZi81WTAvL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTNKTTgvK1daUi8vbG1VZi81WmxILzl5VFBQL3IwN1AvNjlPei85eVRQUC9reTZuLysvdjcveU5pSlAveTJyci84dDNDL3lOaUpQLzcrL3YvNU11cC85eVRQUC9salQvLzVabEgvK1daUi8vbG1VZi81WTAvLytXWlIvL2xqVC8vNVpsSC8rV05QLy9sbVVmLzVabEgvK2lkVFAvbG1VZi81WmxILytpZFRQOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTnlUUFAvbGpULy82SjFNLzl5VFBQL3IwN1AvOHQzQy8vTGF1di95MnJyLzd0YTIvKy9adS8veTJyci84dDNDLy9MYXV2L3kyNzMvN3RlNS8vTGF1di9yMDdQLzNKTTgvK1daUi8vbGpULy81WmxILytXWlIvL29uVXovNVkwLy8rV05QLy9vblV6LzVabEgvK1dOUC8vbGpULy82SjFNLytXWlIvL2xtVWYvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEbGpULy81WmxILytpZFRQL2xtVWYvNjlPei8vTGF1di95M2NMLzh0M0MvL0xhdXYveTNjTC84dHE2LysrN3NmL3Z1N0gvOHRxNi8vTGF1di9yMDdQLzh0M0MvK3ZUcy8vY2t6ei81WTAvLytXWlIvL2xqVC8vNVpsSC8raWRUUC9salQvLzVZMC8vK1dOUC8vbG1VZi82SjFNLytXWlIvL2xtVWYvNVkwLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE1WmxILytXTlAvL2xtVWYvNjlPei8rdlRzLy95M2NMLzh0cTYvL0xhdXYveTJyci84dHE2Ly9MZHd2L3kycnIvOHRxNi8vTGR3di95M2NMLzh0cTYvK3ZUcy8vY2t6ei81WTAvLytXWlIvL2xtVWYvNVkwLy8rV1pSLy9salQvLzVabEgvK1dOUC8vb25Vei81WmxILytXWlIvL2NrenovNVkwLy8raWRUUDhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJrUVN6L1pFRXMvMlJCTFA5a1FTei9LQ2dvL3lnb0tQOG9LQ2ovS0Nnby93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZXJWMy80YUhZZi9ZZ0RMLzJJQXkvOWlBTXYvWWdETC82SjFNLytXWlIvOW9SVEQvYUVVdy8yaEZNUDlvUlREL2FFVXcvMmhGTVA5b1JURC9hRVV3L3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlcTkzLzNxdmQvOTZyM2YvMkxxVS8rdlRzLy9ZdXBUL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVpFRXMvMlJCTFA5a1FTei9aRUVzL3lnb0tQOG9LQ2ovS0Nnby95Z29LUDhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIcTFkLytHaDJIL2hvZGgvNGFIWWYrR2gySC8ySUF5LytXWlIvL29uVXovYUVVdy8yaEZNUDlvUlREL2FFVXcvMmhGTVA5b1JURC9hRVV3LzJoRk1QOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhxdmQvOTZ0WGYvZXE5My85aTZsUC9yMDdQLzJMcVUvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1JCTFA5a1FTei9aRUVzLzJSQkxQOG9LQ2ovS0Nnby95Z29LUDhvS0NqL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUI2dFhmL2hvZGgvNGFIWWYvZnhxUC8zOGFqLzRhSFlmL2xtVWYvNkoxTS8yaEZNUDlvUlREL2FFVXcvMmhGTVA5b1JURC9hRVV3LzJoRk1QOW9SVEQvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQjZyM2YvZXJWMy8zcXZkLy9yMDdQLzJMcVUvK3ZUcy84QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCa1FTei9aRUVzLzJSQkxQOWtRU3ovS0Nnby95Z29LUDhvS0NqL0tDZ28vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVyVjMvNGFIWWYvcjA3UC84dHE2Ly9MYXV2L2xtVWYvNVpsSC8rV05QLzlvUlREL2FFVXcvMmhGTVA5b1JURC9hRVV3LzJoRk1QOW9SVEQvYUVVdy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZXE5My8zcXZkLzk2cjNmLzY5T3ovOWk2bFAvcjA3UC9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUI2cjNmL2VyVjMvM3ExZC85NnIzZi9hRVV3LzNsVlBmK0FXa0QvYlVvei8yaEZNUDlrUVN6L2FFVXcvMlJCTFArTXZvci9qTDZLLzMyeWV2OTlzbnIvZXJWMy8zcTFkLzk2dFhmL2VxOTMvNHkraXYrR2gySC82OU96Ly9MYXV2L3kycnIvNkoxTS8raWRUUC9salQvLzZKMU0vK2lkVFAvbG1VZi82SjFNLytpZFRQL29uVXovNVpsSC8rV05QLy9sbVVmLzVabEgvNEcxZi8rTHVvai9lcTkzLzNxMWQvOTZyM2YvZXE5My80eStpditMdW9qL2ZiSjYvM3F2ZC85NnRYZi9lclYzLzNxdmQvK0x1b2ovakw2Sy80dTZpUDhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVpFRXMvM3F2ZC85NnIzZi9hRVV3LzNKT052OTVWVDMvZVZVOS8yaEZNUDlrUVN6L2FFVXcvMmhGTVA5a1FTei9iMHcxLzRCYVFQK0FXa0QvY2s0Mi8zcTFkLzk2dFhmL2VxOTMvM3F2ZC8rTXZvci9pb3RtLyt2VHMvL3kycnIvOHRxNi8vTGF1di9sbVVmLzZKMU0vK1daUi8vbG1VZi9lcTkzLzNxdmQvL2xtVWYvNVkwLy8rV05QLy9sbVVmL2diVi8vNEcxZi8rTHVvai9pN3FJLzNxdmQvOTZyM2YvZXE5My8zcTFkLytMdW9qL2ZiSjYvNHkraXY5NnRYZi9lclYzLzNxdmQvOTZyM2YvaTdxSS80dTZpUCtNdm9yL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1JCTFA5b1JURC9aRUVzLzJoRk1QOXZURFgvZ0ZwQS8yaEZNUDl5VGpiL1pFRXMvMmhGTVA5a1FTei9hRVV3LzI5TU5mK0FXa0QvZVZVOS8zSk9Odjk2cjNmL2VyVjMvM3F2ZC85NnIzZi9qTDZLLzMyeWV2K01qV2ovNjlPei8rdlRzLy9salQvLzVabEgvK2lkVFA5NnIzZi9lcTkzLzNxdmQvOTZ0WGYvZ2JWLy80RzFmLytCdFgvL2diVi8vNHkraXYrTHVvai9pN3FJLzR1NmlQOTZyM2YvZXJWMy8zcTFkLzk2dFhmL2k3cUkvNHkraXYrTHVvai9lcTkzLzNxMWQvOTZ0WGYvZXE5My80eStpditMdW9qL2pMNksvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCa1FTei9aRUVzLzJSQkxQOW9SVEQvYUVVdy8yaEZNUDk1VlQzL2NrNDIvMlJCTFA5b1JURC9aRUVzLzJoRk1QOXZURFgvZ0ZwQS8zbFZQZjl5VGpiL2VxOTMvM3ExZC85NnIzZi9lcTkzLzNldmRmK012b3Ivakw2Sy80eU5hUCtNaldqLzVabEgvK2lkVFA5OXNuci9lclYzLzNxMWQvOTZyM2YvZXJWMy80eStpditMdW9qL2pMNksvNHU2aVArTHVvai9pN3FJLzMyeWV2K0x1b2ovZ0lKYS80ZUpZditIaVdML2dJSmEvNGFIWWYrUGtHdi9ob2RoLzRDQ1d2K0hpV0wvaDRsaS80Q0NXditHaDJIL2o1QnIvNGFIWWY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFaRUVzLzJSQkxQOWtRU3ovWkVFcy8yOU1OZitHWGtiL2hsNUcvMjlNTmY5a1FTei9aRUVzLzJSQkxQOWtRU3ovYUVVdy8yaEZNUDlvUlREL2FFVXcvM3F2ZC85NnRYZi9lclYzLzNxMWQvOTNyM1gvakw2Sy80eStpdjk5c25yL2pMNksvK2lkVFA5OXRIci9pN3FJLzNxdmQvOTZyM2YvZXE5My8zcTFkLytNdm9yL2k3cUkvNHkraXYrTHVvai9pN3FJLzR5K2l2K012b3Ivakw2Sy8rVEpxUC9reWFqLzVNbW8vK1RKcVAvcjA3UC82OU96Lyt2VHMvL2t5YWovNU1tby8rVEpxUC9reWFqLzY5T3ovK3ZUcy8vcjA3UC9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURzN08vODdPenYvT3pzNy8yUkJMUDlvUlREL2VGUTgvM2hVUFA5b1JURC9aRUVzL3pzN08vODdPenYvT3pzNy8wWkdSdjlHUmtiL1JrWkcvMFpHUnY5NnIzZi9lclYzLzNxdmQvOTZ0WGYvZmJKNi80eStpditMdW9qL2pMNksvNHU2aVArTXZvci9pN3FJLzR1NmlQOTZyM2YvZXE5My8zcXZkLzk2cjNmL2k3cUkvMzJ5ZXYrTXZvci9pN3FJLzR1NmlQK012b3IvaTdxSS80eStpdi9reWFqLzVNbW8vK3ZUcy8vcjA3UC84dHE2Ly9MYXV2L3IwN1AvNjlPei8rdlRzLy9reWFqLzY5T3ovL0xhdXYvcjA3UC84dHE2L3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkpTVW4vU1VsSi8wbEpTZjg3T3p2L1dscGEvMTFkWGY5ZFhWMy9XbHBhL3pzN08vOUpTVW4vU1VsSi8wbEpTZjlOVFUzL1YxZFgvMWRYVi85TlRVMy9lcTkzLzNxMWQvOTZyM2YvZXJWMy80eStpditNdm9yL2ZiSjYvNHkraXYrTHVvai9qTDZLLzR1NmlQK012b3IvZXE5My8zcTFkLzk2cjNmL2VxOTMvNHU2aVArTXZvci9qTDZLLzR1NmlQK012b3IvZmJKNi80eStpditNdm9yLzVNbW8vK3ZUcy8vcjA3UC82OU96Ly9MYXV2L3kycnIvNmRDdi8rdlRzLy9zMUxqLzVNdXEvK3pVdVAveTJyci84dHE2Ly9MZHd2OEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU1VsSi8wbEpTZjlKU1VuL1NVbEovMkZoWWY5cmEydi9hMnRyLzJGaFlmOUpTVW4vU1VsSi8wbEpTZjlKU1VuL1RVMU4vMWRYVi85WFYxZi9UVTFOLzNxMWQvOTZ0WGYvZXJWMy8zcTFkLytNdm9yL2pMNksvM2V2ZGYrTXZvci9mYko2LzR5K2l2K012b3Ivakw2Sy8zcXZkLzk2dFhmL2VyVjMvM3ExZC8rTXZvci9qTDZLLzR5K2l2OTlzbnIvakw2Sy8zMnllditNdm9yL2pMNksvK3pVdVAvcjA3UC83TlM0Lyt2VHMvL3AwYlAvOHRxNi8vTGF1di92MmIzLzdOUzQvK1hMcmYvdjJyLy84dHE2Ly9MYXV2L3AwYlAvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbEpTZjlKU1VuL096czcvMGxKU2Y5aFlXSC9hMnRyLzJ0cmEvOWhZV0gvU1VsSi96czdPLzlKU1VuL1NVbEovMDFOVGY5WFYxZi9WMWRYLzAxTlRmOFlPQmIvR2o4Wi94ZzRGdjhhUHhuL1Q0Qk0vNHkraXY5M3IzWC9qTDZLLzNldmRmK012b3Ivakw2Sy8wK0FUUDhhUHhuL0dqOFoveGc0RnY4YVB4bi9UNEJNLzR5K2l2K012b3IvZDdCMC80eStpdjkzcjNYL2pMNksvMCtBVFAvczFMai83TlM0Lyt6VXVQL3MxTGovNmRHei8vTGR3di95M2NMLzdOUzQvKy9hdi8vczFMai83TlM0Ly9MZHd2L3kzY0wvOHQzQy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJOVFUzL1RVMU4vMUpTVXY4N096di9XbHBhLzJOalkvOWpZMlAvV2xwYS96czdPLzlTVWxML1RVMU4vMDFOVGY5S1Nrci9VRkJRLzFCUVVQOUtTa3IvZXJWMy8zcXZkLzk2dFhmL2VxOTMveGc0RnY4WU9CYi9HRGdXL3hvL0dmOGFQeG4vR0RnVy94ZzRGdjhhUHhuL2VxOTMvM3F2ZC85NnRYZi9lclYzL3hvL0dmOFlPQmIvR0RnVy94by9HZjhhUHhuL0dEZ1cveG8vR2Y4YVB4bi83TlM0Lyt6VXVQL3Yyci8vNzlxLy8vTGR3di95M2NMLzh0L0kvK3pVdVAvdjJyLy83TlM0Lyt6VXVQL3kzOGovOHQzQy8rclV1UDhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVRVMU4vMDFOVGY5U1VsTC9YRnhjLzJGaFlmOXJhMnYvYTJ0ci8yRmhZZjljWEZ6L1VsSlMvMDFOVGY5TlRVMy9Ta3BLLzFCUVVQOVFVRkQvU2twSy8zcTFkLzk2cjNmL2VyVjMvM3F2ZC8rTHVvai9qTDZLLzR1NmlQK012b3IvZmJKNi80dTZpUCtMdW9qL2pMNksvM3F2ZC85NnIzZi9lclYzLzNxdmQvK0x1b2ovakw2Sy80eStpdjk5c25yL2pMNksvNHU2aVArTHVvai9qTDZLLysvYXYvL3Yyci8vN05TNC8rL2F2Ly95MzhqLzh0L0kvL0xkd3YvdjJyLy83OXEvLysvYXYvL3MxTGovOHQvSS8vTGR3di95M2NML0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDgvUC84L1B6Ly9QejgvLzF4Y1hQOWpZMlAvY0hCdy8zQndjUDlqWTJQL1hGeGMvejgvUC84L1B6Ly9QejgvLzBoSVNQOU1URXovVEV4TS8waElTUDk2cjNmL2VyVjMvM3ExZC85NnIzZi9pN3FJLzJoRk1QOTFVRGovZFZBNC8zVlFPUDkxVURqL2FFVXcvNHU2aVA5NnRYZi9lcTkzLzNxMWQvOTZyM2YvaTdxSS80eStpditNdm9yL2pMNksvNHkraXYrTXZvci9qTDZLLzR1NmlQL3MxTGovNzltOS8relV1UC92MnIvLzh0L0kvL0xkd3YveTNjTC83TlM0Lyt6VXVQL3Yyci8vN05TNC8vTGZ5UC95M2NMLzh0M0Mvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCa1FTei9aRUVzLzJSQkxQOWtRU3ovS0Nnby95Z29LUDhvS0NqL0tDZ28vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTZKMU0vM3ExZC85NnIzZi8yTHFVLyt2VHMvL1l1cFQvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFaRUVzLzJSQkxQOWtRU3ovWkVFcy95Z29LUDhvS0NqL0tDZ28veWdvS1A4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT1daUi8vb25Vei9lcTkzLzlpNmxQL3IwN1AvMkxxVS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdSQkxQOWtRU3ovWkVFcy8yUkJMUDhvS0NqL0tDZ28veWdvS1A4b0tDai9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEbG1VZi81WTAvLzNxdmQvL3IwN1AvMkxxVS8rdlRzLzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmtRU3ovWkVFcy8yUkJMUDlrUVN6L0tDZ28veWdvS1A4b0tDai9LQ2dvL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE1WTAvLzNxMWQvOTZyM2YvNjlPei85aTZsUC9yMDdQL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCb1JURC9aRUVzLzJoRk1QOWtRU3ovYlVvei80QmFRUDk1VlQzL2FFVXcvMmhGTVA5a1FTei9hRVV3LzJSQkxQOXZURFgvZmJKNi80eStpditNdm9yL2VxOTMvM3ExZC85NnIzZi81WmxILytXTlAvK0x1b2ovaTdxSS8zcXZkLzk2cjNmL2VxOTMvM3F2ZC8rTHVvai9qTDZLLytXTlAvOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFaRUVzLzJoRk1QOWtRU3ovYUVVdy8yaEZNUDk1VlQzL2VWVTkvM0pPTnY5a1FTei9hRVV3LzJoRk1QOWtRU3ovYjB3MS80QmFRUCtBV2tEL2NrNDIvM3F2ZC85NnIzZi9lcTkzLytpZFRQL2xtVWYvaTdxSS80dTZpUDk2cjNmL2VyVjMvM3F2ZC85NnIzZi9pN3FJLzR1NmlQK012b3IvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdSQkxQOW9SVEQvWkVFcy8yaEZNUDl5VGpiL2FFVXcvNEJhUVA5dlREWC9aRUVzLzJoRk1QOWtRU3ovYUVVdy8yOU1OZitBV2tEL2VWVTkvM0pPTnY5NnIzZi9lclYzLzNxMWQvOTZ0WGYvaTdxSS80eStpdjk5c25yL2VxOTMvM3ExZC85NnRYZi9lcTkzLzR5K2l2K0x1b2ovakw2Sy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmtRU3ovWkVFcy8yUkJMUDlvUlREL2NrNDIvM2xWUGY5b1JURC9hRVV3LzJSQkxQOW9SVEQvWkVFcy8yaEZNUDl2VERYL2dGcEEvM2xWUGY5eVRqYi9nSUphLzRlSll2K0hpV0wvZ0lKYS80YUhZZitQa0d2L2hvZGgvNENDV3YrSGlXTC9oNGxpLzRDQ1d2K0doMkgvajVCci80YUhZZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWkVFcy8yUkJMUDlrUVN6L1pFRXMvMjlNTmYrR1hrYi9obDVHLzI5TU5mOWtRU3ovWkVFcy8yUkJMUDlrUVN6L2FFVXcvMmhGTVA5b1JURC9hRVV3LytUSnFQL2t5YWovNU1tby8rVEpxUC9yMDdQLzY5T3ovK3ZUcy8va3lhai81TW1vLytUSnFQL2t5YWovNjlPei8rdlRzLy9yMDdQL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEczdPLzg3T3p2L096czcvMlJCTFA5b1JURC9lRlE4LzNoVVBQOW9SVEQvWkVFcy96czdPLzg3T3p2L096czcvMFpHUnY5R1JrYi9Sa1pHLzBaR1J2L2t5YWovNU1tby8rdlRzLy9yMDdQLzh0cTYvL0xhdXYvcjA3UC82OU96Lyt2VHMvL2t5YWovNjlPei8vTGF1di9yMDdQLzh0cTYvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJKU1VuL1NVbEovMGxKU2Y4N096di9XbHBhLzExZFhmOWRYVjMvV2xwYS96czdPLzlKU1VuL1NVbEovMGxKU2Y5TlRVMy9WMWRYLzFkWFYvOU5UVTMvNU1tby8rdlRzLy9yMDdQLzY5T3ovL0xhdXYveTJyci84dHE2Lyt2VHMvL3MxTGovNjlPei8relV1UC95MnJyLzh0cTYvL0xkd3Y4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNVbEovMGxKU2Y5SlNVbi9TVWxKLzJGaFlmOXJhMnYvYTJ0ci8yRmhZZjlKU1VuL1NVbEovMGxKU2Y5SlNVbi9UVTFOLzFkWFYvOVhWMWYvVFUxTi8relV1UC9yMDdQLzdOUzQvKy9admYvcDBiUC84dHE2Ly9MYXV2L3IwN1AvN05TNC8rWExyZi9zMUxqLzh0cTYvL0xhdXYveTNjTC9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRWxKU2Y5SlNVbi9PenM3LzBsSlNmOWhZV0gvYTJ0ci8ydHJhLzloWVdIL1NVbEovenM3Ty85SlNVbi9TVWxKLzAxTlRmOVhWMWYvVjFkWC8wMU5UZi9zMUxqLzdOUzQvK3pVdVAvczFMai82ZEd6Ly9MZHd2L3kzY0wvN05TNC8relV1UC9zMUxqLzdOUzQvK25Scy8veTNjTC84dDNDL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCTlRVMy9UVTFOLzFKU1V2ODdPenYvV2xwYS8yTmpZLzlqWTJQL1dscGEvenM3Ty85U1VsTC9UVTFOLzAxTlRmOUtTa3IvVUZCUS8xQlFVUDlLU2tyLzdOUzQvK3pVdVAvdjJyLy83TlM0Ly9MZHd2L3kzY0wvNmRHei8relV1UC9zMUxqLzc5cS8vK3pVdVAveTNjTC84dDNDLy9MZHd2OEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFUVTFOLzAxTlRmOVNVbEwvWEZ4Yy8yRmhZZjlyYTJ2L2EydHIvMkZoWWY5Y1hGei9VbEpTLzAxTlRmOU5UVTMvU2twSy8xQlFVUDlRVUZEL1NrcEsvKy9hdi8vczFMai83OXEvLyt6VXVQL3kzY0wvOHQvSS8vTGR3di92MnIvLzdOUzQvK3pVdVAvdjJyLy84dDNDLy9MZnlQL3kzOGovQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ4L1AvOC9Qei8vUHo4Ly8xeGNYUDlqWTJQL2NIQncvM0J3Y1A5alkyUC9YRnhjL3o4L1AvOC9Qei8vUHo4Ly8waElTUDlNVEV6L1RFeE0vMGhJU1AvdjJyLy82OU96Lyt6VXVQL3MxTGovOHQvSS8vTGR3di95M2NMLzdOUzQvKy9hdi8vczFMai83TlM0Ly9MZHd2L3kzOGovOHQvSS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPT0iLCJTa2luSWQiOiJTdGFuZGFyZF9BbGV4In0K.gN2HJV9_WW1hvVj-gGKGJsCGEafIiGnTFgKRUKF2CqhiQk4dgB1dHFnZOglDN4VtW397jIPgs92ppMkyfZf8-09XQ87_o_eC1nvuscmBXt6Bn2UZQP_VYFqh_eCAXvCP" +} + + +var clientData = example.clientData; +var chain1 = example.chain.chain[0]; +var chain2 = example.chain.chain[1]; +var secret = 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8ELkixyLcwlZryUQcu1TvPOmI2B7vX83ndnWRUaXm74wFfa5f/lwQNTfrLVHa2PmenpGI6JhIMUJaWZrjmMj90NoKNFSNBuKdm8rYiXsfaz3K36x/1U26HpG0ZxK/V1V'; + +var decode1 = jwt.decode(chain1, secret, 'ES384'); +var nextKey1 = decode1.identityPublicKey; + +var decode2 = jwt.decode(chain2, nextKey1, 'ES384'); +var nextKey2 = decode2.identityPublicKey; + +var clientDecode = jwt.decode(clientData, nextKey1, 'ES384'); +console.log(clientDecode); diff --git a/package.json b/package.json index 6847f96..1d4c196 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ ], "license": "MIT", "dependencies": { + "jwt-simple": "^0.5.0", "prismarine-nbt": "^1.0.0", "protodef": "^1.2.0", "raknet": "^1.7.3",