From ff362593d8617b8a64592a0d8df473ccf20f6a4b Mon Sep 17 00:00:00 2001 From: alterdekim Date: Mon, 3 Jun 2024 18:53:48 +0300 Subject: [PATCH] GameUtilities service refactored. --- .../processor/GameUtilitiesProcessor.java | 1088 +---------------- .../component/processor/Processor.java | 9 +- .../client/request/BattlePayConfig.java | 22 +- .../client/request/CheckAccountLicenses.java | 20 +- .../client/request/CheckGameLicenses.java | 20 +- .../client/request/ClientRequestParser.java | 2 +- .../processor/client/request/GetAchieves.java | 18 +- .../client/request/GetAdventureProgress.java | 20 +- .../client/request/GetAssetsVersion.java | 20 +- .../client/request/GetBattlePayStatus.java | 27 +- .../client/request/NetCacheObject.java | 17 +- .../client/request/NetCacheObjectList.java | 14 +- .../client/request/SendUnsubcribeRequest.java | 4 +- .../processor/client/request/SetOptions.java | 8 +- .../client/request/SubscriptionRequest.java | 27 +- .../processor/client/request/UpdateLogin.java | 20 +- .../request/generic/AccountLicensesInfo.java | 34 + .../request/generic/AvailableFeatures.java | 49 + .../client/request/generic/Boosters.java | 34 + .../client/request/generic/CardBacks.java | 36 + .../client/request/generic/CardValues.java | 49 + .../client/request/generic/ClientOptions.java | 56 + .../client/request/generic/Collection.java | 34 + .../client/request/generic/DeckList.java | 85 ++ .../client/request/generic/DustBalance.java | 37 + .../request/generic/FavoriteHeroes.java | 80 ++ .../request/generic/GeneralGenericParser.java | 47 + .../client/request/generic/GenericParser.java | 20 + .../client/request/generic/GoldBalance.java | 39 + .../client/request/generic/HeroXP.java | 153 +++ .../client/request/generic/MedalInfo.java | 55 + .../generic/NotSoMassiveLoginReply.java | 136 +++ .../client/request/generic/PlayerRecords.java | 59 + .../request/generic/ProfileNotices.java | 33 + .../request/generic/ProfileProgress.java | 37 + .../request/generic/RewardProgress.java | 57 + .../hearthhack/reflect/AbstractParser.java | 5 + .../hearthhack/reflect/ReflectionLoader.java | 28 + .../hearthhack/util/GameUtilities.java | 64 + .../com/alterdekim/hearthhack/util/Util.java | 8 +- 40 files changed, 1490 insertions(+), 1081 deletions(-) create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GenericParser.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java create mode 100644 src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java create mode 100644 src/main/java/com/alterdekim/hearthhack/reflect/AbstractParser.java create mode 100644 src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java create mode 100644 src/main/java/com/alterdekim/hearthhack/util/GameUtilities.java diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java b/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java index e979f0c..0e0e265 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java @@ -3,21 +3,26 @@ package com.alterdekim.hearthhack.component.processor; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.component.processor.client.request.ClientRequestParser; import com.alterdekim.hearthhack.util.*; -import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; -import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.reflections.Reflections; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; +import java.util.Set; @Slf4j public class GameUtilitiesProcessor extends Processor { + private Map parsers; + public GameUtilitiesProcessor() { this.setProcessorId(9); + this.init(); } private ClientRequestBody parseClientRequest(Protocol.ClientRequest request) { @@ -41,1043 +46,6 @@ public class GameUtilitiesProcessor extends Processor { return requestBody; } - private void parseRequestNetCacheObject(int token, ClientRequestBody body, TcpConnection conn) throws InvalidProtocolBufferException { - parseGenericRequest(token, Protocol.UtilGenericRequest.parseFrom(body.getBody()), conn); - } - - private void processProfileProgress( int token, TcpConnection conn ) throws Exception { - Protocol.ProfileProgress profileProgress = Protocol.ProfileProgress.newBuilder() - .setProgress(6) - .setBestForge(0) - .build(); - - Protocol.Notification n = generateNotification(233, profileProgress.toByteString(), profileProgress.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processAvailableFeatures( TcpConnection conn ) throws Exception { - log.info("Guardian"); - Protocol.GuardianVars guardianVars = Protocol.GuardianVars.newBuilder() - .setShowUserUi(1) - .setClientOptionsUpdateIntervalSeconds(300) - .build(); - - Protocol.Notification n = generateNotification(264, guardianVars.toByteString(), guardianVars.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setStatus(0) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processGoldBalance( TcpConnection conn ) throws Exception { - Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder() - .setCap(999999) - .setBonusBalance(165) - .setCappedBalance(160) - .setCapWarning(2000) - .build(); - - byte[] b = generateNotification(278, gb.toByteString(), gb.getSerializedSize()).toByteArray(); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(b.length) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, b)); - - } - - private void processDeckList(int token, TcpConnection conn) throws Exception { - Protocol.DeckList deckList = Protocol.DeckList.newBuilder() - .addDecks(Protocol.DeckInfo.newBuilder() - .setId(794851023L) - .setName("The Fuck") - .setCardBack(0) - .setHero(637) - .setDeckType(Protocol.DeckType.NORMAL_DECK) - .setValidity(767L) - .setHeroPremium(0) - .setCardBackOverride(false) - .setHeroOverride(false) - .setLastModified(1461490210L) - .setSortOrder(1461490210L) - .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_BASIC_DECK)) - .addDecks(Protocol.DeckInfo.newBuilder() - .setId(794938262L) - .setName("The Cock") - .setCardBack(0) - .setHero(31) - .setDeckType(Protocol.DeckType.NORMAL_DECK) - .setValidity(767L) - .setHeroPremium(0) - .setCardBackOverride(false) - .setHeroOverride(false) - .setLastModified(1461490581L) - .setSortOrder(1461490581L) - .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_BASIC_DECK)) - .addDecks(Protocol.DeckInfo.newBuilder() - .setId(172325L) - .setName("precon") - .setCardBack(0) - .setHero(31) - .setDeckType(Protocol.DeckType.PRECON_DECK) - .setValidity(31L) - .setHeroPremium(0) - .setCardBackOverride(false) - .setHeroOverride(false) - .setSortOrder(0L) - .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_UNKNOWN)) - .addDecks(Protocol.DeckInfo.newBuilder() - .setId(171593L) - .setName("precon") - .setCardBack(0) - .setHero(637) - .setDeckType(Protocol.DeckType.PRECON_DECK) - .setValidity(31L) - .setHeroPremium(0) - .setCardBackOverride(false) - .setHeroOverride(false) - .setSortOrder(0L) - .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_UNKNOWN)) - .build(); - - Protocol.Notification n = generateNotification(202, deckList.toByteString(), deckList.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processBoosters(int token, TcpConnection conn) throws Exception { - //Protocol.BoosterList boosterList = Protocol.BoosterList.newBuilder().build(); - - Protocol.Notification n = generateEmptyNotification(224); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processCollection(int token, TcpConnection conn) throws Exception { - // Protocol.Collection collection = Protocol.Collection.newBuilder().build(); - - Protocol.Notification n = generateEmptyNotification(207); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processMedalInfo(TcpConnection conn) throws Exception { - Protocol.MedalInfo medalInfo = Protocol.MedalInfo.newBuilder() - .setWild(Protocol.MedalInfoData.newBuilder() - .setSeasonWins(0) - .setStars(0) - .setStreak(0) - .setStarLevel(1) - .setLevelStart(1) - .setLevelEnd(3) - .setCanLoseLevel(false) - .setBestStarLevel(1) - .setCanLoseStars(false)) - .setStandard(Protocol.MedalInfoData.newBuilder() - .setSeasonWins(0) - .setStars(0) - .setStreak(0) - .setStarLevel(1) - .setLevelStart(1) - .setLevelEnd(3) - .setCanLoseLevel(false) - .setBestStarLevel(1) - .setCanLoseStars(false)) - .build(); - - Protocol.Notification n = generateNotification(232, medalInfo.toByteString(), medalInfo.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processNotSoMassiveLoginReply(TcpConnection conn) throws Exception { - Protocol.NotSoMassiveLoginReply reply = Protocol.NotSoMassiveLoginReply.newBuilder() - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("launch")) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("naxx_1") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("naxx_2") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("naxx_3") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("naxx_4") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("naxx_5") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("gvg_promote") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("gvg_begin") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("gvg_arena") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_1") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_2") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_3") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_4") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_5") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_pre_sale") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("brm_normal_sale") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("tgt_pre_sale") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("tgt_normal_sale") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("loe_1") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("loe_2") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("loe_3") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("loe_4") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("feast_of_winter_veil") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("set_rotation_2016") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("og_pre_purchase") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("og_normal_sale") - .setStart(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("apple_charity_promo_2016") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("naxx_gvg_real_money_sale") - .setStart(1) - .setEnd(0)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("set_rotation_2016_freepacks") - .setStart(0) - .setEnd(5059030)) - .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() - .setEvent("set_rotation_2016_questline") - .setStart(0) - .setEnd(5059028)) - .setTavernBrawls(Protocol.TavernBrawlInfo.newBuilder() - .setNextStartSecondsFromNow(124398L)) - .build(); - - Protocol.Notification n = generateNotification(300, reply.toByteString(), reply.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processCardValues(TcpConnection conn) throws Exception { - - // Protocol.CardValues cardVals = Protocol.CardValues.newBuilder().build(); - - //Protocol.Notification n = generateNotification(260, medalInfo.toByteString(), medalInfo.getSerializedSize()); - - /* Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray()));*/ - - byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318840222BFAE010A0C667261676D656E745F30303012ADAE0132A9AE010A0B0A0308A2021028182820010A0F0A0508A202100110900318900320010A0D0A0308F90C10900318900320010A0F0A0508F90C100110C00C18C00C20010A0D0A0308ED0310900318900320010A0F0A0508ED03100110C00C18C00C20010A0B0A0308D9041064186420010A0F0A0508D904100110A00618A00620010A0D0A0308980710900318900320010A0F0A05089807100110C00C18C00C20010A0B0A0308B1081064186420010A0F0A0508B108100110A00618A00620010A0B0A030892051028182820010A0F0A05089205100110900318900320010A0B0A0308F7061064186420010A0F0A0508F706100110A00618A00620010A0B0A0308D2031064186420010A0F0A0508D203100110A00618A00620010A0D0A0308DC0A10900318900320010A0F0A0508DC0A100110C00C18C00C20010A0B0A0308A8081064186420010A0F0A0508A808100110A00618A00620010A0B0A0308DF161028180520000A0E0A0508B4051001109003183220000A0C0A0408BEAE021064181420000A0E0A0508FF03100110A006186420000A0D0A0308B80810C00C18900320000A0B0A0308AE061028180520000A0C0A0408F9AC021028180520000A0E0A0508C613100110A006186420000A0C0A04088AAD021028180520000A0E0A0508E5131001109003183220000A0B0A0308F7041064181420000A0E0A050888071001109003183220000A0E0A0508FB131001109003183220000A0B0A0308E2061028180520000A0D0A0308FA0610C00C18900320000A0E0A0508E1041001109003183220000A0D0A0408FDAF02109003186420000A0E0A0508A8031001109003183220000A0B0A0308F1131064181420000A0E0A0508C104100110A006186420000A0D0A0308FB1410C00C18900320000A0B0A0308F10F1028180520000A0B0A0308C4051064181420000A0E0A0508D50A100110A006186420000A0E0A040820100110801918C00C20000A0B0A0308F9111028180520000A0E0A0508BA131001109003183220000A0D0A0408D3AA02109003186420000A0F0A0608F5AC021001109003183220000A0B0A0308AC011028180520000A0B0A030890031028180520000A0C0A040880AD021064181420000A0E0A0508900F1001109003183220000A0E0A0508DB0F1001109003183220000A0C0A0408FDAE021028180520000A0F0A0508D513100110C00C18900320000A0B0A0308D2131028180520000A0C0A0308CD13109003186420000A0E0A0508A406100110A006186420000A0E0A05089347100110A006186420000A0B0A0308F6081028180520000A0B0A03089E011064181420000A0B0A0308E30F1028180520000A0B0A030888141028180520000A0B0A0308DC061028180520000A100A0608C2AE02100110801918C00C20000A0F0A0608F9AB02100110A006186420000A0F0A0608F9AC021001109003183220000A0E0A0508B906100110A006186420000A100A0608E9AC02100110801918C00C20000A0C0A03088305109003186420000A0B0A0308AF101028180520000A100A060886B102100110801918C00C20000A0C0A0308C10F109003186420000A0B0A0308900F1028180520000A0B0A030895141064181420000A0B0A0308EC051064181420000A0C0A0408DBAF021064181420000A0E0A05089E01100110A006186420000A0F0A0508E115100110C00C18900320000A0D0A0308F80C10C00C18900320000A0B0A03088D031028180520000A0F0A0508A110100110801918C00C20000A0E0A04084B100110C00C18900320000A0B0A030897101028180520000A0B0A0308FB051064181420000A0E0A0508DF02100110A006186420000A0C0A03089D10109003186420000A0E0A040824100110801918C00C20000A0F0A0608E2AF021001109003183220000A0E0A0508A414100110A006186420000A0D0A040856100110A006186420000A0B0A03088E051064181420000A0E0A0508C414100110A006186420000A0E0A0508B303100110A006186420000A0B0A0308900E1028180520000A0F0A05089B03100110801918C00C20000A0B0A0308E2071028180520000A0D0A04088DAE02109003186420000A0E0A0408EFAF0210C00C18900320000A0E0A0508E913100110A006186420000A100A060883AC02100110801918C00C20000A0F0A0608F6AE021001109003183220000A0E0A0508D9131001109003183220000A0E0A0508CB141001109003183220000A0A0A0208711064181420000A0B0A0308D9071028180520000A0F0A0608D9AE02100110A006186420000A0B0A0308F7111064181420000A0F0A0508D706100110801918C00C20000A0E0A05088104100110A006186420000A0C0A040885AD021028180520000A0E0A05089E02100110A006186420000A0B0A030880101028180520000A0E0A05089301100110A006186420000A0F0A0508DB06100110C00C18900320000A0B0A0308980D1064181420000A0F0A060888AC021001109003183220000A0F0A05088305100110C00C18900320000A0B0A0308FD111064181420000A0F0A0508D80F100110C00C18900320000A0E0A05088A03100110A006186420000A0E0A05088F141001109003183220000A0E0A0408A8AB0210C00C18900320000A0B0A0308CC081064181420000A0E0A0508E7161001109003183220000A0F0A0508E002100110C00C18900320000A0F0A0508EF08100110801918C00C20000A0B0A0308F8021028180520000A0E0A0508F60F1001109003183220000A0C0A040889AC021028180520000A0F0A0508A210100110801918C00C20000A0C0A040891AD021064181420000A0B0A0308DC0F1028180520000A0E0A0508B111100110A006186420000A0F0A05089417100110801918C00C20000A100A0608FEAF02100110801918C00C20000A0F0A05089C10100110C00C18900320000A0E0A0508D5161001109003183220000A0D0A04083D1001109003183220000A0F0A0508E10F100110801918C00C20000A0D0A0408C0AF02109003186420000A0D0A0308F60210C00C18900320000A0B0A030897061064181420000A0E0A05088601100110A006186420000A0C0A03088A01109003186420000A0E0A0508B6131001109003183220000A0E0A0508ED01100110A006186420000A0C0A0408A1AC021064181420000A0E0A0508FA0F100110A006186420000A0E0A05089D151001109003183220000A0E0A050882051001109003183220000A0D0A040871100110A006186420000A0F0A06088DAF021001109003183220000A0B0A03088D0F1064181420000A0C0A04089AAC021028180520000A0B0A0308C5081028180520000A0C0A0308B911109003186420000A0E0A0508E103100110A006186420000A0D0A0308DA0F10C00C18900320000A0C0A0408A9AF021028180520000A0B0A0308B8031064181420000A0B0A030899141064181420000A0F0A0608DBAF02100110A006186420000A0C0A0308B206109003186420000A0F0A0608DDAD02100110A006186420000A0B0A030899021064181420000A100A06089FB002100110801918C00C20000A0B0A0308BA011028180520000A0C0A0308B413109003186420000A0D0A03089A1410C00C18900320000A0C0A0308ED08109003186420000A0E0A0408E0AC0210C00C18900320000A0E0A0508B514100110A006186420000A0C0A040883AD021028180520000A0D0A0308E10F10C00C18900320000A0D0A04088DAC02109003186420000A0A0A0208251064181420000A0E0A05089014100110A006186420000A0F0A060893AD02100110A006186420000A0E0A0508B76C1001109003183220000A0E0A0508C9011001109003183220000A0E0A0508EC111001109003183220000A0E0A0508F405100110A006186420000A0B0A0308DD081064181420000A0B0A0308B3131064181420000A100A0608D9AF02100110C00C18900320000A0E0A0508BF141001109003183220000A0E0A0508FB0C1001109003183220000A0B0A020817109003186420000A0F0A0508BD13100110C00C18900320000A0C0A0308A204109003186420000A0E0A0508DC061001109003183220000A0B0A0308CB141028180520000A0B0A0308C4151064181420000A0F0A05088614100110C00C18900320000A0F0A0608B8AC02100110A006186420000A0D0A0308EC1510C00C18900320000A0C0A0308D013109003186420000A0E0A0508DE05100110A006186420000A0E0A0508FF0F1001109003183220000A0F0A0608F7AA021001109003183220000A0B0A0308C9041028180520000A0E0A0508F90E1001109003183220000A0F0A06089AAC021001109003183220000A0E0A0508C1161001109003183220000A0C0A0308D204109003186420000A0B0A030897151028180520000A0E0A0508F7031001109003183220000A0F0A0608E9AB021001109003183220000A0B0A0308BF161028180520000A0E0A0408E6AE0210C00C18900320000A0B0A0308CE061028180520000A0E0A0508C911100110A006186420000A0F0A0508D10F100110C00C18900320000A0B0A030890101028180520000A0F0A0608CEB102100110A006186420000A0F0A0508BA11100110C00C18900320000A0B0A0308D9151064181420000A0B0A0308C4161028180520000A0B0A0308CB051064181420000A0B0A030881101028180520000A0D0A0308C31610C00C18900320000A0E0A05088C0F1001109003183220000A0B0A0308ED091064181420000A0E0A0508C903100110A006186420000A0B0A0308DF151028180520000A0C0A0308EE02109003186420000A0E0A0508E90F1001109003183220000A0E0A0508F946100110A006186420000A0B0A0308E6161028180520000A0E0A0508C314100110A006186420000A0F0A0508B206100110C00C18900320000A100A0608A2AC02100110C00C18900320000A0F0A0508C20E100110C00C18900320000A0F0A0508EC15100110801918C00C20000A0E0A0508920E1001109003183220000A0C0A0408FEAE021028180520000A0F0A0508C50F100110C00C18900320000A0E0A0508BF17100110A006186420000A0B0A0308FF051028180520000A0E0A0508BF161001109003183220000A0E0A0508C80F100110A006186420000A0E0A0508F6061001109003183220000A0C0A03088609109003186420000A0E0A0508F704100110A006186420000A0F0A0508A810100110801918C00C20000A0F0A060886B002100110A006186420000A0E0A050892101001109003183220000A0E0A040809100110801918C00C20000A0B0A0308AD151064181420000A0B0A0308DB031064181420000A0E0A05088508100110A006186420000A0B0A0308B5141064181420000A0B0A0308C8161028180520000A0C0A0308BE0F109003186420000A0B0A030882121028180520000A0B0A0308F7051064181420000A0D0A0308C80310C00C18900320000A0F0A0508F013100110C00C18900320000A0E0A050897011001109003183220000A0E0A0508F4111001109003183220000A0B0A0308F60E1028180520000A0E0A0508D216100110A006186420000A0F0A0508D202100110801918C00C20000A0E0A0508E60F1001109003183220000A0B0A0308C4061028180520000A0C0A0308CE13109003186420000A0F0A0608DAB0021001109003183220000A0C0A0308CF14109003186420000A0B0A0308F6061028180520000A0B0A0308B4051028180520000A0B0A0308D20F1064181420000A0F0A0608B2AD021001109003183220000A0B0A030880041028180520000A0E0A05088A10100110A006186420000A0B0A0308C2081028180520000A0C0A0408B1B0021028180520000A0F0A060883AD021001109003183220000A100A0608A7AD02100110C00C18900320000A0B0A0308CE161028180520000A0E0A050885101001109003183220000A0B0A0308EB131028180520000A0C0A0308C814109003186420000A0E0A0508EE13100110A006186420000A0B0A0308F0111028180520000A0E0A05088910100110A006186420000A0F0A0508CB15100110C00C18900320000A0E0A05088E10100110A006186420000A0B0A0308880E1028180520000A0E0A050880041001109003183220000A0E0A0508C4061001109003183220000A0E0A0508AE031001109003183220000A0B0A0308AE031028180520000A0E0A0508D307100110A006186420000A0E0A0508C2151001109003183220000A0B0A03089A041028180520000A0B0A0308D3071064181420000A0A0A02082D1028180520000A0E0A0508B3011001109003183220000A0E0A05088B141001109003183220000A0D0A0408BDAC02109003186420000A0E0A0508FA051001109003183220000A0E0A05088B10100110A006186420000A0E0A0508CF131001109003183220000A0E0A0508F40F1001109003183220000A0C0A04088CAC021064181420000A0B0A0308A0151064181420000A0E0A0508C415100110A006186420000A0C0A0308C50F109003186420000A0F0A0508B90D100110801918C00C20000A0A0A02085F1064181420000A0E0A0508FD021001109003183220000A0D0A04081E1001109003183220000A0C0A03089609109003186420000A100A06088AB002100110801918C00C20000A0D0A03089D0D10C00C18900320000A0C0A0408B6AC021064181420000A0E0A0508CC161001109003183220000A0F0A05088609100110C00C18900320000A0E0A0508F80F100110A006186420000A0C0A04088BAF021064181420000A0E0A050893141001109003183220000A0B0A0308E90F1028180520000A0F0A0508CE0F100110C00C18900320000A0F0A0608D0AF021001109003183220000A0B0A0308E3111064181420000A0E0A0508A9151001109003183220000A0D0A0408DCAF02109003186420000A0E0A0508D3161001109003183220000A0C0A0408DDAD021064181420000A100A0608C4AB02100110C00C18900320000A0F0A0608F6AA021001109003183220000A0C0A040893AD021064181420000A0E0A0508DF141001109003183220000A0E0A0408CFB10210C00C18900320000A0F0A0608F1AF02100110A006186420000A0E0A0508F00F1001109003183220000A0E0A0408C9AF0210C00C18900320000A0C0A0408F2AF021028180520000A0D0A0308B40310C00C18900320000A0D0A0308841710C00C18900320000A0E0A0508D2131001109003183220000A0E0A0508810E100110A006186420000A0E0A0508FD051001109003183220000A0E0A0508AB021001109003183220000A0F0A0508A615100110C00C18900320000A0E0A0508F90F1001109003183220000A0F0A060886AD021001109003183220000A0F0A0508C001100110C00C18900320000A0E0A0508BE161001109003183220000A0F0A0508A010100110801918C00C20000A0B0A0308C9131064181420000A0E0A050896141001109003183220000A0C0A02080910C00C18900320000A0E0A0508F50F1001109003183220000A0F0A0508C803100110801918C00C20000A0E0A0508E4131001109003183220000A0B0A0308EE0F1064181420000A0D0A0308930F10C00C18900320000A0F0A05089F10100110801918C00C20000A0C0A0308DE14109003186420000A0E0A0508BB161001109003183220000A0B0A0308B7171064181420000A0D0A0308D61110C00C18900320000A0F0A0608F2AF021001109003183220000A0F0A0508AF04100110801918C00C20000A0B0A030895031028180520000A0B0A03088E171064181420000A0D0A0308BA0410C00C18900320000A0E0A0508D1131001109003183220000A0C0A0308A805109003186420000A0F0A05088F06100110C00C18900320000A0B0A0308F9031028180520000A0F0A05088005100110801918C00C20000A0C0A0408F9B0021028180520000A0B0A0308E4151064181420000A0E0A050883091001109003183220000A0E0A0508A015100110A006186420000A0F0A05088710100110C00C18900320000A0C0A0408BBAF021028180520000A0F0A05089007100110801918C00C20000A0C0A040882AD021028180520000A0E0A0508C5081001109003183220000A0E0A0508C1131001109003183220000A0F0A0508B911100110C00C18900320000A0B0A0308DF141028180520000A0E0A050899071001109003183220000A0B0A0308D5161028180520000A0B0A03088C0E1028180520000A0F0A0608B0B002100110A006186420000A0A0A0208161028180520000A0E0A05088C10100110A006186420000A0F0A06088CAC02100110A006186420000A0E0A0508F70F1001109003183220000A0B0A030887041028180520000A0F0A0508ED08100110C00C18900320000A0F0A0508C703100110C00C18900320000A0E0A0508CE061001109003183220000A0B0A03088C101064181420000A0F0A0508A610100110801918C00C20000A0B0A03088D081064181420000A0C0A0308DE16109003186420000A0F0A0508F602100110801918C00C20000A0B0A0308DD041064181420000A0B0A0308ED041028180520000A0E0A0508A2141001109003183220000A0B0A03088F141028180520000A0F0A0508D30F100110801918C00C20000A0E0A0508B717100110A006186420000A0E0A0508C50E1001109003183220000A0A0A02080C1064181420000A0B0A0308C3131028180520000A0E0A0508E006100110A006186420000A0B0A0308BF141028180520000A0B0A0308B76C1028180520000A0B0A030883141064181420000A0B0A03088F091064181420000A100A0608C7AE02100110C00C18900320000A0E0A0508F711100110A006186420000A0B0A0308D2111028180520000A0B0A03088A101064181420000A0A0A0208441028180520000A0E0A05089F031001109003183220000A0E0A0508F70C100110A006186420000A0B0A0308CC161028180520000A0C0A04088F9A021064181420000A0E0A0508B2141001109003183220000A0F0A0508A209100110801918C00C20000A0B0A0308FF031064181420000A0D0A0308840E10C00C18900320000A0B0A0308F20F1064181420000A0B0A030880071064181420000A0E0A0508EE111001109003183220000A0C0A0308E40F109003186420000A0B0A0308DC021028180520000A0D0A0308C20610C00C18900320000A0B0A0308CE031028180520000A0E0A0508DA131001109003183220000A0E0A0508C4131001109003183220000A0E0A0508F9111001109003183220000A0D0A0308A21010C00C18900320000A0E0A0508F0111001109003183220000A0E0A05088F10100110A006186420000A0E0A0508D9071001109003183220000A0B0A0308D4041064181420000A0E0A0508E9011001109003183220000A0B0A030887031064181420000A0E0A05089902100110A006186420000A0F0A0608FEAE021001109003183220000A0C0A03088710109003186420000A0D0A0308D71310C00C18900320000A0B0A0308A4071064181420000A0E0A0508D5031001109003183220000A0B0A0308E50F1064181420000A0F0A0508A614100110C00C18900320000A0E0A0508DE071001109003183220000A0E0A0508CE031001109003183220000A0C0A0408F5AC021028180520000A0C0A0408D4AF021028180520000A0F0A0508FB0E100110801918C00C20000A0C0A0308E915109003186420000A0F0A0508E20F100110C00C18900320000A0F0A0508C814100110C00C18900320000A0E0A0508C40E1001109003183220000A0B0A0308E8011028180520000A0B0A0308FD051028180520000A0E0A05089706100110A006186420000A0E0A0508DF151001109003183220000A0B0A03089F031028180520000A0E0A0408C0AC0210C00C18900320000A0C0A0308D613109003186420000A0E0A0508AD15100110A006186420000A0B0A03088E0E1028180520000A0F0A05088914100110C00C18900320000A0F0A0508A315100110C00C18900320000A0E0A05089310100110A006186420000A0B0A03088B141028180520000A0E0A05088C011001109003183220000A0E0A0508D404100110A006186420000A0C0A02082010C00C18900320000A0E0A0508D1111001109003183220000A0E0A0508AE10100110A006186420000A0C0A0408CEB1021064181420000A0D0A03088B0F10C00C18900320000A0F0A0508A515100110801918C00C20000A0E0A050884101001109003183220000A100A0608B1AF02100110C00C18900320000A0E0A0508C405100110A006186420000A0B0A030893011064181420000A0D0A0308890610C00C18900320000A0B0A030888071028180520000A0E0A0508A705100110A006186420000A0E0A040886B10210C00C18900320000A0B0A030892101028180520000A0E0A0508870E100110A006186420000A0E0A0508D40A1001109003183220000A0C0A0308A615109003186420000A0B0A0308CF161028180520000A0D0A0308A31010C00C18900320000A0C0A0308F508109003186420000A0F0A0508B914100110C00C18900320000A0B0A0308D4051028180520000A0B0A0308B9061064181420000A0E0A0508E507100110A006186420000A0E0A0508E30F1001109003183220000A0E0A0508E20C100110A006186420000A0E0A0508E9121001109003183220000A0C0A0308B702109003186420000A0E0A0508C9041001109003183220000A0B0A0308D8141064181420000A0B0A0308CD161028180520000A100A0608BDAC02100110C00C18900320000A0B0A030895101064181420000A0C0A0408A0AB021064181420000A0E0A05089A021001109003183220000A0E0A0508AE061001109003183220000A0B0A0308DB0A1064181420000A0E0A050890101001109003183220000A0D0A0308FB0810C00C18900320000A0B0A0308CD151028180520000A0B0A0308C3141064181420000A0B0A0308E1031064181420000A0B0A03088D101064181420000A0C0A0308E115109003186420000A0D0A0308D20210C00C18900320000A0C0A0308D10F109003186420000A0E0A05089914100110A006186420000A0E0A0508F20B100110A006186420000A0C0A0408C5AE021028180520000A0B0A030885041064181420000A0B0A0308EA0F1028180520000A0B0A0308AD101028180520000A100A0608A0B002100110801918C00C20000A100A0608E0AC02100110801918C00C20000A0D0A03089F1010C00C18900320000A0B0A0308E8121028180520000A0C0A03089810109003186420000A100A0608D3AE02100110801918C00C20000A0C0A03089A10109003186420000A0E0A050894141001109003183220000A0B0A0308C3011028180520000A0F0A0608CEAE02100110A006186420000A0B0A03089A021028180520000A0B0A030885081064181420000A0F0A05088A01100110C00C18900320000A0B0A0308D2141028180520000A0E0A05088703100110A006186420000A0C0A0408F1AF021064181420000A0D0A0308900710C00C18900320000A0C0A0408D0AF021028180520000A0F0A0508DE14100110C00C18900320000A0F0A0608D4AE02100110A006186420000A0F0A0508B413100110C00C18900320000A100A0608CDAF02100110C00C18900320000A0C0A0408F7AA021028180520000A0E0A0508D50F1001109003183220000A0F0A06088BAF02100110A006186420000A0E0A0508BB13100110A006186420000A0E0A05089403100110A006186420000A0D0A04082D1001109003183220000A0E0A0508CD151001109003183220000A0D0A0308D70610C00C18900320000A0E0A0508B7041001109003183220000A0F0A060880AF021001109003183220000A0B0A0308FC0F1028180520000A0E0A0508EB131001109003183220000A0B0A0308A5091028180520000A0E0A05088D031001109003183220000A0B0A0308DB0F1028180520000A0C0A0408AFAC021064181420000A0B0A0308810A1028180520000A0C0A0308BB03109003186420000A0F0A060884AD021001109003183220000A0E0A0508C509100110A006186420000A0E0A0508E2061001109003183220000A0B0A0308DF021064181420000A0B0A0308C4141064181420000A0E0A0508900E1001109003183220000A0C0A040888AC021028180520000A0F0A060891AD02100110A006186420000A0F0A05088B0F100110801918C00C20000A0B0A0308FB011028180520000A0D0A0308DA0D10C00C18900320000A0E0A0508EB16100110A006186420000A0E0A05089514100110A006186420000A0C0A0308BD13109003186420000A0B0A0308E1041028180520000A0F0A0508C90F100110801918C00C20000A0C0A0408CEAE021064181420000A0E0A0508E8121001109003183220000A0E0A0508EA0F1001109003183220000A0B0A0308F8131064181420000A0F0A05088412100110801918C00C20000A0D0A0408F2AE02109003186420000A0E0A0508BA161001109003183220000A0C0A0408ECAE021028180520000A0B0A0308D60F1028180520000A0E0A05088310100110A006186420000A100A0608A8AB02100110801918C00C20000A0D0A0308FB0E10C00C18900320000A0F0A0608B4AC021001109003183220000A0F0A0508CE13100110C00C18900320000A0C0A03089910109003186420000A0E0A0508FB11100110A006186420000A0F0A05089A10100110C00C18900320000A0C0A0308B914109003186420000A0E0A0508E2151001109003183220000A0C0A0408FBAA021064181420000A0F0A0508A510100110801918C00C20000A0B0A030891101064181420000A0B0A03089B151028180520000A0E0A0508AF101001109003183220000A0F0A0608DBB0021001109003183220000A0E0A0508E50F100110A006186420000A0D0A0308F80810C00C18900320000A0F0A05089002100110C00C18900320000A0F0A0608B8AD021001109003183220000A0E0A0508C3011001109003183220000A0D0A0408161001109003183220000A0B0A0308D2151064181420000A0C0A0308A315109003186420000A0E0A050886061001109003183220000A0B0A03088F0F1028180520000A0E0A05088504100110A006186420000A0D0A0308EF0F10C00C18900320000A0D0A0408A7AD02109003186420000A0E0A050897681001109003183220000A0B0A03088A031064181420000A100A0608C9AF02100110801918C00C20000A0E0A0508F2011001109003183220000A0F0A0508A710100110801918C00C20000A0C0A0308A614109003186420000A0D0A040887AB02109003186420000A0C0A0308C115109003186420000A0B0A0308C60F1064181420000A0B0A0308B0101028180520000A0E0A0508FB05100110A006186420000A0D0A0408B1AF02109003186420000A0F0A060888B002100110A006186420000A0E0A050881051001109003183220000A0B0A0308DE071028180520000A0B0A0308F9461064181420000A0F0A0508850E100110801918C00C20000A0B0A030880121028180520000A0B0A0308D9131028180520000A0D0A0308C50410C00C18900320000A0B0A0308C8131064181420000A0F0A0508C316100110801918C00C20000A0D0A0408CDAF02109003186420000A0E0A0408CBAC0210C00C18900320000A0E0A0508F705100110A006186420000A0E0A0508BA011001109003183220000A0C0A0308C70F109003186420000A0F0A0508D204100110C00C18900320000A0B0A0308FB131028180520000A0E0A0508FA11100110A006186420000A0E0A050895031001109003183220000A0D0A0408A9AD02109003186420000A0B0A0308ED021028180520000A0E0A0508E70F100110A006186420000A0C0A0308C001109003186420000A0C0A040888B0021064181420000A0E0A050896101001109003183220000A0B0A0308E9121028180520000A0D0A0308A61010C00C18900320000A0E0A0508E00F100110A006186420000A0B0A0308D2161064181420000A0B0A0308FA051028180520000A0E0A0508D814100110A006186420000A0B0A0308ED0F1064181420000A0B0A0308F5041064181420000A0B0A0308F70F1028180520000A0E0A0508CD161001109003183220000A0C0A0408F6AA021028180520000A0C0A0308E107109003186420000A0C0A0308DB06109003186420000A0C0A0408F9AB021064181420000A0E0A0508B714100110A006186420000A0B0A03089D021028180520000A0B0A0308C4131028180520000A0B0A0308C9011028180520000A0E0A0508810A1001109003183220000A0B0A0308C9031064181420000A0F0A0608E8AF021001109003183220000A0D0A0308B01510C00C18900320000A0F0A0508F80D100110C00C18900320000A0C0A040888AF021064181420000A0E0A05088D0E1001109003183220000A0F0A06088AAD021001109003183220000A100A0608F2AE02100110C00C18900320000A0B0A03089E021064181420000A0B0A0308FE0D1064181420000A0F0A0508ED16100110C00C18900320000A0F0A0608FFAF02100110A006186420000A0E0A0508BC051001109003183220000A0F0A060880AD02100110A006186420000A0F0A0608F2B002100110A006186420000A0B0A0308BB161028180520000A0C0A0408BEAB021028180520000A0C0A0408CFAF021028180520000A0B0A030882051028180520000A0E0A0508E311100110A006186420000A0F0A0508D80A100110C00C18900320000A0E0A0508D311100110A006186420000A0F0A05088414100110C00C18900320000A0E0A0508E415100110A006186420000A100A0608AEAB02100110801918C00C20000A0B0A0308F50F1028180520000A0B0A030893071064181420000A0F0A0608C4AE021001109003183220000A0C0A04088EAC021064181420000A0C0A0408D191021064181420000A0E0A0508CA08100110A006186420000A0B0A0308810E1064181420000A0F0A05089B10100110C00C18900320000A0F0A0508C20F100110801918C00C20000A0D0A0408F9AA02109003186420000A0E0A05088610100110A006186420000A0E0A0508CF161001109003183220000A0C0A0408D9AE021064181420000A0E0A040883AC0210C00C18900320000A0B0A0308F5131028180520000A0D0A0408FFAD02109003186420000A0D0A0308A41510C00C18900320000A0F0A05089A14100110801918C00C20000A0E0A0508E2081001109003183220000A0E0A0508F713100110A006186420000A0B0A0308DA131028180520000A0E0A0508EA161001109003183220000A0F0A0608BBAF021001109003183220000A0F0A0508F80C100110801918C00C20000A0F0A0508A310100110801918C00C20000A0B0A02084B109003186420000A0A0A0208561064181420000A0F0A0508A314100110801918C00C20000A0E0A0508AB061001109003183220000A100A0608CBAC02100110801918C00C20000A0E0A0508CB13100110A006186420000A0A0A02083D1028180520000A0B0A030886101064181420000A0F0A0508B403100110801918C00C20000A0F0A06088F9A02100110A006186420000A0E0A050881101001109003183220000A0E0A0508CE15100110A006186420000A0B0A0308D50A1064181420000A0D0A0308820E10C00C18900320000A0E0A0508CB0F100110A006186420000A0B0A0308F5051028180520000A0B0A0308D90D1028180520000A0F0A0508FB14100110801918C00C20000A100A0608B0AF02100110C00C18900320000A0B0A0308A7051064181420000A0E0A0408BFAC0210C00C18900320000A0C0A0408CBAF021028180520000A0E0A0408D8AC0210C00C18900320000A0C0A0408FAAA021064181420000A0B0A0308F90F1028180520000A0E0A0508D215100110A006186420000A0E0A050890151001109003183220000A0F0A0608AFAC02100110A006186420000A0B0A0308C0141028180520000A0F0A0508AC04100110801918C00C20000A0F0A0608C5AE021001109003183220000A0B0A0308CD0F1064181420000A0B0A0308E9131064181420000A0D0A03089E1010C00C18900320000A0C0A03089B10109003186420000A0E0A0508F807100110A006186420000A0E0A0508F9031001109003183220000A0B0A0308BA131028180520000A0B0A0308E2111028180520000A0B0A0308C9111064181420000A0B0A0308D3161028180520000A0E0A050882121001109003183220000A0C0A02082410C00C18900320000A0B0A0308FA0C1064181420000A0B0A0308E6111064181420000A0E0A0508B803100110A006186420000A0F0A0508E911100110801918C00C20000A0F0A0508FF0D100110801918C00C20000A0E0A0508940F1001109003183220000A0E0A0508D60A100110A006186420000A0B0A030896141028180520000A0B0A0308C5091064181420000A0C0A040884B0021064181420000A0E0A0508F5161001109003183220000A0F0A0508BC14100110C00C18900320000A100A0608E6AE02100110801918C00C20000A0F0A0508A410100110801918C00C20000A0E0A0508ED09100110A006186420000A0E0A0508C9071001109003183220000A0B0A0308FB0F1028180520000A0D0A04080C100110A006186420000A0E0A05088F0F1001109003183220000A0B0A030894101028180520000A0C0A0308C703109003186420000A0B0A0308EA161028180520000A0F0A0608A0AB02100110A006186420000A0B0A0308FB061064181420000A0D0A0308E81110C00C18900320000A0D0A0408FEAA02109003186420000A0D0A0308EF0810C00C18900320000A100A060892AC02100110C00C18900320000A0E0A0508FB0F1001109003183220000A0D0A03089B0310C00C18900320000A0F0A0508C914100110801918C00C20000A100A060881B102100110C00C18900320000A0E0A0508D015100110A006186420000A0F0A0508EF0F100110801918C00C20000A0C0A0408D2AE021028180520000A0C0A0408C4AE021028180520000A0B0A0308D1111028180520000A0F0A0508E915100110C00C18900320000A0C0A0308F80D109003186420000A0B0A0308C9161028180520000A0F0A060884B002100110A006186420000A0B0A030882161028180520000A0F0A0508BE0F100110C00C18900320000A0E0A0508F20F100110A006186420000A0B0A0308B2141028180520000A0E0A0508C0151001109003183220000A0E0A0508EE0F100110A006186420000A0B0A0308FE071028180520000A0B0A0308CB0F1064181420000A0E0A0508E611100110A006186420000A0D0A040825100110A006186420000A0B0A0308F7131064181420000A0B0A0308A4061064181420000A0D0A0308941710C00C18900320000A0E0A0508A106100110A006186420000A0B0A0308A1061064181420000A0B0A0308E7161028180520000A0C0A04088DAF021028180520000A0D0A0308FF0D10C00C18900320000A100A0608C0AC02100110801918C00C20000A0B0A0308CA081064181420000A0B0A0308A8031028180520000A0F0A0508BB03100110C00C18900320000A0E0A0508FB06100110A006186420000A0F0A05089609100110C00C18900320000A0B0A0308F4111028180520000A0B0A0308C7171028180520000A0B0A0308890F1064181420000A0B0A03088A0E1028180520000A0E0A0508F8021001109003183220000A0C0A03089C10109003186420000A0B0A030891171064181420000A100A0608A7AC02100110C00C18900320000A0B0A0308F70D1028180520000A0E0A0408AEAB0210C00C18900320000A0C0A03089101109003186420000A0D0A04085F100110A006186420000A0F0A0608CFAF021001109003183220000A0D0A0308A81010C00C18900320000A0F0A060889AC021001109003183220000A0C0A0308BA11109003186420000A0E0A0508C308100110A006186420000A0B0A0308F70C1064181420000A0C0A0408FAB0021064181420000A0B0A03088E0F1064181420000A0B0A0308CB131064181420000A0E0A040817100110C00C18900320000A0B0A0308BE161028180520000A0C0A03088B08109003186420000A0B0A0308F80F1064181420000A0B0A0308E6041028180520000A0E0A050887041001109003183220000A0F0A0508BD14100110801918C00C20000A0E0A0508C8161001109003183220000A100A0608A4AC02100110C00C18900320000A0B0A0308E5131028180520000A0E0A0408E9AC0210C00C18900320000A0F0A06089DAC02100110A006186420000A100A0608EFAF02100110801918C00C20000A0B0A0308F4051064181420000A0C0A03088616109003186420000A0B0A030894141028180520000A0D0A0308A40310C00C18900320000A0B0A0308EE131064181420000A0E0A050882101001109003183220000A0D0A0308FC1310C00C18900320000A0B0A0308AE101064181420000A0F0A0508DF0F100110C00C18900320000A0C0A0408F2B0021064181420000A0B0A0308C7131028180520000A0D0A0308800510C00C18900320000A0B0A0308D20A1028180520000A0E0A0508D1141001109003183220000A0E0A0508ED021001109003183220000A0E0A0508DE15100110A006186420000A0B0A0308CF131028180520000A0F0A05089910100110C00C18900320000A0C0A0308950F109003186420000A0B0A0308BF171064181420000A0E0A0508D3131001109003183220000A0D0A0308ED0510C00C18900320000A0B0A03088A061028180520000A0B0A030896101028180520000A0B0A0308E20C1064181420000A0B0A0308C2151028180520000A0F0A0608A1AC02100110A006186420000A0D0A0408C7AE02109003186420000A0E0A0408D3AE0210C00C18900320000A0F0A0508D511100110801918C00C20000A0E0A0508EA041001109003183220000A0E0A0508A5091001109003183220000A0F0A0508EC0F100110C00C18900320000A0B0A0308D40A1028180520000A0F0A0508C115100110C00C18900320000A0B0A0308E00F1064181420000A0C0A04089DAC021064181420000A0B0A03088E101064181420000A0F0A0608FDAE021001109003183220000A0F0A05088417100110801918C00C20000A0B0A0308A2141028180520000A0B0A0308E0061064181420000A0F0A060881B0021001109003183220000A0B0A0308D4111028180520000A0F0A0508EB02100110801918C00C20000A0B0A0308A4141064181420000A0F0A0508D002100110801918C00C20000A0B0A0308F2011028180520000A100A0608A9AD02100110C00C18900320000A0B0A0308C2161028180520000A0E0A050880121001109003183220000A0C0A0308D513109003186420000A0B0A0308DC011064181420000A0C0A040880AF021028180520000A0D0A0308871710C00C18900320000A0E0A0508D60F1001109003183220000A0B0A0308D4081028180520000A0E0A0508FA0C100110A006186420000A0E0A0508C3131001109003183220000A0F0A0508930F100110801918C00C20000A0B0A0308910E1028180520000A0E0A0508E6161001109003183220000A0E0A0508DD0F100110A006186420000A0C0A0308E002109003186420000A0D0A04088AAE02109003186420000A0B0A03089D151028180520000A0E0A0508870F1001109003183220000A0B0A0308C1041064181420000A100A0608F9AA02100110C00C18900320000A0B0A030894031064181420000A0B0A0308C9071028180520000A0E0A0408C4AC0210C00C18900320000A0F0A05088906100110801918C00C20000A0E0A05089B151001109003183220000A0E0A050896061001109003183220000A0F0A0508B808100110801918C00C20000A0D0A0308F21310C00C18900320000A0E0A0508FA0D100110A006186420000A0C0A0308A708109003186420000A0F0A0508BA14100110801918C00C20000A0B0A0308C5031064181420000A0E0A0508FB011001109003183220000A0E0A0508890F100110A006186420000A0B0A0308B1111064181420000A0E0A0508DC01100110A006186420000A0E0A0508F2111001109003183220000A0E0A0508F811100110A006186420000A0E0A0508ED13100110A006186420000A0B0A0308F60F1028180520000A0B0A0308EC111028180520000A0E0A05088810100110A006186420000A0B0A0308E5071064181420000A0E0A0508D20F100110A006186420000A0F0A05089D0D100110801918C00C20000A0E0A0508F311100110A006186420000A0F0A0508C207100110801918C00C20000A0D0A0308EB0210C00C18900320000A0D0A0308AF0410C00C18900320000A0C0A0308F013109003186420000A0B0A030882101028180520000A0F0A0508D301100110C00C18900320000A0C0A0408DDAE021028180520000A0E0A0508C60F100110A006186420000A0E0A05088E0F100110A006186420000A0B0A0308FB111064181420000A0E0A0508DF161001109003183220000A0E0A0508DB03100110A006186420000A0D0A0308CA1410C00C18900320000A0E0A0508D2141001109003183220000A0C0A040886AD021028180520000A0F0A0608D4AF021001109003183220000A0E0A0508D40F100110A006186420000A0B0A0308F3111064181420000A0F0A060885AD021001109003183220000A0E0A0508F60E1001109003183220000A0B0A030899071028180520000A0E0A0508DB0A100110A006186420000A0E0A050897101001109003183220000A0D0A0308BC1510C00C18900320000A0D0A0408A7AC02109003186420000A0F0A0508CF14100110C00C18900320000A0F0A0608F4AF02100110A006186420000A0B0A0308890E1028180520000A0E0A0508C2081001109003183220000A0B0A0308A9151028180520000A0E0A0508DC15100110A006186420000A0E0A0508D915100110A006186420000A0B0A0308B4141064181420000A0C0A0308D90F109003186420000A0B0A0308E2151028180520000A0E0A0508CC08100110A006186420000A0E0A0508F111100110A006186420000A0E0A0508C0141001109003183220000A0E0A0508C7131001109003183220000A0C0A0308DF0F109003186420000A0B0A0308CE151064181420000A0C0A0308F305109003186420000A0B0A0308D8131028180520000A0E0A0508C90D100110A006186420000A0C0A0408FEAC021028180520000A0F0A06088EAC02100110A006186420000A0E0A0508F813100110A006186420000A0F0A0508A805100110C00C18900320000A0E0A0508F504100110A006186420000A0B0A0308F1111064181420000A100A0608AEB002100110C00C18900320000A0B0A0308BC051028180520000A0F0A0508C206100110801918C00C20000A0E0A0508D4111001109003183220000A0B0A0308E9011028180520000A0E0A0508DE0F100110A006186420000A0E0A0508FD0D1001109003183220000A100A0608FDAF02100110C00C18900320000A0B0A0308FF0F1028180520000A0F0A0508F914100110801918C00C20000A0B0A0308C40F1028180520000A0B0A0308CE141064181420000A0B0A0308F8071064181420000A0E0A0508D8131001109003183220000A0E0A0508C503100110A006186420000A0B0A030886061028180520000A0E0A0508D711100110A006186420000A100A0608DCAF02100110C00C18900320000A0F0A0508E811100110801918C00C20000A0C0A0408B8AC021064181420000A0F0A0508FC13100110801918C00C20000A0E0A05089D06100110A006186420000A0C0A0408DAB0021028180520000A0B0A0308EA041028180520000A0B0A0308C3081064181420000A0B0A0308F90E1028180520000A0E0A0508F10F1001109003183220000A0E0A0508C0071001109003183220000A0B0A0308920E1028180520000A0B0A030889101064181420000A0F0A0508950F100110C00C18900320000A0E0A0508E8011001109003183220000A0E0A0508CE14100110A006186420000A0E0A0508EC05100110A006186420000A0B0A0308FD0D1028180520000A0B0A0308CA161028180520000A0F0A0608F7AB021001109003183220000A0E0A0408FEAF0210C00C18900320000A0B0A03088D0E1028180520000A0D0A0308FA1410C00C18900320000A0C0A0308920F109003186420000A0F0A0508C515100110801918C00C20000A0E0A050882161001109003183220000A0E0A05088F0E1001109003183220000A100A0608FFAD02100110C00C18900320000A0E0A0408A0B00210C00C18900320000A0F0A05088717100110801918C00C20000A0F0A0508E107100110C00C18900320000A0B0A0308BA161028180520000A0E0A05089117100110A006186420000A0C0A0308BC14109003186420000A100A06088DAC02100110C00C18900320000A0E0A0508980D100110A006186420000A0C0A0308FD0F109003186420000A100A0608D8AC02100110801918C00C20000A0B0A0308E7111064181420000A0E0A0508E6041001109003183220000A0D0A0408D9AF02109003186420000A0E0A05089E07100110A006186420000A0F0A0508A403100110801918C00C20000A0B0A0308C90D1064181420000A0E0A0508CB16100110A006186420000A0F0A0608FBAA02100110A006186420000A0F0A0508E40F100110C00C18900320000A0E0A050890031001109003183220000A0D0A0408AEB002109003186420000A0C0A0408E8AF021028180520000A0B0A0308CB161064181420000A0F0A0508BF08100110C00C18900320000A0E0A0508C40F1001109003183220000A0E0A0508DD0A1001109003183220000A0E0A05088A061001109003183220000A0E0A0508B2081001109003183220000A0E0A0508CF151001109003183220000A0B0A0308D5081064181420000A0E0A0508DB091001109003183220000A100A0608C0AF02100110C00C18900320000A0D0A0308A11010C00C18900320000A0C0A0308910F109003186420000A0B0A0308E70F1064181420000A0B0A0308F6071064181420000A0B0A030893471064181420000A0F0A0608B1B0021001109003183220000A0B0A030897011028180520000A0C0A0308E20F109003186420000A0F0A0608FAAC021001109003183220000A0F0A0608FBAB02100110A006186420000A0B0A0308ED011064181420000A0E0A0508FE0D100110A006186420000A0C0A0408B9AB021064181420000A0C0A0408B0B0021064181420000A0E0A0508DC0F1001109003183220000A0E0A0508F30F1001109003183220000A0B0A0308870E1064181420000A0D0A0408221001109003183220000A0F0A0608CBAF021001109003183220000A0E0A0508CA161001109003183220000A0B0A0308C8041028180520000A0F0A0508FA0E100110801918C00C20000A0F0A05088B08100110C00C18900320000A0D0A0308851710C00C18900320000A0F0A0608ADB002100110A006186420000A0B0A0308F2051028180520000A0D0A0408A4AC02109003186420000A0B0A0308F50D1028180520000A0D0A0308C51510C00C18900320000A0C0A0408FFAF021064181420000A100A0608C4AC02100110801918C00C20000A0E0A05088E0E1001109003183220000A0B0A0308EB161064181420000A0B0A030883091028180520000A0D0A0308F91410C00C18900320000A0E0A0508890E1001109003183220000A0F0A0508AA06100110C00C18900320000A0D0A0308E91110C00C18900320000A0E0A0508EE01100110A006186420000A0C0A0408DBB0021028180520000A0F0A0508A715100110801918C00C20000A0C0A0408E2AF021028180520000A0E0A050881171001109003183220000A0B0A0308B7141064181420000A0B0A0308F8111064181420000A0F0A0508D613100110C00C18900320000A0D0A0308BA1410C00C18900320000A0B0A030883101064181420000A0F0A0508B702100110C00C18900320000A0B0A0308DE0F1064181420000A0F0A0608A9AF021001109003183220000A0B0A0308FE0C1064181420000A0B0A0308C6131064181420000A0B0A0308E4131028180520000A0F0A0608E0B002100110A006186420000A0F0A0608B6AC02100110A006186420000A100A0608BFAC02100110801918C00C20000A0F0A0508FB08100110801918C00C20000A0E0A0508910E1001109003183220000A0B0A030891141028180520000A0D0A040881B102109003186420000A0B0A0308C0071028180520000A0B0A0308E7071028180520000A0D0A0308C90F10C00C18900320000A0E0A0508A407100110A006186420000A0F0A0508EE02100110C00C18900320000A0B0A0308FD021028180520000A0B0A030886011064181420000A0E0A0508B0101001109003183220000A0B0A030882081064181420000A0B0A0308880F1028180520000A0E0A04089FB00210C00C18900320000A0E0A0508CB05100110A006186420000A0F0A060882B0021001109003183220000A0F0A0508A708100110C00C18900320000A0B0A0308AB061028180520000A0F0A0508FD0F100110C00C18900320000A0B0A0308CF151028180520000A0B0A0308D5031028180520000A0E0A05088E17100110A006186420000A0B0A0308EE061028180520000A0D0A0308841210C00C18900320000A0E0A05088007100110A006186420000A0B0A03089D061064181420000A0B0A03088C021028180520000A100A06088DAE02100110C00C18900320000A0E0A0508D2111001109003183220000A0B0A0308F7031028180520000A0D0A0308B20210C00C18900320000A0B0A03088F0E1028180520000A0B0A0308FA111064181420000A0B0A0308BB131064181420000A0E0A0508ED041001109003183220000A0D0A0308AC0410C00C18900320000A0B0A0308C1161028180520000A0F0A0608FAB002100110A006186420000A0F0A0508C504100110801918C00C20000A0E0A0508FC0F1001109003183220000A100A0608FEAA02100110C00C18900320000A0F0A0608ECAE021001109003183220000A0E0A0508FE0C100110A006186420000A0B0A0308F30C1028180520000A0B0A0308C40E1028180520000A0E0A0508FD11100110A006186420000A0B0A0308D3131028180520000A0D0A0308D51110C00C18900320000A0E0A05089307100110A006186420000A0C0A0408ADB0021064181420000A0B0A030890151028180520000A0E0A05089D021001109003183220000A0F0A06088DAD021001109003183220000A0B0A030881171028180520000A100A0608D3AA02100110C00C18900320000A0E0A0508F5131001109003183220000A0C0A0308BF08109003186420000A0E0A05088D10100110A006186420000A0C0A03088D14109003186420000A0F0A0508B015100110801918C00C20000A0C0A040884AD021028180520000A0B0A0308E2081028180520000A0B0A030893101064181420000A0B0A0308E7131028180520000A0F0A05089D10100110C00C18900320000A0E0A0508D4081001109003183220000A0E0A0508C615100110A006186420000A0B0A0308940F1028180520000A0E0A05088E05100110A006186420000A0E0A0508E8151001109003183220000A0E0A0508CE161001109003183220000A0F0A0508A415100110801918C00C20000A0F0A0608BEAB021001109003183220000A0D0A0308B90D10C00C18900320000A0E0A05088C0E1001109003183220000A0F0A0508C815100110801918C00C20000A0C0A0308CE0F109003186420000A0E0A0508C8041001109003183220000A0F0A0508BA04100110801918C00C20000A0F0A05088517100110801918C00C20000A0E0A0508B8131001109003183220000A0F0A060888AF02100110A006186420000A0B0A0308FA0F1064181420000A0B0A0308ED131064181420000A0B0A0308D1141028180520000A0F0A05088D14100110C00C18900320000A0E0A04088AB00210C00C18900320000A0F0A05089F02100110C00C18900320000A0C0A0308D301109003186420000A0C0A0308C20E109003186420000A0C0A03088614109003186420000A0F0A0508D90F100110C00C18900320000A0E0A0508F50D1001109003183220000A0B0A0308DE051064181420000A0D0A040892AC02109003186420000A0F0A0508F213100110801918C00C20000A0B0A0308E60F1028180520000A0C0A040881B0021028180520000A0F0A0508D611100110801918C00C20000A100A060887AB02100110C00C18900320000A0B0A0308D60A1064181420000A0C0A040882B0021028180520000A0E0A05088D08100110A006186420000A0B0A0308DA041028180520000A0C0A0308D80A109003186420000A0F0A05088C14100110C00C18900320000A0D0A0308A51510C00C18900320000A0F0A0508DE16100110C00C18900320000A0B0A0308F00F1028180520000A0B0A0308AB021028180520000A0C0A03088914109003186420000A0E0A050880101001109003183220000A0B0A0308870F1028180520000A0D0A0408A2AC02109003186420000A0F0A0508ED05100110801918C00C20000A0E0A050897151001109003183220000A0D0A0308A31410C00C18900320000A0B0A0308EB111028180520000A0F0A05088616100110C00C18900320000A0B0A0308BF131028180520000A0F0A0508FA14100110801918C00C20000A0F0A0608F9B0021001109003183220000A100A0608CFB102100110801918C00C20000A0B0A0308B9171064181420000A0D0A0308850E10C00C18900320000A0B0A03088C0F1028180520000A0E0A05089668100110A006186420000A0F0A0508820E100110801918C00C20000A0F0A0608FEAC021001109003183220000A0E0A050891141001109003183220000A0E0A0508F70D1001109003183220000A0F0A0508910F100110C00C18900320000A0B0A03088B101064181420000A0E0A0508B917100110A006186420000A0D0A0308A71010C00C18900320000A0B0A0308DD0A1028180520000A0F0A05089810100110C00C18900320000A0E0A0508F6081001109003183220000A0B0A0308D40F1064181420000A0E0A0508E2071001109003183220000A0E0A0508B313100110A006186420000A0B0A030885101028180520000A0E0A0408C2AE0210C00C18900320000A0D0A0308BD1410C00C18900320000A0E0A0508D508100110A006186420000A0F0A0508840E100110801918C00C20000A0E0A05088C021001109003183220000A0E0A0508DD08100110A006186420000A0E0A05088A0E1001109003183220000A0B0A0308D50F1028180520000A0E0A0508FE071001109003183220000A0F0A0508D713100110801918C00C20000A0E0A0508ED0F100110A006186420000A0B0A03089E071064181420000A0C0A0408C9B0021028180520000A0E0A0508880E1001109003183220000A0E0A05088F09100110A006186420000A0B0A030893141028180520000A0C0A03089F02109003186420000A0B0A030897681028180520000A0C0A03088C14109003186420000A0F0A0508F808100110801918C00C20000A0B0A0308C80F1064181420000A0C0A0308EC0F109003186420000A100A06088AAE02100110C00C18900320000A0D0A0308C20F10C00C18900320000A0C0A03088F06109003186420000A0B0A0308E8151028180520000A0B0A0308F2111028180520000A0E0A0508EE061001109003183220000A0D0A0308A41010C00C18900320000A0F0A05089304100110C00C18900320000A0B0A0308B8131028180520000A0C0A0408B8AD021028180520000A0D0A0308C81510C00C18900320000A0F0A0508F305100110C00C18900320000A0E0A0508D4051001109003183220000A0F0A0508E80F100110801918C00C20000A0E0A0508EB111001109003183220000A0E0A05088D0F100110A006186420000A0E0A0508E2111001109003183220000A0E0A0508FC10100110A006186420000A0F0A0608BEAE02100110A006186420000A0E0A0508C9161001109003183220000A0E0A05089A041001109003183220000A0D0A0308C91410C00C18900320000A0B0A0308B2081028180520000A0D0A0308DA0610C00C18900320000A0F0A0508C10F100110C00C18900320000A0C0A0408D4AE021064181420000A0F0A0508D013100110C00C18900320000A0E0A05088208100110A006186420000A0B0A0308B3011028180520000A0C0A040886B0021064181420000A0A0A0208451028180520000A0B0A0308EE111028180520000A0D0A0408B0AF02109003186420000A0F0A0508DA0F100110801918C00C20000A0B0A0308D0151064181420000A0B0A0308DC151064181420000A0B0A0308C50E1028180520000A0F0A05089E10100110801918C00C20000A0B0A0308EE011064181420000A0E0A0508E7071001109003183220000A0C0A0308ED16109003186420000A0E0A0508D90D1001109003183220000A0B0A0308C1131028180520000A0C0A0308CB15109003186420000A0B0A0308FB0C1028180520000A0D0A0408451001109003183220000A0C0A03088414109003186420000A0C0A0408F4AF021064181420000A0C0A0408FBAB021064181420000A0E0A0508AD101001109003183220000A0E0A0508CD0F100110A006186420000A0E0A0508B414100110A006186420000A0B0A030896061028180520000A0D0A0308D00210C00C18900320000A0E0A0508E7131001109003183220000A0B0A0308B3031064181420000A0D0A0308A20910C00C18900320000A0B0A0308B7041028180520000A0C0A0408E0B0021064181420000A0D0A0308FA0E10C00C18900320000A0E0A0508AC011001109003183220000A0B0A0308F5161028180520000A0F0A0508EB0F100110C00C18900320000A0C0A0308D80F109003186420000A0F0A0508CD13100110C00C18900320000A0D0A0308D30F10C00C18900320000A0B0A03088C011028180520000A0F0A0508B202100110801918C00C20000A0E0A0508880F1001109003183220000A0B0A030881051028180520000A0B0A0308DB091028180520000A0E0A0508DA041001109003183220000A0D0A0408441001109003183220000A0A0A02081E1028180520000A0E0A05088314100110A006186420000A0D0A0308A01010C00C18900320000A0E0A0508FF051001109003183220000A0E0A0508F607100110A006186420000A0F0A0608DDAE021001109003183220000A0B0A0308D3111064181420000A0E0A0508D70F100110A006186420000A0B0A0308FE0F1028180520000A0B0A0308DE151064181420000A0E0A0508F2051001109003183220000A0D0A03088E0410C00C18900320000A0B0A0308B6131028180520000A0C0A0408E9AB021028180520000A0B0A030881041064181420000A0E0A05089510100110A006186420000A0C0A0408B4AC021028180520000A0B0A0308FC101064181420000A0E0A0508C2161001109003183220000A0F0A0508C70F100110C00C18900320000A0D0A0308E80F10C00C18900320000A0F0A0508CA14100110801918C00C20000A0D0A0408C4AB02109003186420000A0E0A0508BF131001109003183220000A0C0A0408B2AD021028180520000A0B0A030890141064181420000A0F0A05089101100110C00C18900320000A0B0A03088F101064181420000A0E0A05089110100110A006186420000A0F0A05088E04100110801918C00C20000A0F0A0608B9AB02100110A006186420000A0C0A0408F6AE021028180520000A0F0A060887AC021001109003183220000A0E0A0508F5051001109003183220000A0B0A0308D7111064181420000A0B0A0308C6151064181420000A0E0A0508F30C1001109003183220000A0D0A0308A71510C00C18900320000A0E0A0508D20A1001109003183220000A0B0A0308DD0F1064181420000A0E0A0508C913100110A006186420000A0C0A0408F7AB021028180520000A0F0A0608D2AE021001109003183220000A0F0A0608D19102100110A006186420000A0E0A0508C7171001109003183220000A0F0A05088707100110C00C18900320000A0C0A03089304109003186420000A0C0A0408C1AB021028180520000A0F0A05089B14100110C00C18900320000A0D0A0308C20710C00C18900320000A0B0A0308F40F1028180520000A0B0A030884101028180520000A0C0A03088707109003186420000A0F0A0508F508100110C00C18900320000A0C0A04088DAD021028180520000A0F0A0608FAAA02100110A006186420000A0A0A0208221028180520000A0B0A0308F30F1028180520000A0E0A050888141001109003183220000A0F0A0608C1AB021001109003183220000A0C0A03089B14109003186420000A0B0A0308F20B1064181420000A0F0A0508BC15100110801918C00C20000A0C0A0308EB0F109003186420000A0E0A0508E711100110A006186420000A0B0A0308D70F1064181420000A0F0A0508FA06100110801918C00C20000A0E0A0508DD04100110A006186420000A0B0A030896681064181420000A0C0A0308AA06109003186420000A0B0A0308D1131028180520000A0E0A0508C813100110A006186420000A0F0A0508A204100110C00C18900320000A0C0A0408FAAC021028180520000A0B0A030888101064181420000A0D0A0308A51010C00C18900320000A0E0A0508DC021001109003183220000A0E0A050894101001109003183220000A0E0A0508C4161001109003183220000A0F0A0608C9B0021001109003183220000A0F0A060882AD021001109003183220000A0C0A040887AC021028180520000A0C0A03089002109003186420000A0F0A0508920F100110C00C18900320000A0B0A0308FA0D1064181420000A0E0A0508F113100110A006186420000A0B0A0308C0151028180520000A0E0A0508FE0F100110900318322000100522140A0C6D6573736167655F73697A65120418A9AE012A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(b.length) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, b)); - } - - private void processRewardProgress(TcpConnection conn) throws Exception { - Protocol.RewardProgress rewardProgress = Protocol.RewardProgress.newBuilder() - .setSeasonEnd(Protocol.Date.newBuilder() - .setYear(2016) - .setMonth(5) - .setDay(31) - .setHours(22) - .setMin(6) - .setSec(18)) - .setWinsPerGold(3) - .setGoldPerReward(10) - .setMaxGoldPerDay(100) - .setSeasonNumber(31) - .setXpSoloLimit(60) - .setMaxHeroLevel(60) - .setEventTimingMod(-0.08333333f) - .setNextQuestCancel(Protocol.Date.newBuilder() - .setYear(2016) - .setMonth(5) - .setDay(3) - .setHours(0) - .setMin(0) - .setSec(0)) - .build(); - - Protocol.Notification n = generateNotification(271, rewardProgress.toByteString(), rewardProgress.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processPlayerRecords(TcpConnection conn) throws Exception { - Protocol.PlayerRecords playerRecords = Protocol.PlayerRecords.newBuilder() - .addRecords(Protocol.PlayerRecord.newBuilder() - .setType(Protocol.GameType.GT_VS_AI) - .setWins(1) - .setLosses(0)) - .addRecords(Protocol.PlayerRecord.newBuilder() - .setType(Protocol.GameType.GT_VS_AI) - .setData(637) - .setWins(1) - .setLosses(0)) - .addRecords(Protocol.PlayerRecord.newBuilder() - .setType(Protocol.GameType.GT_TUTORIAL) - .setWins(6) - .setLosses(1)) - .addRecords(Protocol.PlayerRecord.newBuilder() - .setType(Protocol.GameType.GT_TUTORIAL) - .setData(637) - .setWins(1) - .setLosses(0)) - .addRecords(Protocol.PlayerRecord.newBuilder() - .setType(Protocol.GameType.GT_TUTORIAL) - .setData(1325) - .setWins(5) - .setLosses(1)) - .build(); - - - Protocol.Notification n = generateNotification(270, playerRecords.toByteString(), playerRecords.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processDustBalance(TcpConnection conn) throws Exception { - Protocol.ArcaneDustBalance dustBalance = Protocol.ArcaneDustBalance.newBuilder() - .setBalance(665) - .build(); - - Protocol.Notification n = generateNotification(262, dustBalance.toByteString(), dustBalance.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processClientOptions(TcpConnection conn) throws Exception { - Protocol.ClientOptions clientOptions = Protocol.ClientOptions.newBuilder() - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(24) - .setAsInt32(3)) - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(1) - .setAsUint64(13514148956663808L)) - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(2) - .setAsUint64(549755813888L)) - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(20) - .setAsInt32(2)) - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(21) - .setAsInt32(1)) - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(8) - .setAsInt32(4)) - .addOptions(Protocol.ClientOption.newBuilder() - .setIndex(10) - .setAsInt32(1)) - .build(); - - Protocol.Notification n = generateNotification(241, clientOptions.toByteString(), clientOptions.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processHeroXP(TcpConnection conn) throws Exception { - - Protocol.HeroXP xp = Protocol.HeroXP.newBuilder() - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(2) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(823) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(3) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(437) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(4) - .setLevel(2) - .setCurrXp(12) - .setMaxXp(80) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(4) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(1084) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(5) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(847) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(6) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(1361) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(7) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(421) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(8) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(1171) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(9) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(982) - .setPremium(0)) - .setQuantity(2)) - )) - .addXpInfos(Protocol.HeroXPInfo.newBuilder() - .setClassId(10) - .setLevel(1) - .setCurrXp(0) - .setMaxXp(70) - .setNextReward(Protocol.NextHeroLevelReward.newBuilder() - .setLevel(2) - .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() - .setCard(Protocol.CardDef.newBuilder() - .setAsset(940) - .setPremium(0)) - .setQuantity(2)) - )) - .build(); - - Protocol.Notification n = generateNotification(283, xp.toByteString(), xp.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processFavoriteHeroes(TcpConnection conn) throws Exception { - Protocol.FavoriteHeroesResponse favoriteHeroesResponse = Protocol.FavoriteHeroesResponse.newBuilder() - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(2) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(274) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(3) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(31) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(4) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(637) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(5) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(671) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(6) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(813) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(7) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(930) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(8) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(1066) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(9) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(893) - .setPremium(0))) - .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() - .setClassId(10) - .setHero(Protocol.CardDef.newBuilder() - .setAsset(7) - .setPremium(0))) - .build(); - - Protocol.Notification n = generateNotification(318, favoriteHeroesResponse.toByteString(), favoriteHeroesResponse.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processCardBacks(TcpConnection conn) throws Exception { - Protocol.CardBacks cardBacks = Protocol.CardBacks.newBuilder() - .setDefaultCardBack(0) - .build(); - - Protocol.Notification n = generateNotification(236, cardBacks.toByteString(), cardBacks.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processAccountLicensesInfo(TcpConnection conn) throws Exception { - // Protocol.AccountLicensesInfoResponse - - Protocol.Notification n = generateEmptyNotification(325); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void processProfileNotices(TcpConnection conn) throws Exception { - // Protocol.ProfileNotices - Protocol.Notification n = generateEmptyNotification(212); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void parseGenericRequest(int token, Protocol.UtilGenericRequest genericRequest, TcpConnection conn) { - // body = genericRequest.getGenericData().getData().toByteArray() - GetAccountInfoRequest req = GetAccountInfoRequest.parseFromInt(genericRequest.getRequestSubId()); - try { - switch (req) { - case GOLD_BALANCE -> processGoldBalance(conn); - case CAMPAIGN_INFO -> processProfileProgress(token, conn); - case DECK_LIST -> processDeckList(token, conn); - case CLIENT_OPTIONS -> processClientOptions(conn); - case ARCANE_DUST_BALANCE -> processDustBalance(conn); - case CARD_VALUES -> processCardValues(conn); - case COLLECTION -> processCollection(token, conn); - case BOOSTERS -> processBoosters(token, conn); - case MEDAL_INFO -> processMedalInfo(conn); - case NOT_SO_MASSIVE_LOGIN -> processNotSoMassiveLoginReply(conn); - case REWARD_PROGRESS -> processRewardProgress(conn); - case PLAYER_RECORD -> processPlayerRecords(conn); - case HERO_XP -> processHeroXP(conn); - case FAVORITE_HEROES -> processFavoriteHeroes(conn); - case CARD_BACKS -> processCardBacks(conn); - case ACCOUNT_LICENSES -> processAccountLicensesInfo(conn); - case NOTICES -> processProfileNotices(conn); - case FEATURES -> processAvailableFeatures(conn); - default -> log.warn("Unknown generic request: {}", req); - } - } catch (Exception e) { - log.error(e.getMessage()); - } - } - - private void parseRequestNetCacheObjectList(int token, ClientRequestBody body, TcpConnection conn) throws InvalidProtocolBufferException { - Protocol.GenericRequestList genericRequestList = Protocol.GenericRequestList.parseFrom(body.getBody()); - genericRequestList.getRequestsList().forEach(gr -> this.parseGenericRequest(token, gr, conn)); - } - - private void parseSubscriptionRequest(ClientRequestBody body, int token, TcpConnection conn) throws Exception { - //body.getRoute() - Protocol.UtilSubscribeResponse response = Protocol.UtilSubscribeResponse.newBuilder() - .setRoute((int) (Math.random() * 100d)) - .setKeepAliveSecs(300) - .setMaxResubscribeAttempts(0) - .setPendingResponseTimeout(0) - .setPendingSubscribeTimeout(15) - .setRequestMaxWaitSecs(120) - .build(); - Protocol.ClientResponse clResponse = Protocol.ClientResponse.newBuilder() - .addAttribute(Protocol.Attribute.newBuilder() - .setName("id") - .setValue(Protocol.Variant.newBuilder() - .setIntValue(315) - )) - .addAttribute(Protocol.Attribute.newBuilder() - .setName("proto") - .setValue(Protocol.Variant.newBuilder() - .setBlobValue(response.toByteString()) - )) - .build(); - - Protocol.Header header = Processor.generateResponse(clResponse.getSerializedSize(), token, 0, 0); - conn.send(new BattleNetPacket(header, clResponse.toByteArray())); - } - - private void parseGetAssetsVersion(BattleNetPacket packet, TcpConnection conn) throws Exception { - Protocol.AssetsVersionResponse assetsVersionResponse = Protocol.AssetsVersionResponse.newBuilder() - .setVersion(11046) - .build(); - - Protocol.Notification n = generateNotification(304, assetsVersionResponse.toByteString(), assetsVersionResponse.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setStatus(0) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void parseCheckAccountLicenses(BattleNetPacket packet, TcpConnection conn) throws Exception { - Protocol.CheckAccountLicensesResponse response = Protocol.CheckAccountLicensesResponse.newBuilder() - .setSuccess(true) - .build(); - - Protocol.Notification n = generateNotification(330, response.toByteString(), response.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setStatus(0) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void parseUpdateLogin(BattleNetPacket packet, TcpConnection conn) throws Exception { - //Protocol.UpdateLogin updateLogin = Protocol.UpdateLogin.parseFrom(body.getBody()); - - Protocol.UpdateLoginComplete updateLoginComplete = Protocol.UpdateLoginComplete.newBuilder().build(); - - Protocol.Notification n = generateNotification(307, updateLoginComplete.toByteString(), updateLoginComplete.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void parseCheckGameLicenses(BattleNetPacket packet, TcpConnection conn) throws Exception { - Protocol.CheckGameLicensesResponse checkGameLicensesResponse = Protocol.CheckGameLicensesResponse.newBuilder() - .setSuccess(true) - .build(); - - Protocol.Notification n = generateNotification(331, checkGameLicensesResponse.toByteString(), checkGameLicensesResponse.getSerializedSize()); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - - } - - private void parseGetAdventureProgress(BattleNetPacket packet, TcpConnection conn) throws Exception { - /* Protocol.AdventureProgressResponse progressResponse = Protocol.AdventureProgressResponse.newBuilder() - .build();*/ - - // Protocol.Notification n = generateNotification(306, progressResponse.toByteString(), progressResponse.getSerializedSize()); - Protocol.Notification n = generateEmptyNotification(306); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void parseGetBattlePayConfig(TcpConnection conn) throws Exception { - /*Protocol.BattlePayConfigResponse configResponse = Protocol.BattlePayConfigResponse.newBuilder() - .setCurrency(4) - .setUnavailable(false) - .build(); - - Protocol.Notification n = generateNotification(238, configResponse.toByteString(), configResponse.getSerializedSize());*/ - - byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318EE0122E34F0A0C667261676D656E745F30303012D24F32CF4F0AB4010A14393931303030313530323130303030373233383211A4703D0AD7A3FC3F1A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E6172656E6170617373222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E6172656E61706173732A060802100018013A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E6172656E61706173730AB1010A1439393130303031353033313030303037323338331185EB51B81E8505401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657232222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572322A060801100118023A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572320AB1010A143939313030303135303431303030303732333834117B14AE47E1FA21401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657237222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572372A060801100118073A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572370AB4010A143939313030303135303531303030303732333835113D0AD7A370FD31401A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F737465723135222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657231352A0608011001180F3A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657231350AB4010A143939313030303135303631303030303732333836111F85EB51B87E46401A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F737465723430222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657234302A060801100118283A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657234300AC5010A1439393130303031383038303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030312A0608031001180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030315A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031383039303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030322A0608031002180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030325A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031383130303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030332A0608031003180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030335A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031383131303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030342A0608031004180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030345A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AE2010A1439393130303031383132303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030312A060803100118012A060803100318012A060803100218012A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030315A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ADA010A1439393130303031383133303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030322A060803100318012A060803100218012A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030325A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AD2010A1439393130303031383134303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030332A060803100318012A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030335A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031393232303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303035222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030352A0608031005180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030355A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACA010A1439393130303031393233303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030342A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030345A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AB6010A143939323030303139323332303030303032313633117B14AE47E1FA21401A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030312228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030312A070806108C1618012A060805101A18013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030314A066C61756E63680AB6010A143939323030303139323632303030303032313636117B14AE47E1FA21401A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030332228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030332A070806108D1618012A060805101B18013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030334A066C61756E63680AB6010A143939323030303139333232303030303032313732117B14AE47E1FA21401A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030322228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030322A070806108A1618012A060805101918013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030324A066C61756E63680A270A143939323030303334353632303030303033373536111F85EB51B87E4F402A0608011001183C0ACB010A1439393230303033343539323030303030333735391A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657232222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572322A060801100918023A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572325A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACB010A1439393230303033343632323030303030333736321A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657237222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572372A060801100918073A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572375A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACE010A1439393230303033343635323030303030333736351A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657231352230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657231352A0608011009180F3A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657231355A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACE010A1439393230303033343638323030303030333736381A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657234302230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657234302A060801100918283A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657234305A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650A380A1439393230303033343731323030303030333737312A0608011009183C5A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A14393932303031313935323230303030313330343411F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030312A0608041006180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030314A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313935353230303030313330343711F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030322A0608041007180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030324A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313935383230303030313330353011F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030332A0608041008180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030334A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313936313230303030313330353311F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030342A0608041009180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030344A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313936343230303030313330353611F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303035222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030352A060804100A180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030354A0F62726D5F6E6F726D616C5F73616C650AE2010A143939323030313139363732303030303133303539113D0AD7A370FD35401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030312A060804100618012A060804100718012A060804100818012A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030314A0F62726D5F6E6F726D616C5F73616C650ADA010A143939323030313139373032303030303133303632113D0AD7A370FD31401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030322A060804100718012A060804100818012A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030324A0F62726D5F6E6F726D616C5F73616C650AD2010A143939323030313139373332303030303133303635117B14AE47E1FA2B401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030332A060804100818012A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030334A0F62726D5F6E6F726D616C5F73616C650ACA010A143939323030313139373632303030303133303638117B14AE47E1FA21401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030342A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030344A0F62726D5F6E6F726D616C5F73616C650AEA010A143939323030313139373932303030303133303731113D0AD7A370FD35401A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E413030324230303170222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303031702A060804100618012A060804100718012A060804100818012A060804100918012A060804100A18012A060805101218013A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303031704A0C62726D5F7072655F73616C650AD6010A143939323030313539383732303030303137343537111F85EB51B87E46401A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F737465723530702231636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F737465723530702A060805101F18012A060801100A18323A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F737465723530704A0C7467745F7072655F73616C650ACB010A1439393330303030313836333030303030303138361185EB51B81E8505401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657232222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572322A060801100A18023A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572324A0F7467745F6E6F726D616C5F73616C650ACB010A143939333030303031383733303030303030313837117B14AE47E1FA21401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657237222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572372A060801100A18073A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572374A0F7467745F6E6F726D616C5F73616C650ACE010A143939333030303031383833303030303030313838113D0AD7A370FD31401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657231352230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657231352A060801100A180F3A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657231354A0F7467745F6E6F726D616C5F73616C650ACE010A143939333030303031393033303030303030313930111F85EB51B87E46401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657234302230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657234302A060801100A18283A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657234304A0F7467745F6E6F726D616C5F73616C650A380A143939333030303031393133303030303030313931111F85EB51B87E4F402A060801100A183C4A0F7467745F6E6F726D616C5F73616C650AC0010A143939333030303333303233303030303032353736117B14AE47E1FA21401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303342303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030332A060807100D18012A060807100E18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030334A056C6F655F310ABB010A14393933303030333330373330303030303235353911F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030312A060807100B180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030314A056C6F655F310ABB010A14393933303030333330383330303030303235363311F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030322A060807100C180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030324A056C6F655F310ABB010A14393933303030333330393330303030303235383411F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030332A060807100D180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030334A056C6F655F310ABB010A14393933303030333331303330303030303235383511F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030342A060807100E180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030344A056C6F655F310AD0010A143939333030303333313133303030303032353836113D0AD7A370FD31401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303342303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030312A060807100B18012A060807100C18012A060807100D18012A060807100E18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030314A056C6F655F310AC8010A143939333030303333313233303030303032353837117B14AE47E1FA2B401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303342303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030322A060807100C18012A060807100D18012A060807100E18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030324A056C6F655F310ACD010A143939333030303434313633303030303034303032113D0AD7A370FD31401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657231352230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657231352A060801100B180F3A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657231354A0E6F675F6E6F726D616C5F73616C650ACD010A143939333030303434313733303030303034303033111F85EB51B87E46401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657234302230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657234302A060801100B18283A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657234304A0E6F675F6E6F726D616C5F73616C650A370A143939333030303434313833303030303034313034111F85EB51B87E4F402A060801100B183C4A0E6F675F6E6F726D616C5F73616C650AD9010A143939333030303434373033303030303034303838111F85EB51B87E46401A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F737465723530702231636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F737465723530702A060801100B18322A060805102D18013A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F737465723530704A0F6F675F7072655F70757263686173650ACA010A1439393330303034343737333030303030343039351185EB51B81E8505401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657232222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572322A060801100B18023A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572324A0E6F675F6E6F726D616C5F73616C650ACA010A143939333030303434373833303030303034303936117B14AE47E1FA21401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657237222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572372A060801100B18073A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572374A0E6F675F6E6F726D616C5F73616C650ABA010A1439393330303035303434333030303030343636351A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030342228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030342A08080610CDB10218013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030344A186170706C655F636861726974795F70726F6D6F5F323031365002100428D80432040864100132150864100A1A0F7467745F6E6F726D616C5F73616C6532140864100B1A0E6F675F6E6F726D616C5F73616C6538960122130A0C6D6573736167655F73697A65120318CF4F2A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(b.length) // n.getSerializedSize() - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, b)); // n.toByteArray() - } - - private void parseGetAchieves(int token, TcpConnection conn) throws Exception { - //Protocol.GetAchieves getAchieves = Protocol.GetAchieves.parseFrom(body.getBody()); - // Achieves - - byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318FC0122A82F0A0C667261676D656E745F30303012972F32942F0A28080210011801200130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A28080310011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A31080F100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A310818100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A31083E100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A31083F100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A28084110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A31084F100218FFFFFFFFFFFFFFFFFF01280130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A28086110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A2908D80110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A2908D90110011801280130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A130801100018FFFFFFFFFFFFFFFFFF01280148010A130804100018FFFFFFFFFFFFFFFFFF01280148010A130805100018FFFFFFFFFFFFFFFFFF01280148010A130806100018FFFFFFFFFFFFFFFFFF01280148010A130807100018FFFFFFFFFFFFFFFFFF01280148010A130808100018FFFFFFFFFFFFFFFFFF01280148010A130809100018FFFFFFFFFFFFFFFFFF01280148010A13080A100018FFFFFFFFFFFFFFFFFF01280148010A13080D100018FFFFFFFFFFFFFFFFFF01280148010A13080E100018FFFFFFFFFFFFFFFFFF01280148010A130810100018FFFFFFFFFFFFFFFFFF01280148010A130811100018FFFFFFFFFFFFFFFFFF01280148010A130812100018FFFFFFFFFFFFFFFFFF01280148010A130813100018FFFFFFFFFFFFFFFFFF01280148010A130814100018FFFFFFFFFFFFFFFFFF01280148010A130815100018FFFFFFFFFFFFFFFFFF01280148010A130816100018FFFFFFFFFFFFFFFFFF01280148010A130817100018FFFFFFFFFFFFFFFFFF01280148010A130819100018FFFFFFFFFFFFFFFFFF01280148010A13081A100018FFFFFFFFFFFFFFFFFF01280148010A13081B100018FFFFFFFFFFFFFFFFFF01280148010A13081C100018FFFFFFFFFFFFFFFFFF01280148010A13081D100018FFFFFFFFFFFFFFFFFF01280148010A13081E100018FFFFFFFFFFFFFFFFFF01280148010A130837100018FFFFFFFFFFFFFFFFFF01280148010A130839100018FFFFFFFFFFFFFFFFFF01280148010A13083A100018FFFFFFFFFFFFFFFFFF01280148010A13083B100018FFFFFFFFFFFFFFFFFF01280148010A13083C100018FFFFFFFFFFFFFFFFFF01280148010A13083D100018FFFFFFFFFFFFFFFFFF01280148010A130842100018FFFFFFFFFFFFFFFFFF01280148010A130843100018FFFFFFFFFFFFFFFFFF01280148010A130844100018FFFFFFFFFFFFFFFFFF01280148010A130846100018FFFFFFFFFFFFFFFFFF01280148010A130847100018FFFFFFFFFFFFFFFFFF01280148010A130848100018FFFFFFFFFFFFFFFFFF01280148010A130849100018FFFFFFFFFFFFFFFFFF01280148010A13084A100018FFFFFFFFFFFFFFFFFF01280148010A13084B100018FFFFFFFFFFFFFFFFFF01280148010A13084C100018FFFFFFFFFFFFFFFFFF01280148010A13084D100018FFFFFFFFFFFFFFFFFF01280148010A13084E100018FFFFFFFFFFFFFFFFFF01280148010A130850100018FFFFFFFFFFFFFFFFFF01280148010A130851100018FFFFFFFFFFFFFFFFFF01280148010A130852100018FFFFFFFFFFFFFFFFFF01280148010A130853100018FFFFFFFFFFFFFFFFFF01280148010A130854100018FFFFFFFFFFFFFFFFFF01280148010A130855100018FFFFFFFFFFFFFFFFFF01280148010A130856100018FFFFFFFFFFFFFFFFFF01280148010A130857100018FFFFFFFFFFFFFFFFFF01280148010A130858100018FFFFFFFFFFFFFFFFFF01280148010A130859100018FFFFFFFFFFFFFFFFFF01280148010A13085A100018FFFFFFFFFFFFFFFFFF01280148010A13085B100018FFFFFFFFFFFFFFFFFF01280148010A13085C100018FFFFFFFFFFFFFFFFFF01280148010A13085D100018FFFFFFFFFFFFFFFFFF01280148010A13085E100018FFFFFFFFFFFFFFFFFF01280148010A13085F100018FFFFFFFFFFFFFFFFFF01280148010A130860100018FFFFFFFFFFFFFFFFFF01280148010A130862100018FFFFFFFFFFFFFFFFFF01280148010A130863100018FFFFFFFFFFFFFFFFFF01280148010A130864100018FFFFFFFFFFFFFFFFFF01280148010A130865100018FFFFFFFFFFFFFFFFFF01280148010A130866100018FFFFFFFFFFFFFFFFFF01280148010A130867100018FFFFFFFFFFFFFFFFFF01280148010A130868100018FFFFFFFFFFFFFFFFFF01280148010A130869100018FFFFFFFFFFFFFFFFFF01280148010A13086A100018FFFFFFFFFFFFFFFFFF01280148010A13086B100018FFFFFFFFFFFFFFFFFF01280148010A13086C100018FFFFFFFFFFFFFFFFFF01280148010A13086D100018FFFFFFFFFFFFFFFFFF01280148010A13086E100018FFFFFFFFFFFFFFFFFF01280148010A130870100018FFFFFFFFFFFFFFFFFF01280148010A130871100018FFFFFFFFFFFFFFFFFF01280148010A130872100018FFFFFFFFFFFFFFFFFF01280148010A130873100018FFFFFFFFFFFFFFFFFF01280148010A130874100018FFFFFFFFFFFFFFFFFF01280148010A130875100018FFFFFFFFFFFFFFFFFF01280148010A130876100018FFFFFFFFFFFFFFFFFF01280148010A130877100018FFFFFFFFFFFFFFFFFF01280148010A130878100018FFFFFFFFFFFFFFFFFF01280148010A130879100018FFFFFFFFFFFFFFFFFF01280148010A13087F100018FFFFFFFFFFFFFFFFFF01280148010A14088001100018FFFFFFFFFFFFFFFFFF01280148010A14088101100018FFFFFFFFFFFFFFFFFF01280148010A14088201100018FFFFFFFFFFFFFFFFFF01280148010A14088301100018FFFFFFFFFFFFFFFFFF01280148010A14088401100018FFFFFFFFFFFFFFFFFF01280148010A14088501100018FFFFFFFFFFFFFFFFFF01280148010A14088601100018FFFFFFFFFFFFFFFFFF01280148010A14088701100018FFFFFFFFFFFFFFFFFF01280148010A14088801100018FFFFFFFFFFFFFFFFFF01280148010A14088901100018FFFFFFFFFFFFFFFFFF01280148010A14088A01100018FFFFFFFFFFFFFFFFFF01280148010A14088B01100018FFFFFFFFFFFFFFFFFF01280148010A14088C01100018FFFFFFFFFFFFFFFFFF01280148010A14088D01100018FFFFFFFFFFFFFFFFFF01280148010A14088E01100018FFFFFFFFFFFFFFFFFF01280148010A14088F01100018FFFFFFFFFFFFFFFFFF01280148010A14089001100018FFFFFFFFFFFFFFFFFF01280148010A14089101100018FFFFFFFFFFFFFFFFFF01280148010A14089201100018FFFFFFFFFFFFFFFFFF01280148010A14089301100018FFFFFFFFFFFFFFFFFF01280148010A14089401100018FFFFFFFFFFFFFFFFFF01280148010A14089501100018FFFFFFFFFFFFFFFFFF01280148010A14089601100018FFFFFFFFFFFFFFFFFF01280148010A14089701100018FFFFFFFFFFFFFFFFFF01280148010A14089801100018FFFFFFFFFFFFFFFFFF01280148010A14089901100018FFFFFFFFFFFFFFFFFF01280148010A14089A01100018FFFFFFFFFFFFFFFFFF01280148010A14089B01100018FFFFFFFFFFFFFFFFFF01280148010A14089C01100018FFFFFFFFFFFFFFFFFF01280148010A14089D01100018FFFFFFFFFFFFFFFFFF01280148010A14089E01100018FFFFFFFFFFFFFFFFFF01280148010A14089F01100018FFFFFFFFFFFFFFFFFF01280148010A1408A001100018FFFFFFFFFFFFFFFFFF01280148010A1408A101100018FFFFFFFFFFFFFFFFFF01280148010A1408A201100018FFFFFFFFFFFFFFFFFF01280148010A1408A301100018FFFFFFFFFFFFFFFFFF01280148010A1408A401100018FFFFFFFFFFFFFFFFFF01280148010A1408A501100018FFFFFFFFFFFFFFFFFF01280148010A1408A601100018FFFFFFFFFFFFFFFFFF01280148010A1408A701100018FFFFFFFFFFFFFFFFFF01280148010A1408A801100018FFFFFFFFFFFFFFFFFF01280148010A1408A901100018FFFFFFFFFFFFFFFFFF01280148010A1408AA01100018FFFFFFFFFFFFFFFFFF01280148010A1408AB01100018FFFFFFFFFFFFFFFFFF01280148010A1408AC01100018FFFFFFFFFFFFFFFFFF01280148010A1408AD01100018FFFFFFFFFFFFFFFFFF01280148010A1408AE01100018FFFFFFFFFFFFFFFFFF01280148010A1408AF01100018FFFFFFFFFFFFFFFFFF01280148010A1408B001100018FFFFFFFFFFFFFFFFFF01280148010A1408B101100018FFFFFFFFFFFFFFFFFF01280148010A1408B201100018FFFFFFFFFFFFFFFFFF01280148010A1408B301100018FFFFFFFFFFFFFFFFFF01280148010A1408B401100018FFFFFFFFFFFFFFFFFF01280148010A1408B501100018FFFFFFFFFFFFFFFFFF01280148010A1408B601100018FFFFFFFFFFFFFFFFFF01280148010A1408B701100018FFFFFFFFFFFFFFFFFF01280148010A1408B801100018FFFFFFFFFFFFFFFFFF01280148010A1408B901100018FFFFFFFFFFFFFFFFFF01280148010A1408BA01100018FFFFFFFFFFFFFFFFFF01280148010A1408BB01100018FFFFFFFFFFFFFFFFFF01280148010A1408BC01100018FFFFFFFFFFFFFFFFFF01280148010A1408BD01100018FFFFFFFFFFFFFFFFFF01280148010A1408BE01100018FFFFFFFFFFFFFFFFFF01280148010A1408BF01100018FFFFFFFFFFFFFFFFFF01280148010A1408C001100018FFFFFFFFFFFFFFFFFF01280148010A1408C101100018FFFFFFFFFFFFFFFFFF01280148010A1408C201100018FFFFFFFFFFFFFFFFFF01280148010A1408C301100018FFFFFFFFFFFFFFFFFF01280148010A1408C401100018FFFFFFFFFFFFFFFFFF01280148010A1408C501100018FFFFFFFFFFFFFFFFFF01280148010A1408C601100018FFFFFFFFFFFFFFFFFF01280148010A1408C701100018FFFFFFFFFFFFFFFFFF01280148010A1408C801100018FFFFFFFFFFFFFFFFFF01280148010A1408C901100018FFFFFFFFFFFFFFFFFF01280148010A1408CA01100018FFFFFFFFFFFFFFFFFF01280148010A1408CB01100018FFFFFFFFFFFFFFFFFF01280148010A1408CD01100018FFFFFFFFFFFFFFFFFF01280148010A1408CE01100018FFFFFFFFFFFFFFFFFF01280148010A1408CF01100018FFFFFFFFFFFFFFFFFF01280148010A1408D001100018FFFFFFFFFFFFFFFFFF01280148010A1408D101100018FFFFFFFFFFFFFFFFFF01280148010A1408D201100018FFFFFFFFFFFFFFFFFF01280148010A1408D301100018FFFFFFFFFFFFFFFFFF01280148010A1408D401100018FFFFFFFFFFFFFFFFFF01280148010A1408D501100018FFFFFFFFFFFFFFFFFF01280148010A1408D701100018FFFFFFFFFFFFFFFFFF01280148010A1408DA01100018FFFFFFFFFFFFFFFFFF01280148010A1408DC01100018FFFFFFFFFFFFFFFFFF01280148010A1408DD01100018FFFFFFFFFFFFFFFFFF01280148010A1408E801100018FFFFFFFFFFFFFFFFFF01280148010A1408E901100018FFFFFFFFFFFFFFFFFF01280148010A1408EA01100018FFFFFFFFFFFFFFFFFF01280148010A1408EB01100018FFFFFFFFFFFFFFFFFF01280148010A1408EC01100018FFFFFFFFFFFFFFFFFF01280148010A1408ED01100018FFFFFFFFFFFFFFFFFF01280148010A1408EE01100018FFFFFFFFFFFFFFFFFF01280148010A1408EF01100018FFFFFFFFFFFFFFFFFF01280148010A14088402100018FFFFFFFFFFFFFFFFFF01280148010A14088502100018FFFFFFFFFFFFFFFFFF01280148010A14088602100018FFFFFFFFFFFFFFFFFF01280148010A14088702100018FFFFFFFFFFFFFFFFFF01280148010A14088802100018FFFFFFFFFFFFFFFFFF01280148010A14088902100018FFFFFFFFFFFFFFFFFF01280148010A14088A02100018FFFFFFFFFFFFFFFFFF01280148010A14088B02100018FFFFFFFFFFFFFFFFFF01280148010A14088C02100018FFFFFFFFFFFFFFFFFF01280148010A14088D02100018FFFFFFFFFFFFFFFFFF01280148010A14088E02100018FFFFFFFFFFFFFFFFFF01280148010A14088F02100018FFFFFFFFFFFFFFFFFF01280148010A14089002100018FFFFFFFFFFFFFFFFFF01280148010A14089102100018FFFFFFFFFFFFFFFFFF01280148010A14089202100018FFFFFFFFFFFFFFFFFF01280148010A14089302100018FFFFFFFFFFFFFFFFFF01280148010A14089402100018FFFFFFFFFFFFFFFFFF01280148010A14089502100018FFFFFFFFFFFFFFFFFF01280148010A14089602100018FFFFFFFFFFFFFFFFFF01280148010A14089702100018FFFFFFFFFFFFFFFFFF01280148010A14089802100018FFFFFFFFFFFFFFFFFF01280148010A14089902100018FFFFFFFFFFFFFFFFFF01280148010A14089A02100018FFFFFFFFFFFFFFFFFF01280148010A14089B02100018FFFFFFFFFFFFFFFFFF01280148010A14089C02100018FFFFFFFFFFFFFFFFFF01280148010A1408A102100018FFFFFFFFFFFFFFFFFF01280148010A1408A202100018FFFFFFFFFFFFFFFFFF01280148010A1408A302100018FFFFFFFFFFFFFFFFFF01280148010A1408A402100018FFFFFFFFFFFFFFFFFF01280148010A1408A502100018FFFFFFFFFFFFFFFFFF01280148010A1408A602100018FFFFFFFFFFFFFFFFFF01280148010A1408A702100018FFFFFFFFFFFFFFFFFF01280148010A1408A802100018FFFFFFFFFFFFFFFFFF01280148010A1408A902100018FFFFFFFFFFFFFFFFFF01280148010A1408AA02100018FFFFFFFFFFFFFFFFFF01280148010A1408AB02100018FFFFFFFFFFFFFFFFFF01280148010A1408AC02100018FFFFFFFFFFFFFFFFFF01280148010A1408AD02100018FFFFFFFFFFFFFFFFFF01280148010A1408AE02100018FFFFFFFFFFFFFFFFFF01280148010A1408AF02100018FFFFFFFFFFFFFFFFFF01280148010A1408B002100018FFFFFFFFFFFFFFFFFF01280148010A1408B102100018FFFFFFFFFFFFFFFFFF01280148010A1408B202100018FFFFFFFFFFFFFFFFFF01280148010A1408B302100018FFFFFFFFFFFFFFFFFF01280148010A1408B402100018FFFFFFFFFFFFFFFFFF01280148010A1408B502100018FFFFFFFFFFFFFFFFFF01280148010A1408B602100018FFFFFFFFFFFFFFFFFF01280148010A1408B702100018FFFFFFFFFFFFFFFFFF01280148010A1408B802100018FFFFFFFFFFFFFFFFFF01280148010A1408B902100018FFFFFFFFFFFFFFFFFF01280148010A1408BA02100018FFFFFFFFFFFFFFFFFF01280148010A1408BB02100018FFFFFFFFFFFFFFFFFF01280148010A1408BC02100018FFFFFFFFFFFFFFFFFF01280148010A1408BD02100018FFFFFFFFFFFFFFFFFF01280148010A1408BE02100018FFFFFFFFFFFFFFFFFF01280148010A1408BF02100018FFFFFFFFFFFFFFFFFF01280148010A1408C002100018FFFFFFFFFFFFFFFFFF01280148010A1408C102100018FFFFFFFFFFFFFFFFFF01280148010A1408C202100018FFFFFFFFFFFFFFFFFF01280148010A1408C302100018FFFFFFFFFFFFFFFFFF01280148010A1408C402100018FFFFFFFFFFFFFFFFFF01280148010A1408C502100018FFFFFFFFFFFFFFFFFF01280148010A1408C602100018FFFFFFFFFFFFFFFFFF01280148010A1408C702100018FFFFFFFFFFFFFFFFFF01280148010A1408C802100018FFFFFFFFFFFFFFFFFF01280148010A1408C902100018FFFFFFFFFFFFFFFFFF01280148010A1408CA02100018FFFFFFFFFFFFFFFFFF01280148010A1408CB02100018FFFFFFFFFFFFFFFFFF01280148010A1408CC02100018FFFFFFFFFFFFFFFFFF01280148010A1408CD02100018FFFFFFFFFFFFFFFFFF01280148010A1408CE02100018FFFFFFFFFFFFFFFFFF01280148010A1408CF02100018FFFFFFFFFFFFFFFFFF01280148010A1408D002100018FFFFFFFFFFFFFFFFFF01280148010A1408D102100018FFFFFFFFFFFFFFFFFF01280148010A1408D202100018FFFFFFFFFFFFFFFFFF012801480122130A0C6D6573736167655F73697A65120318942F2A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); - - Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(b.length) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, b)); - } - - private void parseGetBattlePayStatus(int token, TcpConnection conn) throws Exception { - byte[] b = Util.hexStringToByteArray("0A090A02696412031889020A0F0A0570726F746F1206320408002001"); - Protocol.Header header = Processor.generateResponse(b.length, token, 0, 0); - conn.send(new BattleNetPacket(header, b)); - - Protocol.BattlePayStatusResponse response = Protocol.BattlePayStatusResponse.newBuilder() - .setStatus(Protocol.BattlePayStatusResponse.PurchaseState.PS_READY) - .setBattlePayAvailable(true) - .build(); - - Protocol.Notification n = generateNotification(265, response.toByteString(), response.getSerializedSize()); - - header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(n.getSerializedSize()) - .setStatus(0) - .build(); - - conn.send(new BattleNetPacket(header, n.toByteArray())); - } - - private void parseSetOptions(ClientRequestBody body) throws InvalidProtocolBufferException { - Protocol.SetOptions setOptions = Protocol.SetOptions.parseFrom(body.getBody()); - log.info("parseSetOptions: got"); - } - - private void parseSendUnsubcribeRequest(ClientRequestBody body) { - log.info("parseSendUnsubcribeRequest: got"); - } - - private Protocol.Notification generateNotification(int message_type, ByteString bs, int size) { - return Protocol.Notification.newBuilder() - .setSenderId(Protocol.EntityId.newBuilder() - .setHigh(144115188075855872L) - .setLow(0)) - .setTargetId(Protocol.EntityId.newBuilder() - .setHigh(144115198130930503L) - .setLow(78330215)) - .setType("WTCG.UtilNotificationMessage") - .setSenderBattleTag("") - .setSenderAccountId(Protocol.EntityId.newBuilder() - .setHigh(72057594037927936L) - .setLow(0)) - .setTargetAccountId(Protocol.EntityId.newBuilder() - .setHigh(72057594037927936L) - .setLow(437154195)) - .addAttribute(Protocol.Attribute.newBuilder() - .setName("message_type") - .setValue(Protocol.Variant.newBuilder() - .setIntValue(message_type))) - .addAttribute(Protocol.Attribute.newBuilder() - .setName("fragment_000") - .setValue(Protocol.Variant.newBuilder() - .setBlobValue(bs))) - .addAttribute(Protocol.Attribute.newBuilder() - .setName("message_size") - .setValue(Protocol.Variant.newBuilder() - .setIntValue(size))) - .build(); - } - - private Protocol.Notification generateEmptyNotification(int message_type) { - return Protocol.Notification.newBuilder() - .setSenderId(Protocol.EntityId.newBuilder() - .setHigh(144115188075855872L) - .setLow(0)) - .setTargetId(Protocol.EntityId.newBuilder() - .setHigh(144115198130930503L) - .setLow(78330215)) - .setType("WTCG.UtilNotificationMessage") - .setSenderBattleTag("") - .setSenderAccountId(Protocol.EntityId.newBuilder() - .setHigh(72057594037927936L) - .setLow(0)) - .setTargetAccountId(Protocol.EntityId.newBuilder() - .setHigh(72057594037927936L) - .setLow(437154195)) - .addAttribute(Protocol.Attribute.newBuilder() - .setName("message_type") - .setValue(Protocol.Variant.newBuilder() - .setIntValue(message_type))) - .addAttribute(Protocol.Attribute.newBuilder() - .setName("message_size") - .setValue(Protocol.Variant.newBuilder() - .setIntValue(0))) - .build(); - } - private Protocol.GenericResponse.Builder generateGenericResponse(int type) { return Protocol.GenericResponse.newBuilder() .setRequestId(type) @@ -1093,7 +61,7 @@ public class GameUtilitiesProcessor extends Processor { } private void sendNotificationWithResponse(Protocol.GenericResponse gr, TcpConnection conn) throws Exception { - Protocol.Notification n = generateNotification(326, gr.toByteString(), gr.getSerializedSize()); + Protocol.Notification n = GameUtilities.generateNotification(326, gr.toByteString(), gr.getSerializedSize()); Protocol.Header header = Protocol.Header.newBuilder() .setServiceId(4) @@ -1118,28 +86,24 @@ public class GameUtilitiesProcessor extends Processor { }); } + private void init() { + this.parsers = new HashMap<>(); + Set> classes = new Reflections(ClientRequestParser.class.getPackageName()).getSubTypesOf(ClientRequestParser.class); + classes.forEach(c -> { + try { + var ci = c.getDeclaredConstructor().newInstance(); + this.parsers.put(ci.getId(), ci); + } catch (Exception e) { + log.error(e.getMessage()); + } + }); + } + private void processClientRequest(BattleNetPacket packet, TcpConnection conn) throws Exception { Protocol.ClientRequest cr = Protocol.ClientRequest.parseFrom(packet.getBody()); ClientRequestBody p = parseClientRequest(cr); int type = p != null ? p.getType() : 0; - switch(type) { - case 201 -> parseRequestNetCacheObject(packet.getHeader().getToken(), p, conn); - case 327 -> parseRequestNetCacheObjectList(packet.getHeader().getToken(), p, conn); - case 314 -> parseSubscriptionRequest(p, packet.getHeader().getToken(), conn); - case 303 -> parseGetAssetsVersion(packet, conn); - case 267 -> parseCheckAccountLicenses(packet, conn); - case 205 -> parseUpdateLogin(packet, conn); - case 276 -> parseCheckGameLicenses(packet, conn); - case 305 -> parseGetAdventureProgress(packet, conn); - case 237 -> parseGetBattlePayConfig(conn); - case 253 -> parseGetAchieves(packet.getHeader().getToken(), conn); - case 255 -> parseGetBattlePayStatus(packet.getHeader().getToken(), conn); - case 239 -> parseSetOptions(p); - case 329 -> parseSendUnsubcribeRequest(p); - default -> log.warn("Unknown ClientRequest type #{}", p.getType()); - } - if( type != 314 && type != 255 ) { Protocol.GenericResponse genericResponse = Protocol.GenericResponse @@ -1198,6 +162,12 @@ public class GameUtilitiesProcessor extends Processor { conn.send(new BattleNetPacket(header, new byte[0])); } + + if( !this.parsers.containsKey(type) ) { + log.error("Unknown ClientRequest type #{}", type); + return; + } + this.parsers.get(type).parse(packet, p, conn); } @Override @@ -1213,4 +183,4 @@ public class GameUtilitiesProcessor extends Processor { public String getExportName() { return "bnet.protocol.game_utilities.GameUtilities"; } -} +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/Processor.java b/src/main/java/com/alterdekim/hearthhack/component/processor/Processor.java index 0493779..154ec3a 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/Processor.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/Processor.java @@ -2,15 +2,15 @@ package com.alterdekim.hearthhack.component.processor; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.reflect.AbstractParser; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.Compute32; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -@Getter @NoArgsConstructor -public abstract class Processor { +public abstract class Processor implements AbstractParser { @Setter private int processorId; @@ -31,4 +31,9 @@ public abstract class Processor { if(object_id != null) b.setObjectId(object_id); return b.build(); } + + @Override + public int getId() { + return processorId; + } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BattlePayConfig.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BattlePayConfig.java index dc239ad..0e7534a 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BattlePayConfig.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BattlePayConfig.java @@ -1,13 +1,33 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import com.alterdekim.hearthhack.util.Util; public class BattlePayConfig extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + /*Protocol.BattlePayConfigResponse configResponse = Protocol.BattlePayConfigResponse.newBuilder() + .setCurrency(4) + .setUnavailable(false) + .build(); + Protocol.Notification n = generateNotification(238, configResponse.toByteString(), configResponse.getSerializedSize());*/ + + byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318EE0122E34F0A0C667261676D656E745F30303012D24F32CF4F0AB4010A14393931303030313530323130303030373233383211A4703D0AD7A3FC3F1A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E6172656E6170617373222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E6172656E61706173732A060802100018013A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E6172656E61706173730AB1010A1439393130303031353033313030303037323338331185EB51B81E8505401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657232222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572322A060801100118023A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572320AB1010A143939313030303135303431303030303732333834117B14AE47E1FA21401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657237222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572372A060801100118073A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F73746572370AB4010A143939313030303135303531303030303732333835113D0AD7A370FD31401A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F737465723135222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657231352A0608011001180F3A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657231350AB4010A143939313030303135303631303030303732333836111F85EB51B87E46401A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F737465723430222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657234302A060801100118283A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E626F6F7374657234300AC5010A1439393130303031383038303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030312A0608031001180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030315A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031383039303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030322A0608031002180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030325A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031383130303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030332A0608031003180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030335A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031383131303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030342A0608031004180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030345A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AE2010A1439393130303031383132303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030312A060803100118012A060803100318012A060803100218012A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030315A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ADA010A1439393130303031383133303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030322A060803100318012A060803100218012A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030325A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AD2010A1439393130303031383134303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030332A060803100318012A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030335A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A1439393130303031393232303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303157303035222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030352A0608031005180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031573030355A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACA010A1439393130303031393233303030303030303030311A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303142303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030342A060803100418012A060803100518013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303031423030345A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AB6010A143939323030303139323332303030303032313633117B14AE47E1FA21401A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030312228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030312A070806108C1618012A060805101A18013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030314A066C61756E63680AB6010A143939323030303139323632303030303032313636117B14AE47E1FA21401A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030332228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030332A070806108D1618012A060805101B18013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030334A066C61756E63680AB6010A143939323030303139333232303030303032313732117B14AE47E1FA21401A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030322228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030322A070806108A1618012A060805101918013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030324A066C61756E63680A270A143939323030303334353632303030303033373536111F85EB51B87E4F402A0608011001183C0ACB010A1439393230303033343539323030303030333735391A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657232222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572322A060801100918023A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572325A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACB010A1439393230303033343632323030303030333736321A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657237222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572372A060801100918073A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F73746572375A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACE010A1439393230303033343635323030303030333736351A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657231352230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657231352A0608011009180F3A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657231355A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650ACE010A1439393230303033343638323030303030333736381A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657234302230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657234302A060801100918283A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78312E626F6F7374657234305A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650A380A1439393230303033343731323030303030333737312A0608011009183C5A186E6178785F6776675F7265616C5F6D6F6E65795F73616C650AC5010A14393932303031313935323230303030313330343411F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030312A0608041006180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030314A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313935353230303030313330343711F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030322A0608041007180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030324A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313935383230303030313330353011F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030332A0608041008180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030334A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313936313230303030313330353311F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030342A0608041009180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030344A0F62726D5F6E6F726D616C5F73616C650AC5010A14393932303031313936343230303030313330353611F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303257303035222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030352A060804100A180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032573030354A0F62726D5F6E6F726D616C5F73616C650AE2010A143939323030313139363732303030303133303539113D0AD7A370FD35401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030312A060804100618012A060804100718012A060804100818012A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030314A0F62726D5F6E6F726D616C5F73616C650ADA010A143939323030313139373032303030303133303632113D0AD7A370FD31401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030322A060804100718012A060804100818012A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030324A0F62726D5F6E6F726D616C5F73616C650AD2010A143939323030313139373332303030303133303635117B14AE47E1FA2B401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030332A060804100818012A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030334A0F62726D5F6E6F726D616C5F73616C650ACA010A143939323030313139373632303030303133303638117B14AE47E1FA21401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030342A060804100918012A060804100A18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303032423030344A0F62726D5F6E6F726D616C5F73616C650AEA010A143939323030313139373932303030303133303731113D0AD7A370FD35401A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E413030324230303170222D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303031702A060804100618012A060804100718012A060804100818012A060804100918012A060804100A18012A060805101218013A2D636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303242303031704A0C62726D5F7072655F73616C650AD6010A143939323030313539383732303030303137343537111F85EB51B87E46401A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F737465723530702231636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F737465723530702A060805101F18012A060801100A18323A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F737465723530704A0C7467745F7072655F73616C650ACB010A1439393330303030313836333030303030303138361185EB51B81E8505401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657232222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572322A060801100A18023A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572324A0F7467745F6E6F726D616C5F73616C650ACB010A143939333030303031383733303030303030313837117B14AE47E1FA21401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657237222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572372A060801100A18073A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F73746572374A0F7467745F6E6F726D616C5F73616C650ACE010A143939333030303031383833303030303030313838113D0AD7A370FD31401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657231352230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657231352A060801100A180F3A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657231354A0F7467745F6E6F726D616C5F73616C650ACE010A143939333030303031393033303030303030313930111F85EB51B87E46401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657234302230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657234302A060801100A18283A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78322E626F6F7374657234304A0F7467745F6E6F726D616C5F73616C650A380A143939333030303031393133303030303030313931111F85EB51B87E4F402A060801100A183C4A0F7467745F6E6F726D616C5F73616C650AC0010A143939333030303333303233303030303032353736117B14AE47E1FA21401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303342303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030332A060807100D18012A060807100E18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030334A056C6F655F310ABB010A14393933303030333330373330303030303235353911F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030312A060807100B180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030314A056C6F655F310ABB010A14393933303030333330383330303030303235363311F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030322A060807100C180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030324A056C6F655F310ABB010A14393933303030333330393330303030303235383411F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303033222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030332A060807100D180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030334A056C6F655F310ABB010A14393933303030333331303330303030303235383511F6285C8FC2F517401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303357303034222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030342A060807100E180130BC053A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033573030344A056C6F655F310AD0010A143939333030303333313133303030303032353836113D0AD7A370FD31401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303342303031222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030312A060807100B18012A060807100C18012A060807100D18012A060807100E18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030314A056C6F655F310AC8010A143939333030303333313233303030303032353837117B14AE47E1FA2B401A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E4130303342303032222C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030322A060807100C18012A060807100D18012A060807100E18013A2C636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E41303033423030324A056C6F655F310ACD010A143939333030303434313633303030303034303032113D0AD7A370FD31401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657231352230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657231352A060801100B180F3A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657231354A0E6F675F6E6F726D616C5F73616C650ACD010A143939333030303434313733303030303034303033111F85EB51B87E46401A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657234302230636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657234302A060801100B18283A30636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657234304A0E6F675F6E6F726D616C5F73616C650A370A143939333030303434313833303030303034313034111F85EB51B87E4F402A060801100B183C4A0E6F675F6E6F726D616C5F73616C650AD9010A143939333030303434373033303030303034303838111F85EB51B87E46401A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F737465723530702231636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F737465723530702A060801100B18322A060805102D18013A31636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F737465723530704A0F6F675F7072655F70757263686173650ACA010A1439393330303034343737333030303030343039351185EB51B81E8505401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657232222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572322A060801100B18023A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572324A0E6F675F6E6F726D616C5F73616C650ACA010A143939333030303434373833303030303034303936117B14AE47E1FA21401A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F7374657237222F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572372A060801100B18073A2F636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E78332E626F6F73746572374A0E6F675F6E6F726D616C5F73616C650ABA010A1439393330303035303434333030303030343636351A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030342228636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030342A08080610CDB10218013A28636F6D2E626C697A7A6172642E777463672E68656172746873746F6E652E69617045552E483030344A186170706C655F636861726974795F70726F6D6F5F323031365002100428D80432040864100132150864100A1A0F7467745F6E6F726D616C5F73616C6532140864100B1A0E6F675F6E6F726D616C5F73616C6538960122130A0C6D6573736167655F73697A65120318CF4F2A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(b.length) // n.getSerializedSize() + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, b)); // n.toByteArray() } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckAccountLicenses.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckAccountLicenses.java index 12e08a9..6ca7a2c 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckAccountLicenses.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckAccountLicenses.java @@ -1,13 +1,31 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + public class CheckAccountLicenses extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + Protocol.CheckAccountLicensesResponse response = Protocol.CheckAccountLicensesResponse.newBuilder() + .setSuccess(true) + .build(); + Protocol.Notification n = generateNotification(330, response.toByteString(), response.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setStatus(0) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckGameLicenses.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckGameLicenses.java index bf78c2a..99e6bdc 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckGameLicenses.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CheckGameLicenses.java @@ -1,13 +1,31 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + public class CheckGameLicenses extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + Protocol.CheckGameLicensesResponse checkGameLicensesResponse = Protocol.CheckGameLicensesResponse.newBuilder() + .setSuccess(true) + .build(); + Protocol.Notification n = generateNotification(331, checkGameLicensesResponse.toByteString(), checkGameLicensesResponse.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java index 7fabec6..3b0053a 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java @@ -8,7 +8,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public abstract class ClientRequestParser { - public abstract void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn); + public abstract void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception; public abstract int getId(); } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java index c0b3648..3094e5a 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java @@ -1,13 +1,29 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import com.alterdekim.hearthhack.util.Util; public class GetAchieves extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + //Protocol.GetAchieves getAchieves = Protocol.GetAchieves.parseFrom(body.getBody()); + // Achieves + byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318FC0122A82F0A0C667261676D656E745F30303012972F32942F0A28080210011801200130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A28080310011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A31080F100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A310818100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A31083E100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A31083F100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A28084110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A31084F100218FFFFFFFFFFFFFFFFFF01280130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A28086110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A2908D80110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A2908D90110011801280130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A130801100018FFFFFFFFFFFFFFFFFF01280148010A130804100018FFFFFFFFFFFFFFFFFF01280148010A130805100018FFFFFFFFFFFFFFFFFF01280148010A130806100018FFFFFFFFFFFFFFFFFF01280148010A130807100018FFFFFFFFFFFFFFFFFF01280148010A130808100018FFFFFFFFFFFFFFFFFF01280148010A130809100018FFFFFFFFFFFFFFFFFF01280148010A13080A100018FFFFFFFFFFFFFFFFFF01280148010A13080D100018FFFFFFFFFFFFFFFFFF01280148010A13080E100018FFFFFFFFFFFFFFFFFF01280148010A130810100018FFFFFFFFFFFFFFFFFF01280148010A130811100018FFFFFFFFFFFFFFFFFF01280148010A130812100018FFFFFFFFFFFFFFFFFF01280148010A130813100018FFFFFFFFFFFFFFFFFF01280148010A130814100018FFFFFFFFFFFFFFFFFF01280148010A130815100018FFFFFFFFFFFFFFFFFF01280148010A130816100018FFFFFFFFFFFFFFFFFF01280148010A130817100018FFFFFFFFFFFFFFFFFF01280148010A130819100018FFFFFFFFFFFFFFFFFF01280148010A13081A100018FFFFFFFFFFFFFFFFFF01280148010A13081B100018FFFFFFFFFFFFFFFFFF01280148010A13081C100018FFFFFFFFFFFFFFFFFF01280148010A13081D100018FFFFFFFFFFFFFFFFFF01280148010A13081E100018FFFFFFFFFFFFFFFFFF01280148010A130837100018FFFFFFFFFFFFFFFFFF01280148010A130839100018FFFFFFFFFFFFFFFFFF01280148010A13083A100018FFFFFFFFFFFFFFFFFF01280148010A13083B100018FFFFFFFFFFFFFFFFFF01280148010A13083C100018FFFFFFFFFFFFFFFFFF01280148010A13083D100018FFFFFFFFFFFFFFFFFF01280148010A130842100018FFFFFFFFFFFFFFFFFF01280148010A130843100018FFFFFFFFFFFFFFFFFF01280148010A130844100018FFFFFFFFFFFFFFFFFF01280148010A130846100018FFFFFFFFFFFFFFFFFF01280148010A130847100018FFFFFFFFFFFFFFFFFF01280148010A130848100018FFFFFFFFFFFFFFFFFF01280148010A130849100018FFFFFFFFFFFFFFFFFF01280148010A13084A100018FFFFFFFFFFFFFFFFFF01280148010A13084B100018FFFFFFFFFFFFFFFFFF01280148010A13084C100018FFFFFFFFFFFFFFFFFF01280148010A13084D100018FFFFFFFFFFFFFFFFFF01280148010A13084E100018FFFFFFFFFFFFFFFFFF01280148010A130850100018FFFFFFFFFFFFFFFFFF01280148010A130851100018FFFFFFFFFFFFFFFFFF01280148010A130852100018FFFFFFFFFFFFFFFFFF01280148010A130853100018FFFFFFFFFFFFFFFFFF01280148010A130854100018FFFFFFFFFFFFFFFFFF01280148010A130855100018FFFFFFFFFFFFFFFFFF01280148010A130856100018FFFFFFFFFFFFFFFFFF01280148010A130857100018FFFFFFFFFFFFFFFFFF01280148010A130858100018FFFFFFFFFFFFFFFFFF01280148010A130859100018FFFFFFFFFFFFFFFFFF01280148010A13085A100018FFFFFFFFFFFFFFFFFF01280148010A13085B100018FFFFFFFFFFFFFFFFFF01280148010A13085C100018FFFFFFFFFFFFFFFFFF01280148010A13085D100018FFFFFFFFFFFFFFFFFF01280148010A13085E100018FFFFFFFFFFFFFFFFFF01280148010A13085F100018FFFFFFFFFFFFFFFFFF01280148010A130860100018FFFFFFFFFFFFFFFFFF01280148010A130862100018FFFFFFFFFFFFFFFFFF01280148010A130863100018FFFFFFFFFFFFFFFFFF01280148010A130864100018FFFFFFFFFFFFFFFFFF01280148010A130865100018FFFFFFFFFFFFFFFFFF01280148010A130866100018FFFFFFFFFFFFFFFFFF01280148010A130867100018FFFFFFFFFFFFFFFFFF01280148010A130868100018FFFFFFFFFFFFFFFFFF01280148010A130869100018FFFFFFFFFFFFFFFFFF01280148010A13086A100018FFFFFFFFFFFFFFFFFF01280148010A13086B100018FFFFFFFFFFFFFFFFFF01280148010A13086C100018FFFFFFFFFFFFFFFFFF01280148010A13086D100018FFFFFFFFFFFFFFFFFF01280148010A13086E100018FFFFFFFFFFFFFFFFFF01280148010A130870100018FFFFFFFFFFFFFFFFFF01280148010A130871100018FFFFFFFFFFFFFFFFFF01280148010A130872100018FFFFFFFFFFFFFFFFFF01280148010A130873100018FFFFFFFFFFFFFFFFFF01280148010A130874100018FFFFFFFFFFFFFFFFFF01280148010A130875100018FFFFFFFFFFFFFFFFFF01280148010A130876100018FFFFFFFFFFFFFFFFFF01280148010A130877100018FFFFFFFFFFFFFFFFFF01280148010A130878100018FFFFFFFFFFFFFFFFFF01280148010A130879100018FFFFFFFFFFFFFFFFFF01280148010A13087F100018FFFFFFFFFFFFFFFFFF01280148010A14088001100018FFFFFFFFFFFFFFFFFF01280148010A14088101100018FFFFFFFFFFFFFFFFFF01280148010A14088201100018FFFFFFFFFFFFFFFFFF01280148010A14088301100018FFFFFFFFFFFFFFFFFF01280148010A14088401100018FFFFFFFFFFFFFFFFFF01280148010A14088501100018FFFFFFFFFFFFFFFFFF01280148010A14088601100018FFFFFFFFFFFFFFFFFF01280148010A14088701100018FFFFFFFFFFFFFFFFFF01280148010A14088801100018FFFFFFFFFFFFFFFFFF01280148010A14088901100018FFFFFFFFFFFFFFFFFF01280148010A14088A01100018FFFFFFFFFFFFFFFFFF01280148010A14088B01100018FFFFFFFFFFFFFFFFFF01280148010A14088C01100018FFFFFFFFFFFFFFFFFF01280148010A14088D01100018FFFFFFFFFFFFFFFFFF01280148010A14088E01100018FFFFFFFFFFFFFFFFFF01280148010A14088F01100018FFFFFFFFFFFFFFFFFF01280148010A14089001100018FFFFFFFFFFFFFFFFFF01280148010A14089101100018FFFFFFFFFFFFFFFFFF01280148010A14089201100018FFFFFFFFFFFFFFFFFF01280148010A14089301100018FFFFFFFFFFFFFFFFFF01280148010A14089401100018FFFFFFFFFFFFFFFFFF01280148010A14089501100018FFFFFFFFFFFFFFFFFF01280148010A14089601100018FFFFFFFFFFFFFFFFFF01280148010A14089701100018FFFFFFFFFFFFFFFFFF01280148010A14089801100018FFFFFFFFFFFFFFFFFF01280148010A14089901100018FFFFFFFFFFFFFFFFFF01280148010A14089A01100018FFFFFFFFFFFFFFFFFF01280148010A14089B01100018FFFFFFFFFFFFFFFFFF01280148010A14089C01100018FFFFFFFFFFFFFFFFFF01280148010A14089D01100018FFFFFFFFFFFFFFFFFF01280148010A14089E01100018FFFFFFFFFFFFFFFFFF01280148010A14089F01100018FFFFFFFFFFFFFFFFFF01280148010A1408A001100018FFFFFFFFFFFFFFFFFF01280148010A1408A101100018FFFFFFFFFFFFFFFFFF01280148010A1408A201100018FFFFFFFFFFFFFFFFFF01280148010A1408A301100018FFFFFFFFFFFFFFFFFF01280148010A1408A401100018FFFFFFFFFFFFFFFFFF01280148010A1408A501100018FFFFFFFFFFFFFFFFFF01280148010A1408A601100018FFFFFFFFFFFFFFFFFF01280148010A1408A701100018FFFFFFFFFFFFFFFFFF01280148010A1408A801100018FFFFFFFFFFFFFFFFFF01280148010A1408A901100018FFFFFFFFFFFFFFFFFF01280148010A1408AA01100018FFFFFFFFFFFFFFFFFF01280148010A1408AB01100018FFFFFFFFFFFFFFFFFF01280148010A1408AC01100018FFFFFFFFFFFFFFFFFF01280148010A1408AD01100018FFFFFFFFFFFFFFFFFF01280148010A1408AE01100018FFFFFFFFFFFFFFFFFF01280148010A1408AF01100018FFFFFFFFFFFFFFFFFF01280148010A1408B001100018FFFFFFFFFFFFFFFFFF01280148010A1408B101100018FFFFFFFFFFFFFFFFFF01280148010A1408B201100018FFFFFFFFFFFFFFFFFF01280148010A1408B301100018FFFFFFFFFFFFFFFFFF01280148010A1408B401100018FFFFFFFFFFFFFFFFFF01280148010A1408B501100018FFFFFFFFFFFFFFFFFF01280148010A1408B601100018FFFFFFFFFFFFFFFFFF01280148010A1408B701100018FFFFFFFFFFFFFFFFFF01280148010A1408B801100018FFFFFFFFFFFFFFFFFF01280148010A1408B901100018FFFFFFFFFFFFFFFFFF01280148010A1408BA01100018FFFFFFFFFFFFFFFFFF01280148010A1408BB01100018FFFFFFFFFFFFFFFFFF01280148010A1408BC01100018FFFFFFFFFFFFFFFFFF01280148010A1408BD01100018FFFFFFFFFFFFFFFFFF01280148010A1408BE01100018FFFFFFFFFFFFFFFFFF01280148010A1408BF01100018FFFFFFFFFFFFFFFFFF01280148010A1408C001100018FFFFFFFFFFFFFFFFFF01280148010A1408C101100018FFFFFFFFFFFFFFFFFF01280148010A1408C201100018FFFFFFFFFFFFFFFFFF01280148010A1408C301100018FFFFFFFFFFFFFFFFFF01280148010A1408C401100018FFFFFFFFFFFFFFFFFF01280148010A1408C501100018FFFFFFFFFFFFFFFFFF01280148010A1408C601100018FFFFFFFFFFFFFFFFFF01280148010A1408C701100018FFFFFFFFFFFFFFFFFF01280148010A1408C801100018FFFFFFFFFFFFFFFFFF01280148010A1408C901100018FFFFFFFFFFFFFFFFFF01280148010A1408CA01100018FFFFFFFFFFFFFFFFFF01280148010A1408CB01100018FFFFFFFFFFFFFFFFFF01280148010A1408CD01100018FFFFFFFFFFFFFFFFFF01280148010A1408CE01100018FFFFFFFFFFFFFFFFFF01280148010A1408CF01100018FFFFFFFFFFFFFFFFFF01280148010A1408D001100018FFFFFFFFFFFFFFFFFF01280148010A1408D101100018FFFFFFFFFFFFFFFFFF01280148010A1408D201100018FFFFFFFFFFFFFFFFFF01280148010A1408D301100018FFFFFFFFFFFFFFFFFF01280148010A1408D401100018FFFFFFFFFFFFFFFFFF01280148010A1408D501100018FFFFFFFFFFFFFFFFFF01280148010A1408D701100018FFFFFFFFFFFFFFFFFF01280148010A1408DA01100018FFFFFFFFFFFFFFFFFF01280148010A1408DC01100018FFFFFFFFFFFFFFFFFF01280148010A1408DD01100018FFFFFFFFFFFFFFFFFF01280148010A1408E801100018FFFFFFFFFFFFFFFFFF01280148010A1408E901100018FFFFFFFFFFFFFFFFFF01280148010A1408EA01100018FFFFFFFFFFFFFFFFFF01280148010A1408EB01100018FFFFFFFFFFFFFFFFFF01280148010A1408EC01100018FFFFFFFFFFFFFFFFFF01280148010A1408ED01100018FFFFFFFFFFFFFFFFFF01280148010A1408EE01100018FFFFFFFFFFFFFFFFFF01280148010A1408EF01100018FFFFFFFFFFFFFFFFFF01280148010A14088402100018FFFFFFFFFFFFFFFFFF01280148010A14088502100018FFFFFFFFFFFFFFFFFF01280148010A14088602100018FFFFFFFFFFFFFFFFFF01280148010A14088702100018FFFFFFFFFFFFFFFFFF01280148010A14088802100018FFFFFFFFFFFFFFFFFF01280148010A14088902100018FFFFFFFFFFFFFFFFFF01280148010A14088A02100018FFFFFFFFFFFFFFFFFF01280148010A14088B02100018FFFFFFFFFFFFFFFFFF01280148010A14088C02100018FFFFFFFFFFFFFFFFFF01280148010A14088D02100018FFFFFFFFFFFFFFFFFF01280148010A14088E02100018FFFFFFFFFFFFFFFFFF01280148010A14088F02100018FFFFFFFFFFFFFFFFFF01280148010A14089002100018FFFFFFFFFFFFFFFFFF01280148010A14089102100018FFFFFFFFFFFFFFFFFF01280148010A14089202100018FFFFFFFFFFFFFFFFFF01280148010A14089302100018FFFFFFFFFFFFFFFFFF01280148010A14089402100018FFFFFFFFFFFFFFFFFF01280148010A14089502100018FFFFFFFFFFFFFFFFFF01280148010A14089602100018FFFFFFFFFFFFFFFFFF01280148010A14089702100018FFFFFFFFFFFFFFFFFF01280148010A14089802100018FFFFFFFFFFFFFFFFFF01280148010A14089902100018FFFFFFFFFFFFFFFFFF01280148010A14089A02100018FFFFFFFFFFFFFFFFFF01280148010A14089B02100018FFFFFFFFFFFFFFFFFF01280148010A14089C02100018FFFFFFFFFFFFFFFFFF01280148010A1408A102100018FFFFFFFFFFFFFFFFFF01280148010A1408A202100018FFFFFFFFFFFFFFFFFF01280148010A1408A302100018FFFFFFFFFFFFFFFFFF01280148010A1408A402100018FFFFFFFFFFFFFFFFFF01280148010A1408A502100018FFFFFFFFFFFFFFFFFF01280148010A1408A602100018FFFFFFFFFFFFFFFFFF01280148010A1408A702100018FFFFFFFFFFFFFFFFFF01280148010A1408A802100018FFFFFFFFFFFFFFFFFF01280148010A1408A902100018FFFFFFFFFFFFFFFFFF01280148010A1408AA02100018FFFFFFFFFFFFFFFFFF01280148010A1408AB02100018FFFFFFFFFFFFFFFFFF01280148010A1408AC02100018FFFFFFFFFFFFFFFFFF01280148010A1408AD02100018FFFFFFFFFFFFFFFFFF01280148010A1408AE02100018FFFFFFFFFFFFFFFFFF01280148010A1408AF02100018FFFFFFFFFFFFFFFFFF01280148010A1408B002100018FFFFFFFFFFFFFFFFFF01280148010A1408B102100018FFFFFFFFFFFFFFFFFF01280148010A1408B202100018FFFFFFFFFFFFFFFFFF01280148010A1408B302100018FFFFFFFFFFFFFFFFFF01280148010A1408B402100018FFFFFFFFFFFFFFFFFF01280148010A1408B502100018FFFFFFFFFFFFFFFFFF01280148010A1408B602100018FFFFFFFFFFFFFFFFFF01280148010A1408B702100018FFFFFFFFFFFFFFFFFF01280148010A1408B802100018FFFFFFFFFFFFFFFFFF01280148010A1408B902100018FFFFFFFFFFFFFFFFFF01280148010A1408BA02100018FFFFFFFFFFFFFFFFFF01280148010A1408BB02100018FFFFFFFFFFFFFFFFFF01280148010A1408BC02100018FFFFFFFFFFFFFFFFFF01280148010A1408BD02100018FFFFFFFFFFFFFFFFFF01280148010A1408BE02100018FFFFFFFFFFFFFFFFFF01280148010A1408BF02100018FFFFFFFFFFFFFFFFFF01280148010A1408C002100018FFFFFFFFFFFFFFFFFF01280148010A1408C102100018FFFFFFFFFFFFFFFFFF01280148010A1408C202100018FFFFFFFFFFFFFFFFFF01280148010A1408C302100018FFFFFFFFFFFFFFFFFF01280148010A1408C402100018FFFFFFFFFFFFFFFFFF01280148010A1408C502100018FFFFFFFFFFFFFFFFFF01280148010A1408C602100018FFFFFFFFFFFFFFFFFF01280148010A1408C702100018FFFFFFFFFFFFFFFFFF01280148010A1408C802100018FFFFFFFFFFFFFFFFFF01280148010A1408C902100018FFFFFFFFFFFFFFFFFF01280148010A1408CA02100018FFFFFFFFFFFFFFFFFF01280148010A1408CB02100018FFFFFFFFFFFFFFFFFF01280148010A1408CC02100018FFFFFFFFFFFFFFFFFF01280148010A1408CD02100018FFFFFFFFFFFFFFFFFF01280148010A1408CE02100018FFFFFFFFFFFFFFFFFF01280148010A1408CF02100018FFFFFFFFFFFFFFFFFF01280148010A1408D002100018FFFFFFFFFFFFFFFFFF01280148010A1408D102100018FFFFFFFFFFFFFFFFFF01280148010A1408D202100018FFFFFFFFFFFFFFFFFF012801480122130A0C6D6573736167655F73697A65120318942F2A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, b)); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAdventureProgress.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAdventureProgress.java index f4796f9..64f5a25 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAdventureProgress.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAdventureProgress.java @@ -1,13 +1,31 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification; + public class GetAdventureProgress extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + /* Protocol.AdventureProgressResponse progressResponse = Protocol.AdventureProgressResponse.newBuilder() + .build();*/ + // Protocol.Notification n = generateNotification(306, progressResponse.toByteString(), progressResponse.getSerializedSize()); + Protocol.Notification n = generateEmptyNotification(306); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAssetsVersion.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAssetsVersion.java index a3f894f..e8ad7ea 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAssetsVersion.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAssetsVersion.java @@ -1,13 +1,31 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + public class GetAssetsVersion extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + Protocol.AssetsVersionResponse assetsVersionResponse = Protocol.AssetsVersionResponse.newBuilder() + .setVersion(11046) + .build(); + Protocol.Notification n = generateNotification(304, assetsVersionResponse.toByteString(), assetsVersionResponse.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setStatus(0) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetBattlePayStatus.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetBattlePayStatus.java index 213f238..0430962 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetBattlePayStatus.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetBattlePayStatus.java @@ -1,13 +1,38 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.component.processor.Processor; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import com.alterdekim.hearthhack.util.Util; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; public class GetBattlePayStatus extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + byte[] b = Util.hexStringToByteArray("0A090A02696412031889020A0F0A0570726F746F1206320408002001"); + Protocol.Header header = Processor.generateResponse(b.length, packet.getHeader().getToken(), 0, 0); + conn.send(new BattleNetPacket(header, b)); + Protocol.BattlePayStatusResponse response = Protocol.BattlePayStatusResponse.newBuilder() + .setStatus(Protocol.BattlePayStatusResponse.PurchaseState.PS_READY) + .setBattlePayAvailable(true) + .build(); + + Protocol.Notification n = generateNotification(265, response.toByteString(), response.getSerializedSize()); + + header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObject.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObject.java index b665135..dcf3654 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObject.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObject.java @@ -1,13 +1,26 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.component.processor.client.request.generic.GeneralGenericParser; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; public class NetCacheObject extends ClientRequestParser { - @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + private final GeneralGenericParser parser; + + public NetCacheObject() { + this.parser = new GeneralGenericParser(); + } + + @Override + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + this.parser.parseGenericRequest( + packet.getHeader().getToken(), + Protocol.UtilGenericRequest.parseFrom(body.getBody()), + conn + ); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObjectList.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObjectList.java index 19b7e4f..9ff331b 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObjectList.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/NetCacheObjectList.java @@ -1,13 +1,23 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.component.processor.client.request.generic.GeneralGenericParser; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; public class NetCacheObjectList extends ClientRequestParser { - @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + private final GeneralGenericParser parser; + + public NetCacheObjectList() { + this.parser = new GeneralGenericParser(); + } + + @Override + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + Protocol.GenericRequestList genericRequestList = Protocol.GenericRequestList.parseFrom(body.getBody()); + genericRequestList.getRequestsList().forEach(gr -> parser.parseGenericRequest(packet.getHeader().getToken(), gr, conn)); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SendUnsubcribeRequest.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SendUnsubcribeRequest.java index a9aacec..2cd7b32 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SendUnsubcribeRequest.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SendUnsubcribeRequest.java @@ -3,11 +3,13 @@ package com.alterdekim.hearthhack.component.processor.client.request; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class SendUnsubcribeRequest extends ClientRequestParser { @Override public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { - + log.info("parseSendUnsubcribeRequest: got"); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetOptions.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetOptions.java index 74e55eb..56e22ec 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetOptions.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetOptions.java @@ -1,13 +1,17 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class SetOptions extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { - + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + Protocol.SetOptions setOptions = Protocol.SetOptions.parseFrom(body.getBody()); + log.info("parseSetOptions: got"); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SubscriptionRequest.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SubscriptionRequest.java index e176776..eba10ba 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SubscriptionRequest.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SubscriptionRequest.java @@ -1,13 +1,38 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.component.processor.Processor; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; public class SubscriptionRequest extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + //body.getRoute() + Protocol.UtilSubscribeResponse response = Protocol.UtilSubscribeResponse.newBuilder() + .setRoute((int) (Math.random() * 100d)) + .setKeepAliveSecs(300) + .setMaxResubscribeAttempts(0) + .setPendingResponseTimeout(0) + .setPendingSubscribeTimeout(15) + .setRequestMaxWaitSecs(120) + .build(); + Protocol.ClientResponse clResponse = Protocol.ClientResponse.newBuilder() + .addAttribute(Protocol.Attribute.newBuilder() + .setName("id") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(315) + )) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("proto") + .setValue(Protocol.Variant.newBuilder() + .setBlobValue(response.toByteString()) + )) + .build(); + Protocol.Header header = Processor.generateResponse(clResponse.getSerializedSize(), packet.getHeader().getToken(), 0, 0); + conn.send(new BattleNetPacket(header, clResponse.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/UpdateLogin.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/UpdateLogin.java index abb95d1..47571ed 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/UpdateLogin.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/UpdateLogin.java @@ -1,13 +1,31 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + public class UpdateLogin extends ClientRequestParser { @Override - public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) { + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + //Protocol.UpdateLogin updateLogin = Protocol.UpdateLogin.parseFrom(body.getBody()); + Protocol.UpdateLoginComplete updateLoginComplete = Protocol.UpdateLoginComplete.newBuilder().build(); + + Protocol.Notification n = generateNotification(307, updateLoginComplete.toByteString(), updateLoginComplete.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java new file mode 100644 index 0000000..a4e311b --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java @@ -0,0 +1,34 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.ACCOUNT_LICENSES; + +public class AccountLicensesInfo extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + // Protocol.AccountLicensesInfoResponse + + Protocol.Notification n = generateEmptyNotification(325); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return ACCOUNT_LICENSES; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java new file mode 100644 index 0000000..0cb9f99 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java @@ -0,0 +1,49 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; +import lombok.extern.slf4j.Slf4j; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.FEATURES; +import static com.alterdekim.hearthhack.util.Util.setInterval; + +@Slf4j +public class AvailableFeatures extends GenericParser { + + private void executeFeatures(TcpConnection conn) { + Protocol.GuardianVars guardianVars = Protocol.GuardianVars.newBuilder() + .setShowUserUi(1) + .setClientOptionsUpdateIntervalSeconds(300) + .build(); + + Protocol.Notification n = generateNotification(264, guardianVars.toByteString(), guardianVars.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setStatus(0) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .build(); + + try { + conn.send(new BattleNetPacket(header, n.toByteArray())); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + setInterval(() -> executeFeatures(conn), 4000); + } + + @Override + public GetAccountInfoRequest getId() { + return FEATURES; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java new file mode 100644 index 0000000..01cb61a --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java @@ -0,0 +1,34 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.BOOSTERS; + +public class Boosters extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + //Protocol.BoosterList boosterList = Protocol.BoosterList.newBuilder().build(); + + Protocol.Notification n = generateEmptyNotification(224); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return BOOSTERS; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java new file mode 100644 index 0000000..752cf8b --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java @@ -0,0 +1,36 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CARD_BACKS; + +public class CardBacks extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.CardBacks cardBacks = Protocol.CardBacks.newBuilder() + .setDefaultCardBack(0) + .build(); + + Protocol.Notification n = generateNotification(236, cardBacks.toByteString(), cardBacks.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return CARD_BACKS; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java new file mode 100644 index 0000000..f6a70fc --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java @@ -0,0 +1,49 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; +import com.alterdekim.hearthhack.util.Util; + +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CARD_VALUES; + +public class CardValues extends GenericParser { + + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + + // Protocol.CardValues cardVals = Protocol.CardValues.newBuilder().build(); + + //Protocol.Notification n = generateNotification(260, medalInfo.toByteString(), medalInfo.getSerializedSize()); + + /* Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray()));*/ + + byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318840222BFAE010A0C667261676D656E745F30303012ADAE0132A9AE010A0B0A0308A2021028182820010A0F0A0508A202100110900318900320010A0D0A0308F90C10900318900320010A0F0A0508F90C100110C00C18C00C20010A0D0A0308ED0310900318900320010A0F0A0508ED03100110C00C18C00C20010A0B0A0308D9041064186420010A0F0A0508D904100110A00618A00620010A0D0A0308980710900318900320010A0F0A05089807100110C00C18C00C20010A0B0A0308B1081064186420010A0F0A0508B108100110A00618A00620010A0B0A030892051028182820010A0F0A05089205100110900318900320010A0B0A0308F7061064186420010A0F0A0508F706100110A00618A00620010A0B0A0308D2031064186420010A0F0A0508D203100110A00618A00620010A0D0A0308DC0A10900318900320010A0F0A0508DC0A100110C00C18C00C20010A0B0A0308A8081064186420010A0F0A0508A808100110A00618A00620010A0B0A0308DF161028180520000A0E0A0508B4051001109003183220000A0C0A0408BEAE021064181420000A0E0A0508FF03100110A006186420000A0D0A0308B80810C00C18900320000A0B0A0308AE061028180520000A0C0A0408F9AC021028180520000A0E0A0508C613100110A006186420000A0C0A04088AAD021028180520000A0E0A0508E5131001109003183220000A0B0A0308F7041064181420000A0E0A050888071001109003183220000A0E0A0508FB131001109003183220000A0B0A0308E2061028180520000A0D0A0308FA0610C00C18900320000A0E0A0508E1041001109003183220000A0D0A0408FDAF02109003186420000A0E0A0508A8031001109003183220000A0B0A0308F1131064181420000A0E0A0508C104100110A006186420000A0D0A0308FB1410C00C18900320000A0B0A0308F10F1028180520000A0B0A0308C4051064181420000A0E0A0508D50A100110A006186420000A0E0A040820100110801918C00C20000A0B0A0308F9111028180520000A0E0A0508BA131001109003183220000A0D0A0408D3AA02109003186420000A0F0A0608F5AC021001109003183220000A0B0A0308AC011028180520000A0B0A030890031028180520000A0C0A040880AD021064181420000A0E0A0508900F1001109003183220000A0E0A0508DB0F1001109003183220000A0C0A0408FDAE021028180520000A0F0A0508D513100110C00C18900320000A0B0A0308D2131028180520000A0C0A0308CD13109003186420000A0E0A0508A406100110A006186420000A0E0A05089347100110A006186420000A0B0A0308F6081028180520000A0B0A03089E011064181420000A0B0A0308E30F1028180520000A0B0A030888141028180520000A0B0A0308DC061028180520000A100A0608C2AE02100110801918C00C20000A0F0A0608F9AB02100110A006186420000A0F0A0608F9AC021001109003183220000A0E0A0508B906100110A006186420000A100A0608E9AC02100110801918C00C20000A0C0A03088305109003186420000A0B0A0308AF101028180520000A100A060886B102100110801918C00C20000A0C0A0308C10F109003186420000A0B0A0308900F1028180520000A0B0A030895141064181420000A0B0A0308EC051064181420000A0C0A0408DBAF021064181420000A0E0A05089E01100110A006186420000A0F0A0508E115100110C00C18900320000A0D0A0308F80C10C00C18900320000A0B0A03088D031028180520000A0F0A0508A110100110801918C00C20000A0E0A04084B100110C00C18900320000A0B0A030897101028180520000A0B0A0308FB051064181420000A0E0A0508DF02100110A006186420000A0C0A03089D10109003186420000A0E0A040824100110801918C00C20000A0F0A0608E2AF021001109003183220000A0E0A0508A414100110A006186420000A0D0A040856100110A006186420000A0B0A03088E051064181420000A0E0A0508C414100110A006186420000A0E0A0508B303100110A006186420000A0B0A0308900E1028180520000A0F0A05089B03100110801918C00C20000A0B0A0308E2071028180520000A0D0A04088DAE02109003186420000A0E0A0408EFAF0210C00C18900320000A0E0A0508E913100110A006186420000A100A060883AC02100110801918C00C20000A0F0A0608F6AE021001109003183220000A0E0A0508D9131001109003183220000A0E0A0508CB141001109003183220000A0A0A0208711064181420000A0B0A0308D9071028180520000A0F0A0608D9AE02100110A006186420000A0B0A0308F7111064181420000A0F0A0508D706100110801918C00C20000A0E0A05088104100110A006186420000A0C0A040885AD021028180520000A0E0A05089E02100110A006186420000A0B0A030880101028180520000A0E0A05089301100110A006186420000A0F0A0508DB06100110C00C18900320000A0B0A0308980D1064181420000A0F0A060888AC021001109003183220000A0F0A05088305100110C00C18900320000A0B0A0308FD111064181420000A0F0A0508D80F100110C00C18900320000A0E0A05088A03100110A006186420000A0E0A05088F141001109003183220000A0E0A0408A8AB0210C00C18900320000A0B0A0308CC081064181420000A0E0A0508E7161001109003183220000A0F0A0508E002100110C00C18900320000A0F0A0508EF08100110801918C00C20000A0B0A0308F8021028180520000A0E0A0508F60F1001109003183220000A0C0A040889AC021028180520000A0F0A0508A210100110801918C00C20000A0C0A040891AD021064181420000A0B0A0308DC0F1028180520000A0E0A0508B111100110A006186420000A0F0A05089417100110801918C00C20000A100A0608FEAF02100110801918C00C20000A0F0A05089C10100110C00C18900320000A0E0A0508D5161001109003183220000A0D0A04083D1001109003183220000A0F0A0508E10F100110801918C00C20000A0D0A0408C0AF02109003186420000A0D0A0308F60210C00C18900320000A0B0A030897061064181420000A0E0A05088601100110A006186420000A0C0A03088A01109003186420000A0E0A0508B6131001109003183220000A0E0A0508ED01100110A006186420000A0C0A0408A1AC021064181420000A0E0A0508FA0F100110A006186420000A0E0A05089D151001109003183220000A0E0A050882051001109003183220000A0D0A040871100110A006186420000A0F0A06088DAF021001109003183220000A0B0A03088D0F1064181420000A0C0A04089AAC021028180520000A0B0A0308C5081028180520000A0C0A0308B911109003186420000A0E0A0508E103100110A006186420000A0D0A0308DA0F10C00C18900320000A0C0A0408A9AF021028180520000A0B0A0308B8031064181420000A0B0A030899141064181420000A0F0A0608DBAF02100110A006186420000A0C0A0308B206109003186420000A0F0A0608DDAD02100110A006186420000A0B0A030899021064181420000A100A06089FB002100110801918C00C20000A0B0A0308BA011028180520000A0C0A0308B413109003186420000A0D0A03089A1410C00C18900320000A0C0A0308ED08109003186420000A0E0A0408E0AC0210C00C18900320000A0E0A0508B514100110A006186420000A0C0A040883AD021028180520000A0D0A0308E10F10C00C18900320000A0D0A04088DAC02109003186420000A0A0A0208251064181420000A0E0A05089014100110A006186420000A0F0A060893AD02100110A006186420000A0E0A0508B76C1001109003183220000A0E0A0508C9011001109003183220000A0E0A0508EC111001109003183220000A0E0A0508F405100110A006186420000A0B0A0308DD081064181420000A0B0A0308B3131064181420000A100A0608D9AF02100110C00C18900320000A0E0A0508BF141001109003183220000A0E0A0508FB0C1001109003183220000A0B0A020817109003186420000A0F0A0508BD13100110C00C18900320000A0C0A0308A204109003186420000A0E0A0508DC061001109003183220000A0B0A0308CB141028180520000A0B0A0308C4151064181420000A0F0A05088614100110C00C18900320000A0F0A0608B8AC02100110A006186420000A0D0A0308EC1510C00C18900320000A0C0A0308D013109003186420000A0E0A0508DE05100110A006186420000A0E0A0508FF0F1001109003183220000A0F0A0608F7AA021001109003183220000A0B0A0308C9041028180520000A0E0A0508F90E1001109003183220000A0F0A06089AAC021001109003183220000A0E0A0508C1161001109003183220000A0C0A0308D204109003186420000A0B0A030897151028180520000A0E0A0508F7031001109003183220000A0F0A0608E9AB021001109003183220000A0B0A0308BF161028180520000A0E0A0408E6AE0210C00C18900320000A0B0A0308CE061028180520000A0E0A0508C911100110A006186420000A0F0A0508D10F100110C00C18900320000A0B0A030890101028180520000A0F0A0608CEB102100110A006186420000A0F0A0508BA11100110C00C18900320000A0B0A0308D9151064181420000A0B0A0308C4161028180520000A0B0A0308CB051064181420000A0B0A030881101028180520000A0D0A0308C31610C00C18900320000A0E0A05088C0F1001109003183220000A0B0A0308ED091064181420000A0E0A0508C903100110A006186420000A0B0A0308DF151028180520000A0C0A0308EE02109003186420000A0E0A0508E90F1001109003183220000A0E0A0508F946100110A006186420000A0B0A0308E6161028180520000A0E0A0508C314100110A006186420000A0F0A0508B206100110C00C18900320000A100A0608A2AC02100110C00C18900320000A0F0A0508C20E100110C00C18900320000A0F0A0508EC15100110801918C00C20000A0E0A0508920E1001109003183220000A0C0A0408FEAE021028180520000A0F0A0508C50F100110C00C18900320000A0E0A0508BF17100110A006186420000A0B0A0308FF051028180520000A0E0A0508BF161001109003183220000A0E0A0508C80F100110A006186420000A0E0A0508F6061001109003183220000A0C0A03088609109003186420000A0E0A0508F704100110A006186420000A0F0A0508A810100110801918C00C20000A0F0A060886B002100110A006186420000A0E0A050892101001109003183220000A0E0A040809100110801918C00C20000A0B0A0308AD151064181420000A0B0A0308DB031064181420000A0E0A05088508100110A006186420000A0B0A0308B5141064181420000A0B0A0308C8161028180520000A0C0A0308BE0F109003186420000A0B0A030882121028180520000A0B0A0308F7051064181420000A0D0A0308C80310C00C18900320000A0F0A0508F013100110C00C18900320000A0E0A050897011001109003183220000A0E0A0508F4111001109003183220000A0B0A0308F60E1028180520000A0E0A0508D216100110A006186420000A0F0A0508D202100110801918C00C20000A0E0A0508E60F1001109003183220000A0B0A0308C4061028180520000A0C0A0308CE13109003186420000A0F0A0608DAB0021001109003183220000A0C0A0308CF14109003186420000A0B0A0308F6061028180520000A0B0A0308B4051028180520000A0B0A0308D20F1064181420000A0F0A0608B2AD021001109003183220000A0B0A030880041028180520000A0E0A05088A10100110A006186420000A0B0A0308C2081028180520000A0C0A0408B1B0021028180520000A0F0A060883AD021001109003183220000A100A0608A7AD02100110C00C18900320000A0B0A0308CE161028180520000A0E0A050885101001109003183220000A0B0A0308EB131028180520000A0C0A0308C814109003186420000A0E0A0508EE13100110A006186420000A0B0A0308F0111028180520000A0E0A05088910100110A006186420000A0F0A0508CB15100110C00C18900320000A0E0A05088E10100110A006186420000A0B0A0308880E1028180520000A0E0A050880041001109003183220000A0E0A0508C4061001109003183220000A0E0A0508AE031001109003183220000A0B0A0308AE031028180520000A0E0A0508D307100110A006186420000A0E0A0508C2151001109003183220000A0B0A03089A041028180520000A0B0A0308D3071064181420000A0A0A02082D1028180520000A0E0A0508B3011001109003183220000A0E0A05088B141001109003183220000A0D0A0408BDAC02109003186420000A0E0A0508FA051001109003183220000A0E0A05088B10100110A006186420000A0E0A0508CF131001109003183220000A0E0A0508F40F1001109003183220000A0C0A04088CAC021064181420000A0B0A0308A0151064181420000A0E0A0508C415100110A006186420000A0C0A0308C50F109003186420000A0F0A0508B90D100110801918C00C20000A0A0A02085F1064181420000A0E0A0508FD021001109003183220000A0D0A04081E1001109003183220000A0C0A03089609109003186420000A100A06088AB002100110801918C00C20000A0D0A03089D0D10C00C18900320000A0C0A0408B6AC021064181420000A0E0A0508CC161001109003183220000A0F0A05088609100110C00C18900320000A0E0A0508F80F100110A006186420000A0C0A04088BAF021064181420000A0E0A050893141001109003183220000A0B0A0308E90F1028180520000A0F0A0508CE0F100110C00C18900320000A0F0A0608D0AF021001109003183220000A0B0A0308E3111064181420000A0E0A0508A9151001109003183220000A0D0A0408DCAF02109003186420000A0E0A0508D3161001109003183220000A0C0A0408DDAD021064181420000A100A0608C4AB02100110C00C18900320000A0F0A0608F6AA021001109003183220000A0C0A040893AD021064181420000A0E0A0508DF141001109003183220000A0E0A0408CFB10210C00C18900320000A0F0A0608F1AF02100110A006186420000A0E0A0508F00F1001109003183220000A0E0A0408C9AF0210C00C18900320000A0C0A0408F2AF021028180520000A0D0A0308B40310C00C18900320000A0D0A0308841710C00C18900320000A0E0A0508D2131001109003183220000A0E0A0508810E100110A006186420000A0E0A0508FD051001109003183220000A0E0A0508AB021001109003183220000A0F0A0508A615100110C00C18900320000A0E0A0508F90F1001109003183220000A0F0A060886AD021001109003183220000A0F0A0508C001100110C00C18900320000A0E0A0508BE161001109003183220000A0F0A0508A010100110801918C00C20000A0B0A0308C9131064181420000A0E0A050896141001109003183220000A0C0A02080910C00C18900320000A0E0A0508F50F1001109003183220000A0F0A0508C803100110801918C00C20000A0E0A0508E4131001109003183220000A0B0A0308EE0F1064181420000A0D0A0308930F10C00C18900320000A0F0A05089F10100110801918C00C20000A0C0A0308DE14109003186420000A0E0A0508BB161001109003183220000A0B0A0308B7171064181420000A0D0A0308D61110C00C18900320000A0F0A0608F2AF021001109003183220000A0F0A0508AF04100110801918C00C20000A0B0A030895031028180520000A0B0A03088E171064181420000A0D0A0308BA0410C00C18900320000A0E0A0508D1131001109003183220000A0C0A0308A805109003186420000A0F0A05088F06100110C00C18900320000A0B0A0308F9031028180520000A0F0A05088005100110801918C00C20000A0C0A0408F9B0021028180520000A0B0A0308E4151064181420000A0E0A050883091001109003183220000A0E0A0508A015100110A006186420000A0F0A05088710100110C00C18900320000A0C0A0408BBAF021028180520000A0F0A05089007100110801918C00C20000A0C0A040882AD021028180520000A0E0A0508C5081001109003183220000A0E0A0508C1131001109003183220000A0F0A0508B911100110C00C18900320000A0B0A0308DF141028180520000A0E0A050899071001109003183220000A0B0A0308D5161028180520000A0B0A03088C0E1028180520000A0F0A0608B0B002100110A006186420000A0A0A0208161028180520000A0E0A05088C10100110A006186420000A0F0A06088CAC02100110A006186420000A0E0A0508F70F1001109003183220000A0B0A030887041028180520000A0F0A0508ED08100110C00C18900320000A0F0A0508C703100110C00C18900320000A0E0A0508CE061001109003183220000A0B0A03088C101064181420000A0F0A0508A610100110801918C00C20000A0B0A03088D081064181420000A0C0A0308DE16109003186420000A0F0A0508F602100110801918C00C20000A0B0A0308DD041064181420000A0B0A0308ED041028180520000A0E0A0508A2141001109003183220000A0B0A03088F141028180520000A0F0A0508D30F100110801918C00C20000A0E0A0508B717100110A006186420000A0E0A0508C50E1001109003183220000A0A0A02080C1064181420000A0B0A0308C3131028180520000A0E0A0508E006100110A006186420000A0B0A0308BF141028180520000A0B0A0308B76C1028180520000A0B0A030883141064181420000A0B0A03088F091064181420000A100A0608C7AE02100110C00C18900320000A0E0A0508F711100110A006186420000A0B0A0308D2111028180520000A0B0A03088A101064181420000A0A0A0208441028180520000A0E0A05089F031001109003183220000A0E0A0508F70C100110A006186420000A0B0A0308CC161028180520000A0C0A04088F9A021064181420000A0E0A0508B2141001109003183220000A0F0A0508A209100110801918C00C20000A0B0A0308FF031064181420000A0D0A0308840E10C00C18900320000A0B0A0308F20F1064181420000A0B0A030880071064181420000A0E0A0508EE111001109003183220000A0C0A0308E40F109003186420000A0B0A0308DC021028180520000A0D0A0308C20610C00C18900320000A0B0A0308CE031028180520000A0E0A0508DA131001109003183220000A0E0A0508C4131001109003183220000A0E0A0508F9111001109003183220000A0D0A0308A21010C00C18900320000A0E0A0508F0111001109003183220000A0E0A05088F10100110A006186420000A0E0A0508D9071001109003183220000A0B0A0308D4041064181420000A0E0A0508E9011001109003183220000A0B0A030887031064181420000A0E0A05089902100110A006186420000A0F0A0608FEAE021001109003183220000A0C0A03088710109003186420000A0D0A0308D71310C00C18900320000A0B0A0308A4071064181420000A0E0A0508D5031001109003183220000A0B0A0308E50F1064181420000A0F0A0508A614100110C00C18900320000A0E0A0508DE071001109003183220000A0E0A0508CE031001109003183220000A0C0A0408F5AC021028180520000A0C0A0408D4AF021028180520000A0F0A0508FB0E100110801918C00C20000A0C0A0308E915109003186420000A0F0A0508E20F100110C00C18900320000A0F0A0508C814100110C00C18900320000A0E0A0508C40E1001109003183220000A0B0A0308E8011028180520000A0B0A0308FD051028180520000A0E0A05089706100110A006186420000A0E0A0508DF151001109003183220000A0B0A03089F031028180520000A0E0A0408C0AC0210C00C18900320000A0C0A0308D613109003186420000A0E0A0508AD15100110A006186420000A0B0A03088E0E1028180520000A0F0A05088914100110C00C18900320000A0F0A0508A315100110C00C18900320000A0E0A05089310100110A006186420000A0B0A03088B141028180520000A0E0A05088C011001109003183220000A0E0A0508D404100110A006186420000A0C0A02082010C00C18900320000A0E0A0508D1111001109003183220000A0E0A0508AE10100110A006186420000A0C0A0408CEB1021064181420000A0D0A03088B0F10C00C18900320000A0F0A0508A515100110801918C00C20000A0E0A050884101001109003183220000A100A0608B1AF02100110C00C18900320000A0E0A0508C405100110A006186420000A0B0A030893011064181420000A0D0A0308890610C00C18900320000A0B0A030888071028180520000A0E0A0508A705100110A006186420000A0E0A040886B10210C00C18900320000A0B0A030892101028180520000A0E0A0508870E100110A006186420000A0E0A0508D40A1001109003183220000A0C0A0308A615109003186420000A0B0A0308CF161028180520000A0D0A0308A31010C00C18900320000A0C0A0308F508109003186420000A0F0A0508B914100110C00C18900320000A0B0A0308D4051028180520000A0B0A0308B9061064181420000A0E0A0508E507100110A006186420000A0E0A0508E30F1001109003183220000A0E0A0508E20C100110A006186420000A0E0A0508E9121001109003183220000A0C0A0308B702109003186420000A0E0A0508C9041001109003183220000A0B0A0308D8141064181420000A0B0A0308CD161028180520000A100A0608BDAC02100110C00C18900320000A0B0A030895101064181420000A0C0A0408A0AB021064181420000A0E0A05089A021001109003183220000A0E0A0508AE061001109003183220000A0B0A0308DB0A1064181420000A0E0A050890101001109003183220000A0D0A0308FB0810C00C18900320000A0B0A0308CD151028180520000A0B0A0308C3141064181420000A0B0A0308E1031064181420000A0B0A03088D101064181420000A0C0A0308E115109003186420000A0D0A0308D20210C00C18900320000A0C0A0308D10F109003186420000A0E0A05089914100110A006186420000A0E0A0508F20B100110A006186420000A0C0A0408C5AE021028180520000A0B0A030885041064181420000A0B0A0308EA0F1028180520000A0B0A0308AD101028180520000A100A0608A0B002100110801918C00C20000A100A0608E0AC02100110801918C00C20000A0D0A03089F1010C00C18900320000A0B0A0308E8121028180520000A0C0A03089810109003186420000A100A0608D3AE02100110801918C00C20000A0C0A03089A10109003186420000A0E0A050894141001109003183220000A0B0A0308C3011028180520000A0F0A0608CEAE02100110A006186420000A0B0A03089A021028180520000A0B0A030885081064181420000A0F0A05088A01100110C00C18900320000A0B0A0308D2141028180520000A0E0A05088703100110A006186420000A0C0A0408F1AF021064181420000A0D0A0308900710C00C18900320000A0C0A0408D0AF021028180520000A0F0A0508DE14100110C00C18900320000A0F0A0608D4AE02100110A006186420000A0F0A0508B413100110C00C18900320000A100A0608CDAF02100110C00C18900320000A0C0A0408F7AA021028180520000A0E0A0508D50F1001109003183220000A0F0A06088BAF02100110A006186420000A0E0A0508BB13100110A006186420000A0E0A05089403100110A006186420000A0D0A04082D1001109003183220000A0E0A0508CD151001109003183220000A0D0A0308D70610C00C18900320000A0E0A0508B7041001109003183220000A0F0A060880AF021001109003183220000A0B0A0308FC0F1028180520000A0E0A0508EB131001109003183220000A0B0A0308A5091028180520000A0E0A05088D031001109003183220000A0B0A0308DB0F1028180520000A0C0A0408AFAC021064181420000A0B0A0308810A1028180520000A0C0A0308BB03109003186420000A0F0A060884AD021001109003183220000A0E0A0508C509100110A006186420000A0E0A0508E2061001109003183220000A0B0A0308DF021064181420000A0B0A0308C4141064181420000A0E0A0508900E1001109003183220000A0C0A040888AC021028180520000A0F0A060891AD02100110A006186420000A0F0A05088B0F100110801918C00C20000A0B0A0308FB011028180520000A0D0A0308DA0D10C00C18900320000A0E0A0508EB16100110A006186420000A0E0A05089514100110A006186420000A0C0A0308BD13109003186420000A0B0A0308E1041028180520000A0F0A0508C90F100110801918C00C20000A0C0A0408CEAE021064181420000A0E0A0508E8121001109003183220000A0E0A0508EA0F1001109003183220000A0B0A0308F8131064181420000A0F0A05088412100110801918C00C20000A0D0A0408F2AE02109003186420000A0E0A0508BA161001109003183220000A0C0A0408ECAE021028180520000A0B0A0308D60F1028180520000A0E0A05088310100110A006186420000A100A0608A8AB02100110801918C00C20000A0D0A0308FB0E10C00C18900320000A0F0A0608B4AC021001109003183220000A0F0A0508CE13100110C00C18900320000A0C0A03089910109003186420000A0E0A0508FB11100110A006186420000A0F0A05089A10100110C00C18900320000A0C0A0308B914109003186420000A0E0A0508E2151001109003183220000A0C0A0408FBAA021064181420000A0F0A0508A510100110801918C00C20000A0B0A030891101064181420000A0B0A03089B151028180520000A0E0A0508AF101001109003183220000A0F0A0608DBB0021001109003183220000A0E0A0508E50F100110A006186420000A0D0A0308F80810C00C18900320000A0F0A05089002100110C00C18900320000A0F0A0608B8AD021001109003183220000A0E0A0508C3011001109003183220000A0D0A0408161001109003183220000A0B0A0308D2151064181420000A0C0A0308A315109003186420000A0E0A050886061001109003183220000A0B0A03088F0F1028180520000A0E0A05088504100110A006186420000A0D0A0308EF0F10C00C18900320000A0D0A0408A7AD02109003186420000A0E0A050897681001109003183220000A0B0A03088A031064181420000A100A0608C9AF02100110801918C00C20000A0E0A0508F2011001109003183220000A0F0A0508A710100110801918C00C20000A0C0A0308A614109003186420000A0D0A040887AB02109003186420000A0C0A0308C115109003186420000A0B0A0308C60F1064181420000A0B0A0308B0101028180520000A0E0A0508FB05100110A006186420000A0D0A0408B1AF02109003186420000A0F0A060888B002100110A006186420000A0E0A050881051001109003183220000A0B0A0308DE071028180520000A0B0A0308F9461064181420000A0F0A0508850E100110801918C00C20000A0B0A030880121028180520000A0B0A0308D9131028180520000A0D0A0308C50410C00C18900320000A0B0A0308C8131064181420000A0F0A0508C316100110801918C00C20000A0D0A0408CDAF02109003186420000A0E0A0408CBAC0210C00C18900320000A0E0A0508F705100110A006186420000A0E0A0508BA011001109003183220000A0C0A0308C70F109003186420000A0F0A0508D204100110C00C18900320000A0B0A0308FB131028180520000A0E0A0508FA11100110A006186420000A0E0A050895031001109003183220000A0D0A0408A9AD02109003186420000A0B0A0308ED021028180520000A0E0A0508E70F100110A006186420000A0C0A0308C001109003186420000A0C0A040888B0021064181420000A0E0A050896101001109003183220000A0B0A0308E9121028180520000A0D0A0308A61010C00C18900320000A0E0A0508E00F100110A006186420000A0B0A0308D2161064181420000A0B0A0308FA051028180520000A0E0A0508D814100110A006186420000A0B0A0308ED0F1064181420000A0B0A0308F5041064181420000A0B0A0308F70F1028180520000A0E0A0508CD161001109003183220000A0C0A0408F6AA021028180520000A0C0A0308E107109003186420000A0C0A0308DB06109003186420000A0C0A0408F9AB021064181420000A0E0A0508B714100110A006186420000A0B0A03089D021028180520000A0B0A0308C4131028180520000A0B0A0308C9011028180520000A0E0A0508810A1001109003183220000A0B0A0308C9031064181420000A0F0A0608E8AF021001109003183220000A0D0A0308B01510C00C18900320000A0F0A0508F80D100110C00C18900320000A0C0A040888AF021064181420000A0E0A05088D0E1001109003183220000A0F0A06088AAD021001109003183220000A100A0608F2AE02100110C00C18900320000A0B0A03089E021064181420000A0B0A0308FE0D1064181420000A0F0A0508ED16100110C00C18900320000A0F0A0608FFAF02100110A006186420000A0E0A0508BC051001109003183220000A0F0A060880AD02100110A006186420000A0F0A0608F2B002100110A006186420000A0B0A0308BB161028180520000A0C0A0408BEAB021028180520000A0C0A0408CFAF021028180520000A0B0A030882051028180520000A0E0A0508E311100110A006186420000A0F0A0508D80A100110C00C18900320000A0E0A0508D311100110A006186420000A0F0A05088414100110C00C18900320000A0E0A0508E415100110A006186420000A100A0608AEAB02100110801918C00C20000A0B0A0308F50F1028180520000A0B0A030893071064181420000A0F0A0608C4AE021001109003183220000A0C0A04088EAC021064181420000A0C0A0408D191021064181420000A0E0A0508CA08100110A006186420000A0B0A0308810E1064181420000A0F0A05089B10100110C00C18900320000A0F0A0508C20F100110801918C00C20000A0D0A0408F9AA02109003186420000A0E0A05088610100110A006186420000A0E0A0508CF161001109003183220000A0C0A0408D9AE021064181420000A0E0A040883AC0210C00C18900320000A0B0A0308F5131028180520000A0D0A0408FFAD02109003186420000A0D0A0308A41510C00C18900320000A0F0A05089A14100110801918C00C20000A0E0A0508E2081001109003183220000A0E0A0508F713100110A006186420000A0B0A0308DA131028180520000A0E0A0508EA161001109003183220000A0F0A0608BBAF021001109003183220000A0F0A0508F80C100110801918C00C20000A0F0A0508A310100110801918C00C20000A0B0A02084B109003186420000A0A0A0208561064181420000A0F0A0508A314100110801918C00C20000A0E0A0508AB061001109003183220000A100A0608CBAC02100110801918C00C20000A0E0A0508CB13100110A006186420000A0A0A02083D1028180520000A0B0A030886101064181420000A0F0A0508B403100110801918C00C20000A0F0A06088F9A02100110A006186420000A0E0A050881101001109003183220000A0E0A0508CE15100110A006186420000A0B0A0308D50A1064181420000A0D0A0308820E10C00C18900320000A0E0A0508CB0F100110A006186420000A0B0A0308F5051028180520000A0B0A0308D90D1028180520000A0F0A0508FB14100110801918C00C20000A100A0608B0AF02100110C00C18900320000A0B0A0308A7051064181420000A0E0A0408BFAC0210C00C18900320000A0C0A0408CBAF021028180520000A0E0A0408D8AC0210C00C18900320000A0C0A0408FAAA021064181420000A0B0A0308F90F1028180520000A0E0A0508D215100110A006186420000A0E0A050890151001109003183220000A0F0A0608AFAC02100110A006186420000A0B0A0308C0141028180520000A0F0A0508AC04100110801918C00C20000A0F0A0608C5AE021001109003183220000A0B0A0308CD0F1064181420000A0B0A0308E9131064181420000A0D0A03089E1010C00C18900320000A0C0A03089B10109003186420000A0E0A0508F807100110A006186420000A0E0A0508F9031001109003183220000A0B0A0308BA131028180520000A0B0A0308E2111028180520000A0B0A0308C9111064181420000A0B0A0308D3161028180520000A0E0A050882121001109003183220000A0C0A02082410C00C18900320000A0B0A0308FA0C1064181420000A0B0A0308E6111064181420000A0E0A0508B803100110A006186420000A0F0A0508E911100110801918C00C20000A0F0A0508FF0D100110801918C00C20000A0E0A0508940F1001109003183220000A0E0A0508D60A100110A006186420000A0B0A030896141028180520000A0B0A0308C5091064181420000A0C0A040884B0021064181420000A0E0A0508F5161001109003183220000A0F0A0508BC14100110C00C18900320000A100A0608E6AE02100110801918C00C20000A0F0A0508A410100110801918C00C20000A0E0A0508ED09100110A006186420000A0E0A0508C9071001109003183220000A0B0A0308FB0F1028180520000A0D0A04080C100110A006186420000A0E0A05088F0F1001109003183220000A0B0A030894101028180520000A0C0A0308C703109003186420000A0B0A0308EA161028180520000A0F0A0608A0AB02100110A006186420000A0B0A0308FB061064181420000A0D0A0308E81110C00C18900320000A0D0A0408FEAA02109003186420000A0D0A0308EF0810C00C18900320000A100A060892AC02100110C00C18900320000A0E0A0508FB0F1001109003183220000A0D0A03089B0310C00C18900320000A0F0A0508C914100110801918C00C20000A100A060881B102100110C00C18900320000A0E0A0508D015100110A006186420000A0F0A0508EF0F100110801918C00C20000A0C0A0408D2AE021028180520000A0C0A0408C4AE021028180520000A0B0A0308D1111028180520000A0F0A0508E915100110C00C18900320000A0C0A0308F80D109003186420000A0B0A0308C9161028180520000A0F0A060884B002100110A006186420000A0B0A030882161028180520000A0F0A0508BE0F100110C00C18900320000A0E0A0508F20F100110A006186420000A0B0A0308B2141028180520000A0E0A0508C0151001109003183220000A0E0A0508EE0F100110A006186420000A0B0A0308FE071028180520000A0B0A0308CB0F1064181420000A0E0A0508E611100110A006186420000A0D0A040825100110A006186420000A0B0A0308F7131064181420000A0B0A0308A4061064181420000A0D0A0308941710C00C18900320000A0E0A0508A106100110A006186420000A0B0A0308A1061064181420000A0B0A0308E7161028180520000A0C0A04088DAF021028180520000A0D0A0308FF0D10C00C18900320000A100A0608C0AC02100110801918C00C20000A0B0A0308CA081064181420000A0B0A0308A8031028180520000A0F0A0508BB03100110C00C18900320000A0E0A0508FB06100110A006186420000A0F0A05089609100110C00C18900320000A0B0A0308F4111028180520000A0B0A0308C7171028180520000A0B0A0308890F1064181420000A0B0A03088A0E1028180520000A0E0A0508F8021001109003183220000A0C0A03089C10109003186420000A0B0A030891171064181420000A100A0608A7AC02100110C00C18900320000A0B0A0308F70D1028180520000A0E0A0408AEAB0210C00C18900320000A0C0A03089101109003186420000A0D0A04085F100110A006186420000A0F0A0608CFAF021001109003183220000A0D0A0308A81010C00C18900320000A0F0A060889AC021001109003183220000A0C0A0308BA11109003186420000A0E0A0508C308100110A006186420000A0B0A0308F70C1064181420000A0C0A0408FAB0021064181420000A0B0A03088E0F1064181420000A0B0A0308CB131064181420000A0E0A040817100110C00C18900320000A0B0A0308BE161028180520000A0C0A03088B08109003186420000A0B0A0308F80F1064181420000A0B0A0308E6041028180520000A0E0A050887041001109003183220000A0F0A0508BD14100110801918C00C20000A0E0A0508C8161001109003183220000A100A0608A4AC02100110C00C18900320000A0B0A0308E5131028180520000A0E0A0408E9AC0210C00C18900320000A0F0A06089DAC02100110A006186420000A100A0608EFAF02100110801918C00C20000A0B0A0308F4051064181420000A0C0A03088616109003186420000A0B0A030894141028180520000A0D0A0308A40310C00C18900320000A0B0A0308EE131064181420000A0E0A050882101001109003183220000A0D0A0308FC1310C00C18900320000A0B0A0308AE101064181420000A0F0A0508DF0F100110C00C18900320000A0C0A0408F2B0021064181420000A0B0A0308C7131028180520000A0D0A0308800510C00C18900320000A0B0A0308D20A1028180520000A0E0A0508D1141001109003183220000A0E0A0508ED021001109003183220000A0E0A0508DE15100110A006186420000A0B0A0308CF131028180520000A0F0A05089910100110C00C18900320000A0C0A0308950F109003186420000A0B0A0308BF171064181420000A0E0A0508D3131001109003183220000A0D0A0308ED0510C00C18900320000A0B0A03088A061028180520000A0B0A030896101028180520000A0B0A0308E20C1064181420000A0B0A0308C2151028180520000A0F0A0608A1AC02100110A006186420000A0D0A0408C7AE02109003186420000A0E0A0408D3AE0210C00C18900320000A0F0A0508D511100110801918C00C20000A0E0A0508EA041001109003183220000A0E0A0508A5091001109003183220000A0F0A0508EC0F100110C00C18900320000A0B0A0308D40A1028180520000A0F0A0508C115100110C00C18900320000A0B0A0308E00F1064181420000A0C0A04089DAC021064181420000A0B0A03088E101064181420000A0F0A0608FDAE021001109003183220000A0F0A05088417100110801918C00C20000A0B0A0308A2141028180520000A0B0A0308E0061064181420000A0F0A060881B0021001109003183220000A0B0A0308D4111028180520000A0F0A0508EB02100110801918C00C20000A0B0A0308A4141064181420000A0F0A0508D002100110801918C00C20000A0B0A0308F2011028180520000A100A0608A9AD02100110C00C18900320000A0B0A0308C2161028180520000A0E0A050880121001109003183220000A0C0A0308D513109003186420000A0B0A0308DC011064181420000A0C0A040880AF021028180520000A0D0A0308871710C00C18900320000A0E0A0508D60F1001109003183220000A0B0A0308D4081028180520000A0E0A0508FA0C100110A006186420000A0E0A0508C3131001109003183220000A0F0A0508930F100110801918C00C20000A0B0A0308910E1028180520000A0E0A0508E6161001109003183220000A0E0A0508DD0F100110A006186420000A0C0A0308E002109003186420000A0D0A04088AAE02109003186420000A0B0A03089D151028180520000A0E0A0508870F1001109003183220000A0B0A0308C1041064181420000A100A0608F9AA02100110C00C18900320000A0B0A030894031064181420000A0B0A0308C9071028180520000A0E0A0408C4AC0210C00C18900320000A0F0A05088906100110801918C00C20000A0E0A05089B151001109003183220000A0E0A050896061001109003183220000A0F0A0508B808100110801918C00C20000A0D0A0308F21310C00C18900320000A0E0A0508FA0D100110A006186420000A0C0A0308A708109003186420000A0F0A0508BA14100110801918C00C20000A0B0A0308C5031064181420000A0E0A0508FB011001109003183220000A0E0A0508890F100110A006186420000A0B0A0308B1111064181420000A0E0A0508DC01100110A006186420000A0E0A0508F2111001109003183220000A0E0A0508F811100110A006186420000A0E0A0508ED13100110A006186420000A0B0A0308F60F1028180520000A0B0A0308EC111028180520000A0E0A05088810100110A006186420000A0B0A0308E5071064181420000A0E0A0508D20F100110A006186420000A0F0A05089D0D100110801918C00C20000A0E0A0508F311100110A006186420000A0F0A0508C207100110801918C00C20000A0D0A0308EB0210C00C18900320000A0D0A0308AF0410C00C18900320000A0C0A0308F013109003186420000A0B0A030882101028180520000A0F0A0508D301100110C00C18900320000A0C0A0408DDAE021028180520000A0E0A0508C60F100110A006186420000A0E0A05088E0F100110A006186420000A0B0A0308FB111064181420000A0E0A0508DF161001109003183220000A0E0A0508DB03100110A006186420000A0D0A0308CA1410C00C18900320000A0E0A0508D2141001109003183220000A0C0A040886AD021028180520000A0F0A0608D4AF021001109003183220000A0E0A0508D40F100110A006186420000A0B0A0308F3111064181420000A0F0A060885AD021001109003183220000A0E0A0508F60E1001109003183220000A0B0A030899071028180520000A0E0A0508DB0A100110A006186420000A0E0A050897101001109003183220000A0D0A0308BC1510C00C18900320000A0D0A0408A7AC02109003186420000A0F0A0508CF14100110C00C18900320000A0F0A0608F4AF02100110A006186420000A0B0A0308890E1028180520000A0E0A0508C2081001109003183220000A0B0A0308A9151028180520000A0E0A0508DC15100110A006186420000A0E0A0508D915100110A006186420000A0B0A0308B4141064181420000A0C0A0308D90F109003186420000A0B0A0308E2151028180520000A0E0A0508CC08100110A006186420000A0E0A0508F111100110A006186420000A0E0A0508C0141001109003183220000A0E0A0508C7131001109003183220000A0C0A0308DF0F109003186420000A0B0A0308CE151064181420000A0C0A0308F305109003186420000A0B0A0308D8131028180520000A0E0A0508C90D100110A006186420000A0C0A0408FEAC021028180520000A0F0A06088EAC02100110A006186420000A0E0A0508F813100110A006186420000A0F0A0508A805100110C00C18900320000A0E0A0508F504100110A006186420000A0B0A0308F1111064181420000A100A0608AEB002100110C00C18900320000A0B0A0308BC051028180520000A0F0A0508C206100110801918C00C20000A0E0A0508D4111001109003183220000A0B0A0308E9011028180520000A0E0A0508DE0F100110A006186420000A0E0A0508FD0D1001109003183220000A100A0608FDAF02100110C00C18900320000A0B0A0308FF0F1028180520000A0F0A0508F914100110801918C00C20000A0B0A0308C40F1028180520000A0B0A0308CE141064181420000A0B0A0308F8071064181420000A0E0A0508D8131001109003183220000A0E0A0508C503100110A006186420000A0B0A030886061028180520000A0E0A0508D711100110A006186420000A100A0608DCAF02100110C00C18900320000A0F0A0508E811100110801918C00C20000A0C0A0408B8AC021064181420000A0F0A0508FC13100110801918C00C20000A0E0A05089D06100110A006186420000A0C0A0408DAB0021028180520000A0B0A0308EA041028180520000A0B0A0308C3081064181420000A0B0A0308F90E1028180520000A0E0A0508F10F1001109003183220000A0E0A0508C0071001109003183220000A0B0A0308920E1028180520000A0B0A030889101064181420000A0F0A0508950F100110C00C18900320000A0E0A0508E8011001109003183220000A0E0A0508CE14100110A006186420000A0E0A0508EC05100110A006186420000A0B0A0308FD0D1028180520000A0B0A0308CA161028180520000A0F0A0608F7AB021001109003183220000A0E0A0408FEAF0210C00C18900320000A0B0A03088D0E1028180520000A0D0A0308FA1410C00C18900320000A0C0A0308920F109003186420000A0F0A0508C515100110801918C00C20000A0E0A050882161001109003183220000A0E0A05088F0E1001109003183220000A100A0608FFAD02100110C00C18900320000A0E0A0408A0B00210C00C18900320000A0F0A05088717100110801918C00C20000A0F0A0508E107100110C00C18900320000A0B0A0308BA161028180520000A0E0A05089117100110A006186420000A0C0A0308BC14109003186420000A100A06088DAC02100110C00C18900320000A0E0A0508980D100110A006186420000A0C0A0308FD0F109003186420000A100A0608D8AC02100110801918C00C20000A0B0A0308E7111064181420000A0E0A0508E6041001109003183220000A0D0A0408D9AF02109003186420000A0E0A05089E07100110A006186420000A0F0A0508A403100110801918C00C20000A0B0A0308C90D1064181420000A0E0A0508CB16100110A006186420000A0F0A0608FBAA02100110A006186420000A0F0A0508E40F100110C00C18900320000A0E0A050890031001109003183220000A0D0A0408AEB002109003186420000A0C0A0408E8AF021028180520000A0B0A0308CB161064181420000A0F0A0508BF08100110C00C18900320000A0E0A0508C40F1001109003183220000A0E0A0508DD0A1001109003183220000A0E0A05088A061001109003183220000A0E0A0508B2081001109003183220000A0E0A0508CF151001109003183220000A0B0A0308D5081064181420000A0E0A0508DB091001109003183220000A100A0608C0AF02100110C00C18900320000A0D0A0308A11010C00C18900320000A0C0A0308910F109003186420000A0B0A0308E70F1064181420000A0B0A0308F6071064181420000A0B0A030893471064181420000A0F0A0608B1B0021001109003183220000A0B0A030897011028180520000A0C0A0308E20F109003186420000A0F0A0608FAAC021001109003183220000A0F0A0608FBAB02100110A006186420000A0B0A0308ED011064181420000A0E0A0508FE0D100110A006186420000A0C0A0408B9AB021064181420000A0C0A0408B0B0021064181420000A0E0A0508DC0F1001109003183220000A0E0A0508F30F1001109003183220000A0B0A0308870E1064181420000A0D0A0408221001109003183220000A0F0A0608CBAF021001109003183220000A0E0A0508CA161001109003183220000A0B0A0308C8041028180520000A0F0A0508FA0E100110801918C00C20000A0F0A05088B08100110C00C18900320000A0D0A0308851710C00C18900320000A0F0A0608ADB002100110A006186420000A0B0A0308F2051028180520000A0D0A0408A4AC02109003186420000A0B0A0308F50D1028180520000A0D0A0308C51510C00C18900320000A0C0A0408FFAF021064181420000A100A0608C4AC02100110801918C00C20000A0E0A05088E0E1001109003183220000A0B0A0308EB161064181420000A0B0A030883091028180520000A0D0A0308F91410C00C18900320000A0E0A0508890E1001109003183220000A0F0A0508AA06100110C00C18900320000A0D0A0308E91110C00C18900320000A0E0A0508EE01100110A006186420000A0C0A0408DBB0021028180520000A0F0A0508A715100110801918C00C20000A0C0A0408E2AF021028180520000A0E0A050881171001109003183220000A0B0A0308B7141064181420000A0B0A0308F8111064181420000A0F0A0508D613100110C00C18900320000A0D0A0308BA1410C00C18900320000A0B0A030883101064181420000A0F0A0508B702100110C00C18900320000A0B0A0308DE0F1064181420000A0F0A0608A9AF021001109003183220000A0B0A0308FE0C1064181420000A0B0A0308C6131064181420000A0B0A0308E4131028180520000A0F0A0608E0B002100110A006186420000A0F0A0608B6AC02100110A006186420000A100A0608BFAC02100110801918C00C20000A0F0A0508FB08100110801918C00C20000A0E0A0508910E1001109003183220000A0B0A030891141028180520000A0D0A040881B102109003186420000A0B0A0308C0071028180520000A0B0A0308E7071028180520000A0D0A0308C90F10C00C18900320000A0E0A0508A407100110A006186420000A0F0A0508EE02100110C00C18900320000A0B0A0308FD021028180520000A0B0A030886011064181420000A0E0A0508B0101001109003183220000A0B0A030882081064181420000A0B0A0308880F1028180520000A0E0A04089FB00210C00C18900320000A0E0A0508CB05100110A006186420000A0F0A060882B0021001109003183220000A0F0A0508A708100110C00C18900320000A0B0A0308AB061028180520000A0F0A0508FD0F100110C00C18900320000A0B0A0308CF151028180520000A0B0A0308D5031028180520000A0E0A05088E17100110A006186420000A0B0A0308EE061028180520000A0D0A0308841210C00C18900320000A0E0A05088007100110A006186420000A0B0A03089D061064181420000A0B0A03088C021028180520000A100A06088DAE02100110C00C18900320000A0E0A0508D2111001109003183220000A0B0A0308F7031028180520000A0D0A0308B20210C00C18900320000A0B0A03088F0E1028180520000A0B0A0308FA111064181420000A0B0A0308BB131064181420000A0E0A0508ED041001109003183220000A0D0A0308AC0410C00C18900320000A0B0A0308C1161028180520000A0F0A0608FAB002100110A006186420000A0F0A0508C504100110801918C00C20000A0E0A0508FC0F1001109003183220000A100A0608FEAA02100110C00C18900320000A0F0A0608ECAE021001109003183220000A0E0A0508FE0C100110A006186420000A0B0A0308F30C1028180520000A0B0A0308C40E1028180520000A0E0A0508FD11100110A006186420000A0B0A0308D3131028180520000A0D0A0308D51110C00C18900320000A0E0A05089307100110A006186420000A0C0A0408ADB0021064181420000A0B0A030890151028180520000A0E0A05089D021001109003183220000A0F0A06088DAD021001109003183220000A0B0A030881171028180520000A100A0608D3AA02100110C00C18900320000A0E0A0508F5131001109003183220000A0C0A0308BF08109003186420000A0E0A05088D10100110A006186420000A0C0A03088D14109003186420000A0F0A0508B015100110801918C00C20000A0C0A040884AD021028180520000A0B0A0308E2081028180520000A0B0A030893101064181420000A0B0A0308E7131028180520000A0F0A05089D10100110C00C18900320000A0E0A0508D4081001109003183220000A0E0A0508C615100110A006186420000A0B0A0308940F1028180520000A0E0A05088E05100110A006186420000A0E0A0508E8151001109003183220000A0E0A0508CE161001109003183220000A0F0A0508A415100110801918C00C20000A0F0A0608BEAB021001109003183220000A0D0A0308B90D10C00C18900320000A0E0A05088C0E1001109003183220000A0F0A0508C815100110801918C00C20000A0C0A0308CE0F109003186420000A0E0A0508C8041001109003183220000A0F0A0508BA04100110801918C00C20000A0F0A05088517100110801918C00C20000A0E0A0508B8131001109003183220000A0F0A060888AF02100110A006186420000A0B0A0308FA0F1064181420000A0B0A0308ED131064181420000A0B0A0308D1141028180520000A0F0A05088D14100110C00C18900320000A0E0A04088AB00210C00C18900320000A0F0A05089F02100110C00C18900320000A0C0A0308D301109003186420000A0C0A0308C20E109003186420000A0C0A03088614109003186420000A0F0A0508D90F100110C00C18900320000A0E0A0508F50D1001109003183220000A0B0A0308DE051064181420000A0D0A040892AC02109003186420000A0F0A0508F213100110801918C00C20000A0B0A0308E60F1028180520000A0C0A040881B0021028180520000A0F0A0508D611100110801918C00C20000A100A060887AB02100110C00C18900320000A0B0A0308D60A1064181420000A0C0A040882B0021028180520000A0E0A05088D08100110A006186420000A0B0A0308DA041028180520000A0C0A0308D80A109003186420000A0F0A05088C14100110C00C18900320000A0D0A0308A51510C00C18900320000A0F0A0508DE16100110C00C18900320000A0B0A0308F00F1028180520000A0B0A0308AB021028180520000A0C0A03088914109003186420000A0E0A050880101001109003183220000A0B0A0308870F1028180520000A0D0A0408A2AC02109003186420000A0F0A0508ED05100110801918C00C20000A0E0A050897151001109003183220000A0D0A0308A31410C00C18900320000A0B0A0308EB111028180520000A0F0A05088616100110C00C18900320000A0B0A0308BF131028180520000A0F0A0508FA14100110801918C00C20000A0F0A0608F9B0021001109003183220000A100A0608CFB102100110801918C00C20000A0B0A0308B9171064181420000A0D0A0308850E10C00C18900320000A0B0A03088C0F1028180520000A0E0A05089668100110A006186420000A0F0A0508820E100110801918C00C20000A0F0A0608FEAC021001109003183220000A0E0A050891141001109003183220000A0E0A0508F70D1001109003183220000A0F0A0508910F100110C00C18900320000A0B0A03088B101064181420000A0E0A0508B917100110A006186420000A0D0A0308A71010C00C18900320000A0B0A0308DD0A1028180520000A0F0A05089810100110C00C18900320000A0E0A0508F6081001109003183220000A0B0A0308D40F1064181420000A0E0A0508E2071001109003183220000A0E0A0508B313100110A006186420000A0B0A030885101028180520000A0E0A0408C2AE0210C00C18900320000A0D0A0308BD1410C00C18900320000A0E0A0508D508100110A006186420000A0F0A0508840E100110801918C00C20000A0E0A05088C021001109003183220000A0E0A0508DD08100110A006186420000A0E0A05088A0E1001109003183220000A0B0A0308D50F1028180520000A0E0A0508FE071001109003183220000A0F0A0508D713100110801918C00C20000A0E0A0508ED0F100110A006186420000A0B0A03089E071064181420000A0C0A0408C9B0021028180520000A0E0A0508880E1001109003183220000A0E0A05088F09100110A006186420000A0B0A030893141028180520000A0C0A03089F02109003186420000A0B0A030897681028180520000A0C0A03088C14109003186420000A0F0A0508F808100110801918C00C20000A0B0A0308C80F1064181420000A0C0A0308EC0F109003186420000A100A06088AAE02100110C00C18900320000A0D0A0308C20F10C00C18900320000A0C0A03088F06109003186420000A0B0A0308E8151028180520000A0B0A0308F2111028180520000A0E0A0508EE061001109003183220000A0D0A0308A41010C00C18900320000A0F0A05089304100110C00C18900320000A0B0A0308B8131028180520000A0C0A0408B8AD021028180520000A0D0A0308C81510C00C18900320000A0F0A0508F305100110C00C18900320000A0E0A0508D4051001109003183220000A0F0A0508E80F100110801918C00C20000A0E0A0508EB111001109003183220000A0E0A05088D0F100110A006186420000A0E0A0508E2111001109003183220000A0E0A0508FC10100110A006186420000A0F0A0608BEAE02100110A006186420000A0E0A0508C9161001109003183220000A0E0A05089A041001109003183220000A0D0A0308C91410C00C18900320000A0B0A0308B2081028180520000A0D0A0308DA0610C00C18900320000A0F0A0508C10F100110C00C18900320000A0C0A0408D4AE021064181420000A0F0A0508D013100110C00C18900320000A0E0A05088208100110A006186420000A0B0A0308B3011028180520000A0C0A040886B0021064181420000A0A0A0208451028180520000A0B0A0308EE111028180520000A0D0A0408B0AF02109003186420000A0F0A0508DA0F100110801918C00C20000A0B0A0308D0151064181420000A0B0A0308DC151064181420000A0B0A0308C50E1028180520000A0F0A05089E10100110801918C00C20000A0B0A0308EE011064181420000A0E0A0508E7071001109003183220000A0C0A0308ED16109003186420000A0E0A0508D90D1001109003183220000A0B0A0308C1131028180520000A0C0A0308CB15109003186420000A0B0A0308FB0C1028180520000A0D0A0408451001109003183220000A0C0A03088414109003186420000A0C0A0408F4AF021064181420000A0C0A0408FBAB021064181420000A0E0A0508AD101001109003183220000A0E0A0508CD0F100110A006186420000A0E0A0508B414100110A006186420000A0B0A030896061028180520000A0D0A0308D00210C00C18900320000A0E0A0508E7131001109003183220000A0B0A0308B3031064181420000A0D0A0308A20910C00C18900320000A0B0A0308B7041028180520000A0C0A0408E0B0021064181420000A0D0A0308FA0E10C00C18900320000A0E0A0508AC011001109003183220000A0B0A0308F5161028180520000A0F0A0508EB0F100110C00C18900320000A0C0A0308D80F109003186420000A0F0A0508CD13100110C00C18900320000A0D0A0308D30F10C00C18900320000A0B0A03088C011028180520000A0F0A0508B202100110801918C00C20000A0E0A0508880F1001109003183220000A0B0A030881051028180520000A0B0A0308DB091028180520000A0E0A0508DA041001109003183220000A0D0A0408441001109003183220000A0A0A02081E1028180520000A0E0A05088314100110A006186420000A0D0A0308A01010C00C18900320000A0E0A0508FF051001109003183220000A0E0A0508F607100110A006186420000A0F0A0608DDAE021001109003183220000A0B0A0308D3111064181420000A0E0A0508D70F100110A006186420000A0B0A0308FE0F1028180520000A0B0A0308DE151064181420000A0E0A0508F2051001109003183220000A0D0A03088E0410C00C18900320000A0B0A0308B6131028180520000A0C0A0408E9AB021028180520000A0B0A030881041064181420000A0E0A05089510100110A006186420000A0C0A0408B4AC021028180520000A0B0A0308FC101064181420000A0E0A0508C2161001109003183220000A0F0A0508C70F100110C00C18900320000A0D0A0308E80F10C00C18900320000A0F0A0508CA14100110801918C00C20000A0D0A0408C4AB02109003186420000A0E0A0508BF131001109003183220000A0C0A0408B2AD021028180520000A0B0A030890141064181420000A0F0A05089101100110C00C18900320000A0B0A03088F101064181420000A0E0A05089110100110A006186420000A0F0A05088E04100110801918C00C20000A0F0A0608B9AB02100110A006186420000A0C0A0408F6AE021028180520000A0F0A060887AC021001109003183220000A0E0A0508F5051001109003183220000A0B0A0308D7111064181420000A0B0A0308C6151064181420000A0E0A0508F30C1001109003183220000A0D0A0308A71510C00C18900320000A0E0A0508D20A1001109003183220000A0B0A0308DD0F1064181420000A0E0A0508C913100110A006186420000A0C0A0408F7AB021028180520000A0F0A0608D2AE021001109003183220000A0F0A0608D19102100110A006186420000A0E0A0508C7171001109003183220000A0F0A05088707100110C00C18900320000A0C0A03089304109003186420000A0C0A0408C1AB021028180520000A0F0A05089B14100110C00C18900320000A0D0A0308C20710C00C18900320000A0B0A0308F40F1028180520000A0B0A030884101028180520000A0C0A03088707109003186420000A0F0A0508F508100110C00C18900320000A0C0A04088DAD021028180520000A0F0A0608FAAA02100110A006186420000A0A0A0208221028180520000A0B0A0308F30F1028180520000A0E0A050888141001109003183220000A0F0A0608C1AB021001109003183220000A0C0A03089B14109003186420000A0B0A0308F20B1064181420000A0F0A0508BC15100110801918C00C20000A0C0A0308EB0F109003186420000A0E0A0508E711100110A006186420000A0B0A0308D70F1064181420000A0F0A0508FA06100110801918C00C20000A0E0A0508DD04100110A006186420000A0B0A030896681064181420000A0C0A0308AA06109003186420000A0B0A0308D1131028180520000A0E0A0508C813100110A006186420000A0F0A0508A204100110C00C18900320000A0C0A0408FAAC021028180520000A0B0A030888101064181420000A0D0A0308A51010C00C18900320000A0E0A0508DC021001109003183220000A0E0A050894101001109003183220000A0E0A0508C4161001109003183220000A0F0A0608C9B0021001109003183220000A0F0A060882AD021001109003183220000A0C0A040887AC021028180520000A0C0A03089002109003186420000A0F0A0508920F100110C00C18900320000A0B0A0308FA0D1064181420000A0E0A0508F113100110A006186420000A0B0A0308C0151028180520000A0E0A0508FE0F100110900318322000100522140A0C6D6573736167655F73697A65120418A9AE012A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, b)); + } + + @Override + public GetAccountInfoRequest getId() { + return CARD_VALUES; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java new file mode 100644 index 0000000..c5dfafc --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java @@ -0,0 +1,56 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CLIENT_OPTIONS; + +public class ClientOptions extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.ClientOptions clientOptions = Protocol.ClientOptions.newBuilder() + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(24) + .setAsInt32(3)) + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(1) + .setAsUint64(13514148956663808L)) + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(2) + .setAsUint64(549755813888L)) + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(20) + .setAsInt32(2)) + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(21) + .setAsInt32(1)) + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(8) + .setAsInt32(4)) + .addOptions(Protocol.ClientOption.newBuilder() + .setIndex(10) + .setAsInt32(1)) + .build(); + + Protocol.Notification n = generateNotification(241, clientOptions.toByteString(), clientOptions.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return CLIENT_OPTIONS; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java new file mode 100644 index 0000000..af728dd --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java @@ -0,0 +1,34 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.COLLECTION; + +public class Collection extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + // Protocol.Collection collection = Protocol.Collection.newBuilder().build(); + + Protocol.Notification n = generateEmptyNotification(207); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return COLLECTION; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java new file mode 100644 index 0000000..0371f2d --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java @@ -0,0 +1,85 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.DECK_LIST; + +public class DeckList extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.DeckList deckList = Protocol.DeckList.newBuilder() + .addDecks(Protocol.DeckInfo.newBuilder() + .setId(794851023L) + .setName("The Fuck") + .setCardBack(0) + .setHero(637) + .setDeckType(Protocol.DeckType.NORMAL_DECK) + .setValidity(767L) + .setHeroPremium(0) + .setCardBackOverride(false) + .setHeroOverride(false) + .setLastModified(1461490210L) + .setSortOrder(1461490210L) + .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_BASIC_DECK)) + .addDecks(Protocol.DeckInfo.newBuilder() + .setId(794938262L) + .setName("The Cock") + .setCardBack(0) + .setHero(31) + .setDeckType(Protocol.DeckType.NORMAL_DECK) + .setValidity(767L) + .setHeroPremium(0) + .setCardBackOverride(false) + .setHeroOverride(false) + .setLastModified(1461490581L) + .setSortOrder(1461490581L) + .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_BASIC_DECK)) + .addDecks(Protocol.DeckInfo.newBuilder() + .setId(172325L) + .setName("precon") + .setCardBack(0) + .setHero(31) + .setDeckType(Protocol.DeckType.PRECON_DECK) + .setValidity(31L) + .setHeroPremium(0) + .setCardBackOverride(false) + .setHeroOverride(false) + .setSortOrder(0L) + .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_UNKNOWN)) + .addDecks(Protocol.DeckInfo.newBuilder() + .setId(171593L) + .setName("precon") + .setCardBack(0) + .setHero(637) + .setDeckType(Protocol.DeckType.PRECON_DECK) + .setValidity(31L) + .setHeroPremium(0) + .setCardBackOverride(false) + .setHeroOverride(false) + .setSortOrder(0L) + .setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_UNKNOWN)) + .build(); + + Protocol.Notification n = generateNotification(202, deckList.toByteString(), deckList.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return DECK_LIST; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java new file mode 100644 index 0000000..994afe8 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java @@ -0,0 +1,37 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.ARCANE_DUST_BALANCE; + +public class DustBalance extends GenericParser { + + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.ArcaneDustBalance dustBalance = Protocol.ArcaneDustBalance.newBuilder() + .setBalance(665) + .build(); + + Protocol.Notification n = generateNotification(262, dustBalance.toByteString(), dustBalance.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return ARCANE_DUST_BALANCE; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java new file mode 100644 index 0000000..8375abf --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java @@ -0,0 +1,80 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.FAVORITE_HEROES; + +public class FavoriteHeroes extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.FavoriteHeroesResponse favoriteHeroesResponse = Protocol.FavoriteHeroesResponse.newBuilder() + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(2) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(274) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(3) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(31) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(4) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(637) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(5) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(671) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(6) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(813) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(7) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(930) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(8) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(1066) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(9) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(893) + .setPremium(0))) + .addFavoriteHeroes(Protocol.FavoriteHero.newBuilder() + .setClassId(10) + .setHero(Protocol.CardDef.newBuilder() + .setAsset(7) + .setPremium(0))) + .build(); + + Protocol.Notification n = generateNotification(318, favoriteHeroesResponse.toByteString(), favoriteHeroesResponse.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return FAVORITE_HEROES; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java new file mode 100644 index 0000000..9e3c7e5 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java @@ -0,0 +1,47 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; +import lombok.extern.slf4j.Slf4j; +import org.reflections.Reflections; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@Slf4j +public class GeneralGenericParser { + + private Map parsers; + + public GeneralGenericParser() { + init(); + } + + private void init() { + this.parsers = new HashMap<>(); + Set> classes = new Reflections(this.getClass().getPackageName()).getSubTypesOf(GenericParser.class); + classes.forEach(c -> { + try { + var ci = c.getDeclaredConstructor().newInstance(); + this.parsers.put(ci.getId(), ci); + } catch (Exception e) { + log.error(e.getMessage()); + } + }); + } + + public void parseGenericRequest(int token, Protocol.UtilGenericRequest request, TcpConnection conn) { + GetAccountInfoRequest req = GetAccountInfoRequest.parseFromInt(request.getRequestSubId()); + if( !this.parsers.containsKey(req) ) { + log.warn("Unknown generic request: {}", req); + return; + } + try { + this.parsers.get(req).parseGenericRequest(token, conn); + } catch (Exception e) { + log.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GenericParser.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GenericParser.java new file mode 100644 index 0000000..5644a53 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GenericParser.java @@ -0,0 +1,20 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.reflect.AbstractParser; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; +import com.alterdekim.hearthhack.util.Util; +import lombok.NoArgsConstructor; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + + +@NoArgsConstructor +public abstract class GenericParser implements AbstractParser { + public abstract void parseGenericRequest(int token, TcpConnection conn) throws Exception; + + @Override + public abstract int getId(); +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java new file mode 100644 index 0000000..ab5c333 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java @@ -0,0 +1,39 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.GOLD_BALANCE; + +public class GoldBalance extends GenericParser{ + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder() + .setCap(999999) + .setBonusBalance(165) + .setCappedBalance(160) + .setCapWarning(2000) + .build(); + + byte[] b = generateNotification(278, gb.toByteString(), gb.getSerializedSize()).toByteArray(); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, b)); + } + + @Override + public GetAccountInfoRequest getId() { + return GOLD_BALANCE; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java new file mode 100644 index 0000000..1dd3d5c --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java @@ -0,0 +1,153 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.HERO_XP; + +public class HeroXP extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + + Protocol.HeroXP xp = Protocol.HeroXP.newBuilder() + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(2) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(823) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(3) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(437) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(4) + .setLevel(2) + .setCurrXp(12) + .setMaxXp(80) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(4) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(1084) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(5) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(847) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(6) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(1361) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(7) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(421) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(8) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(1171) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(9) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(982) + .setPremium(0)) + .setQuantity(2)) + )) + .addXpInfos(Protocol.HeroXPInfo.newBuilder() + .setClassId(10) + .setLevel(1) + .setCurrXp(0) + .setMaxXp(70) + .setNextReward(Protocol.NextHeroLevelReward.newBuilder() + .setLevel(2) + .setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder() + .setCard(Protocol.CardDef.newBuilder() + .setAsset(940) + .setPremium(0)) + .setQuantity(2)) + )) + .build(); + + Protocol.Notification n = generateNotification(283, xp.toByteString(), xp.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return HERO_XP; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java new file mode 100644 index 0000000..d0ea379 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java @@ -0,0 +1,55 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.MEDAL_INFO; + +public class MedalInfo extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.MedalInfo medalInfo = Protocol.MedalInfo.newBuilder() + .setWild(Protocol.MedalInfoData.newBuilder() + .setSeasonWins(0) + .setStars(0) + .setStreak(0) + .setStarLevel(1) + .setLevelStart(1) + .setLevelEnd(3) + .setCanLoseLevel(false) + .setBestStarLevel(1) + .setCanLoseStars(false)) + .setStandard(Protocol.MedalInfoData.newBuilder() + .setSeasonWins(0) + .setStars(0) + .setStreak(0) + .setStarLevel(1) + .setLevelStart(1) + .setLevelEnd(3) + .setCanLoseLevel(false) + .setBestStarLevel(1) + .setCanLoseStars(false)) + .build(); + + Protocol.Notification n = generateNotification(232, medalInfo.toByteString(), medalInfo.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return MEDAL_INFO; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java new file mode 100644 index 0000000..08728f9 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java @@ -0,0 +1,136 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOT_SO_MASSIVE_LOGIN; + +public class NotSoMassiveLoginReply extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.NotSoMassiveLoginReply reply = Protocol.NotSoMassiveLoginReply.newBuilder() + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("launch")) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("naxx_1") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("naxx_2") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("naxx_3") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("naxx_4") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("naxx_5") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("gvg_promote") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("gvg_begin") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("gvg_arena") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_1") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_2") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_3") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_4") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_5") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_pre_sale") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("brm_normal_sale") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("tgt_pre_sale") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("tgt_normal_sale") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("loe_1") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("loe_2") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("loe_3") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("loe_4") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("feast_of_winter_veil") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("set_rotation_2016") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("og_pre_purchase") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("og_normal_sale") + .setStart(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("apple_charity_promo_2016") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("naxx_gvg_real_money_sale") + .setStart(1) + .setEnd(0)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("set_rotation_2016_freepacks") + .setStart(0) + .setEnd(5059030)) + .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder() + .setEvent("set_rotation_2016_questline") + .setStart(0) + .setEnd(5059028)) + .setTavernBrawls(Protocol.TavernBrawlInfo.newBuilder() + .setNextStartSecondsFromNow(124398L)) + .build(); + + Protocol.Notification n = generateNotification(300, reply.toByteString(), reply.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return NOT_SO_MASSIVE_LOGIN; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java new file mode 100644 index 0000000..54b56ed --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java @@ -0,0 +1,59 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.PLAYER_RECORD; + +public class PlayerRecords extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.PlayerRecords playerRecords = Protocol.PlayerRecords.newBuilder() + .addRecords(Protocol.PlayerRecord.newBuilder() + .setType(Protocol.GameType.GT_VS_AI) + .setWins(1) + .setLosses(0)) + .addRecords(Protocol.PlayerRecord.newBuilder() + .setType(Protocol.GameType.GT_VS_AI) + .setData(637) + .setWins(1) + .setLosses(0)) + .addRecords(Protocol.PlayerRecord.newBuilder() + .setType(Protocol.GameType.GT_TUTORIAL) + .setWins(6) + .setLosses(1)) + .addRecords(Protocol.PlayerRecord.newBuilder() + .setType(Protocol.GameType.GT_TUTORIAL) + .setData(637) + .setWins(1) + .setLosses(0)) + .addRecords(Protocol.PlayerRecord.newBuilder() + .setType(Protocol.GameType.GT_TUTORIAL) + .setData(1325) + .setWins(5) + .setLosses(1)) + .build(); + + + Protocol.Notification n = generateNotification(270, playerRecords.toByteString(), playerRecords.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return PLAYER_RECORD; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java new file mode 100644 index 0000000..f266823 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java @@ -0,0 +1,33 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOTICES; + +public class ProfileNotices extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + // Protocol.ProfileNotices + Protocol.Notification n = generateEmptyNotification(212); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return NOTICES; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java new file mode 100644 index 0000000..524cbee --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java @@ -0,0 +1,37 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CAMPAIGN_INFO; + +public class ProfileProgress extends GenericParser { + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.ProfileProgress profileProgress = Protocol.ProfileProgress.newBuilder() + .setProgress(6) + .setBestForge(0) + .build(); + + Protocol.Notification n = generateNotification(233, profileProgress.toByteString(), profileProgress.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return CAMPAIGN_INFO; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java new file mode 100644 index 0000000..7ebf23c --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java @@ -0,0 +1,57 @@ +package com.alterdekim.hearthhack.component.processor.client.request.generic; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.GetAccountInfoRequest; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; +import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.REWARD_PROGRESS; + +public class RewardProgress extends GenericParser { + + @Override + public void parseGenericRequest(int token, TcpConnection conn) throws Exception { + Protocol.RewardProgress rewardProgress = Protocol.RewardProgress.newBuilder() + .setSeasonEnd(Protocol.Date.newBuilder() + .setYear(2016) + .setMonth(5) + .setDay(31) + .setHours(22) + .setMin(6) + .setSec(18)) + .setWinsPerGold(3) + .setGoldPerReward(10) + .setMaxGoldPerDay(100) + .setSeasonNumber(31) + .setXpSoloLimit(60) + .setMaxHeroLevel(60) + .setEventTimingMod(-0.08333333f) + .setNextQuestCancel(Protocol.Date.newBuilder() + .setYear(2016) + .setMonth(5) + .setDay(3) + .setHours(0) + .setMin(0) + .setSec(0)) + .build(); + + Protocol.Notification n = generateNotification(271, rewardProgress.toByteString(), rewardProgress.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); + } + + @Override + public GetAccountInfoRequest getId() { + return REWARD_PROGRESS; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/reflect/AbstractParser.java b/src/main/java/com/alterdekim/hearthhack/reflect/AbstractParser.java new file mode 100644 index 0000000..5dd9763 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/reflect/AbstractParser.java @@ -0,0 +1,5 @@ +package com.alterdekim.hearthhack.reflect; + +public interface AbstractParser { + int getId(); +} diff --git a/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java b/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java new file mode 100644 index 0000000..1ff7ae8 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java @@ -0,0 +1,28 @@ +package com.alterdekim.hearthhack.reflect; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.reflections.Reflections; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@Slf4j +public class ReflectionLoader { + @Getter + private Map parsers; + + public void initReflect(Class vClass) { + this.parsers = new HashMap<>(); + Set> processorClasses = new Reflections(this.getClass().getPackageName()).getSubTypesOf(vClass); + processorClasses.forEach(c -> { + try { + var ci = c.getDeclaredConstructor().newInstance(); + this.parsers.put(ci.getId(), ci); + } catch (Exception e) { + log.error(e.getMessage()); + } + }); + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/util/GameUtilities.java b/src/main/java/com/alterdekim/hearthhack/util/GameUtilities.java new file mode 100644 index 0000000..284b5ab --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/util/GameUtilities.java @@ -0,0 +1,64 @@ +package com.alterdekim.hearthhack.util; + +import com.alterdekim.Protocol; +import com.google.protobuf.ByteString; + +public class GameUtilities { + public static Protocol.Notification generateNotification(int message_type, ByteString bs, int size) { + return Protocol.Notification.newBuilder() + .setSenderId(Protocol.EntityId.newBuilder() + .setHigh(144115188075855872L) + .setLow(0)) + .setTargetId(Protocol.EntityId.newBuilder() + .setHigh(144115198130930503L) + .setLow(78330215)) + .setType("WTCG.UtilNotificationMessage") + .setSenderBattleTag("") + .setSenderAccountId(Protocol.EntityId.newBuilder() + .setHigh(72057594037927936L) + .setLow(0)) + .setTargetAccountId(Protocol.EntityId.newBuilder() + .setHigh(72057594037927936L) + .setLow(437154195)) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("message_type") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(message_type))) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("fragment_000") + .setValue(Protocol.Variant.newBuilder() + .setBlobValue(bs))) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("message_size") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(size))) + .build(); + } + + public static Protocol.Notification generateEmptyNotification(int message_type) { + return Protocol.Notification.newBuilder() + .setSenderId(Protocol.EntityId.newBuilder() + .setHigh(144115188075855872L) + .setLow(0)) + .setTargetId(Protocol.EntityId.newBuilder() + .setHigh(144115198130930503L) + .setLow(78330215)) + .setType("WTCG.UtilNotificationMessage") + .setSenderBattleTag("") + .setSenderAccountId(Protocol.EntityId.newBuilder() + .setHigh(72057594037927936L) + .setLow(0)) + .setTargetAccountId(Protocol.EntityId.newBuilder() + .setHigh(72057594037927936L) + .setLow(437154195)) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("message_type") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(message_type))) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("message_size") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(0))) + .build(); + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/util/Util.java b/src/main/java/com/alterdekim/hearthhack/util/Util.java index 40176e8..9799b49 100644 --- a/src/main/java/com/alterdekim/hearthhack/util/Util.java +++ b/src/main/java/com/alterdekim/hearthhack/util/Util.java @@ -138,11 +138,13 @@ public class Util { return s.length() % 2 == 0 ? s : "0" + s; } - public static void setTimeout(Runnable runnable, int delay) { + public static void setInterval(Runnable runnable, int interval) { new Thread(() -> { try { - Thread.sleep(delay); - runnable.run(); + while(true) { + Thread.sleep(interval); + runnable.run(); + } } catch (Exception e){ log.error(e.getMessage()); }