From 9006c0c3cd22a0ee837400aae5d3f0fa6a7e30e8 Mon Sep 17 00:00:00 2001 From: alterdekim <alterwain@protonmail.com> Date: Sun, 9 Jun 2024 03:01:10 +0300 Subject: [PATCH] DBF parsers --- pom.xml | 10 +- src/main/java/com/alterdekim/Main.java | 36 ------- src/main/java/com/alterdekim/db/Database.java | 35 ------ .../hearthhack/component/TcpConnection.java | 8 ++ .../hearthhack/component/TcpServer.java | 11 +- .../processor/GameUtilitiesProcessor.java | 6 +- .../request/generic/AccountLicensesInfo.java | 6 ++ .../request/generic/AvailableFeatures.java | 8 ++ .../client/request/generic/Boosters.java | 10 ++ .../client/request/generic/CardBacks.java | 10 ++ .../client/request/generic/CardValues.java | 61 +++++++++-- .../client/request/generic/ClientOptions.java | 10 ++ .../client/request/generic/Collection.java | 16 ++- .../client/request/generic/DeckList.java | 13 +++ .../client/request/generic/DustBalance.java | 12 +++ .../request/generic/FavoriteHeroes.java | 13 +++ .../request/generic/GeneralGenericParser.java | 4 +- .../client/request/generic/GenericParser.java | 5 + .../client/request/generic/GoldBalance.java | 15 ++- .../client/request/generic/HeroXP.java | 13 +++ .../client/request/generic/MedalInfo.java | 13 +++ .../generic/NotSoMassiveLoginReply.java | 13 +++ .../client/request/generic/PlayQueue.java | 13 +++ .../client/request/generic/PlayerRecords.java | 13 +++ .../request/generic/ProfileNotices.java | 11 ++ .../request/generic/ProfileProgress.java | 13 +++ .../request/generic/RewardProgress.java | 12 +++ .../hearthhack/config/ServerConfig.java | 11 ++ .../alterdekim/hearthhack/dbf/CardsDBF.java | 17 +++ .../alterdekim/hearthhack/dbf/DBFCard.java | 14 +++ .../alterdekim/hearthhack/dbf/DBFColumn.java | 13 +++ .../alterdekim/hearthhack/dbf/DBFField.java | 13 +++ .../hearthhack/entity/CardBack.java | 22 ++++ .../alterdekim/hearthhack/entity/Deck.java | 53 +++++++++ .../alterdekim/hearthhack/entity/User.java | 8 ++ .../hearthhack/entity/UserCard.java | 29 +++++ .../hearthhack/parser/DBFParser.java | 101 ++++++++++++++++++ .../hearthhack/service/IService.java | 4 + .../hearthhack/service/RoomPlayerService.java | 2 +- .../hearthhack/service/RoomService.java | 2 +- .../hearthhack/service/UserService.java | 2 +- .../alterdekim/hearthhack/xml/XmlElement.java | 16 +++ .../alterdekim/hearthhack/xml/XmlType.java | 9 ++ 43 files changed, 610 insertions(+), 96 deletions(-) delete mode 100644 src/main/java/com/alterdekim/Main.java delete mode 100644 src/main/java/com/alterdekim/db/Database.java create mode 100644 src/main/java/com/alterdekim/hearthhack/config/ServerConfig.java create mode 100644 src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java create mode 100644 src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java create mode 100644 src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java create mode 100644 src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java create mode 100644 src/main/java/com/alterdekim/hearthhack/entity/CardBack.java create mode 100644 src/main/java/com/alterdekim/hearthhack/entity/Deck.java create mode 100644 src/main/java/com/alterdekim/hearthhack/entity/UserCard.java create mode 100644 src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java create mode 100644 src/main/java/com/alterdekim/hearthhack/service/IService.java create mode 100644 src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java create mode 100644 src/main/java/com/alterdekim/hearthhack/xml/XmlType.java diff --git a/pom.xml b/pom.xml index 3f6d824..7e65d99 100644 --- a/pom.xml +++ b/pom.xml @@ -42,11 +42,6 @@ <artifactId>protobuf-java-util</artifactId> <version>3.24.4</version> </dependency> - <!--<dependency> - <groupId>org.ektorp</groupId> - <artifactId>org.ektorp</artifactId> - <version>1.5.0</version> - </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> @@ -90,6 +85,11 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> + <dependency> + <groupId>org.luaj</groupId> + <artifactId>luaj-jse</artifactId> + <version>3.0.1</version> + </dependency> </dependencies> <build> diff --git a/src/main/java/com/alterdekim/Main.java b/src/main/java/com/alterdekim/Main.java deleted file mode 100644 index 91b2a75..0000000 --- a/src/main/java/com/alterdekim/Main.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.alterdekim; - -import lombok.extern.slf4j.Slf4j; - - -@Slf4j -public class Main { - - // public static void main(String[] args) { - // new Server(1119).startListening(); - /* System.out.println(Util.bytesToHex(exampleProtocol.Test.newBuilder() - .setA(9999) - .setB("testing") - .setC(7777) - .build().toByteArray()));*/ - - /* Scanner scanner = new Scanner(System.in); - String s = ""; - while ((s = scanner.nextLine()) != null) { - try { - byte[] arr = Util.hexStringToByteArray(s); - int offset = 0; - while (offset < arr.length) { - BattleNetPacket bp = new BattleNetPacket(); - offset += bp.Decode(arr, offset, arr.length); - log.warn(offset + " " + arr.length); - log.info(bp.getHeader().toString()); - log.info("Body.Length = " + bp.getBody().length); - log.info(Util.bytesToHex(bp.getBody())); - } - } catch (Exception e) { - e.printStackTrace(); - } - }*/ - // } -} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/db/Database.java b/src/main/java/com/alterdekim/db/Database.java deleted file mode 100644 index 79a05dd..0000000 --- a/src/main/java/com/alterdekim/db/Database.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.alterdekim.db; - -public class Database { - - //private CouchDbConnector lobbyConnector; - - private String host; - private int port; - private String lobby_name; - - public Database( String host, int port, String lobby_name ) { - this.host = host; - this.port = port; - this.lobby_name = lobby_name; - } - - public void start() throws Exception { - /* HttpClient httpClient = new StdHttpClient.Builder() - .url("http://"+host+":"+port) - .username("admin") - .password("") - .build(); - CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient); - - CouchDbConnector db = new StdCouchDbConnector(lobby_name, dbInstance); - db.createDatabaseIfNotExists(); - - this.lobbyConnector = db; - - DesignDocument dd = new DesignDocument("test"); - - db.create(dd);*/ - - } -} diff --git a/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java b/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java index 33f8531..dc6d1e1 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java +++ b/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java @@ -1,6 +1,8 @@ package com.alterdekim.hearthhack.component; import com.alterdekim.hearthhack.component.processor.*; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.Util; import lombok.Getter; @@ -26,6 +28,12 @@ public class TcpConnection extends Thread { @Getter private final Map<Integer, Processor> processors; + @Getter + private final ServerConfig serverConfig; + + @Getter + private final UserService userService; + public void stopListeningAndDisconnect() { log.warn("Tried to stopListening"); } diff --git a/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java b/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java index 5a74283..3a08c92 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java +++ b/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java @@ -2,9 +2,12 @@ package com.alterdekim.hearthhack.component; import com.alterdekim.hearthhack.component.processor.Processor; +import com.alterdekim.hearthhack.config.ServerConfig; import com.alterdekim.hearthhack.reflect.ReflectionLoader; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.Util; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -24,6 +27,12 @@ public class TcpServer extends ReflectionLoader<Processor> { private SSLServerSocket serverSocket; private List<TcpConnection> connections; + @Autowired + private ServerConfig serverConfig; + + @Autowired + private UserService userService; + @Scheduled(fixedDelay = 5000) private void start() { try { @@ -42,7 +51,7 @@ public class TcpServer extends ReflectionLoader<Processor> { while(true) { SSLSocket s = (SSLSocket) serverSocket.accept(); - TcpConnection c = new TcpConnection(s, this.getParsers()); + TcpConnection c = new TcpConnection(s, this.getParsers(), serverConfig, userService); connections.add(c); c.start(); log.info("New Connection Established From {}", s.getInetAddress().toString()); 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 c05c630..3551d01 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java @@ -121,13 +121,9 @@ public class GameUtilitiesProcessor extends Processor { } if( packet.getHeader().getToken() == 28 ) { - Protocol.Header header = Processor.generateResponse(0, packet.getHeader().getToken(), 0, 0); - - // conn.send(new BattleNetPacket(header, new byte[0])); - byte[] b = Util.hexStringToByteArray("1252AA064F0A12094743545702000002116739AB040000000012190A170A0A08CE840110021809200012091884B6DAFCCEBDCC02121E0A1C0A0A08CE8401100218082000120E3A0C0D4743545715746174731804"); - header = Protocol.Header.newBuilder() + Protocol.Header header = Protocol.Header.newBuilder() .setServiceId(5) .setMethodId(6) .setToken(conn.nextToken()) 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 index 2402301..85afb80 100644 --- 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 @@ -2,6 +2,8 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +11,10 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotifica import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.ACCOUNT_LICENSES; public class AccountLicensesInfo extends GenericParser { + + @Override + public void setResources(IService service, ServerConfig config) {} + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { // Protocol.AccountLicensesInfoResponse 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 index a60e395..977ddc3 100644 --- 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 @@ -2,6 +2,8 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; @@ -14,6 +16,7 @@ import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.FEATURES; @Slf4j public class AvailableFeatures extends GenericParser { + private ServerConfig config; private Executor executor; private void executeFeatures(TcpConnection conn) throws Exception { @@ -36,6 +39,11 @@ public class AvailableFeatures extends GenericParser { conn.send(new BattleNetPacket(header, n.toByteArray())); } + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { if( this.executor != null ) this.executor.setRunning(false); 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 index 8d689bc..7ceb49f 100644 --- 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 @@ -2,6 +2,8 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -10,6 +12,14 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.BOOSTERS; public class Boosters extends GenericParser { + + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.BoosterList boosterList = Protocol.BoosterList.newBuilder() 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 index 31189f2..50f06f8 100644 --- 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 @@ -2,6 +2,8 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +11,14 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CARD_BACKS; public class CardBacks extends GenericParser { + + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.CardBacks cardBacks = Protocol.CardBacks.newBuilder() 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 index 8d42fd0..5d02427 100644 --- 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 @@ -2,22 +2,67 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.dbf.CardsDBF; +import com.alterdekim.hearthhack.dbf.DBFField; +import com.alterdekim.hearthhack.parser.DBFParser; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; import com.alterdekim.hearthhack.util.Util; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CARD_VALUES; +@Slf4j public class CardValues extends GenericParser { + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { - // Protocol.CardValues cardVals = Protocol.CardValues.newBuilder().build(); + CardsDBF cards = DBFParser.parseCards(config.getDbfPath()); + log.info("CardsDBF: {}", cards); + Protocol.CardValues.Builder cardVals = Protocol.CardValues.newBuilder(); - //Protocol.Notification n = generateNotification(260, medalInfo.toByteString(), medalInfo.getSerializedSize()); + cards.getRecords().forEach(c -> { + List<DBFField> fields = c.getFields(); + if( !fields.stream().filter(p -> p.getColumn().equals("IS_COLLECTIBLE")).findFirst().get().getVal().equals("True") ) return; + cardVals.addCards(Protocol.CardValue.newBuilder() + .setCard( + Protocol.CardDef.newBuilder() + .setAsset( + Integer.parseInt( + fields.stream() + .filter(p -> p.getColumn().equals("ID")) + .findFirst() + .get() + .getVal() + ) + ) + .setPremium(1) + .build() + ) + .setBuy(400) + .setSell(100) + .setNerfed(false)); + }); - /* Protocol.Header header = Protocol.Header.newBuilder() + Protocol.CardValues vals = cardVals.setCardNerfIndex(5).build(); + + Protocol.Notification n = generateNotification(260, vals.toByteString(), vals.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() .setServiceId(4) .setMethodId(1) .setToken(conn.nextToken()) @@ -26,20 +71,20 @@ public class CardValues extends GenericParser { .setStatus(0) .build(); - conn.send(new BattleNetPacket(header, n.toByteArray()));*/ + conn.send(new BattleNetPacket(header, n.toByteArray())); - byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318840222BFAE010A0C667261676D656E745F30303012ADAE0132A9AE010A0B0A0308A2021028182820010A0F0A0508A202100110900318900320010A0D0A0308F90C10900318900320010A0F0A0508F90C100110C00C18C00C20010A0D0A0308ED0310900318900320010A0F0A0508ED03100110C00C18C00C20010A0B0A0308D9041064186420010A0F0A0508D904100110A00618A00620010A0D0A0308980710900318900320010A0F0A05089807100110C00C18C00C20010A0B0A0308B1081064186420010A0F0A0508B108100110A00618A00620010A0B0A030892051028182820010A0F0A05089205100110900318900320010A0B0A0308F7061064186420010A0F0A0508F706100110A00618A00620010A0B0A0308D2031064186420010A0F0A0508D203100110A00618A00620010A0D0A0308DC0A10900318900320010A0F0A0508DC0A100110C00C18C00C20010A0B0A0308A8081064186420010A0F0A0508A808100110A00618A00620010A0B0A0308DF161028180520000A0E0A0508B4051001109003183220000A0C0A0408BEAE021064181420000A0E0A0508FF03100110A006186420000A0D0A0308B80810C00C18900320000A0B0A0308AE061028180520000A0C0A0408F9AC021028180520000A0E0A0508C613100110A006186420000A0C0A04088AAD021028180520000A0E0A0508E5131001109003183220000A0B0A0308F7041064181420000A0E0A050888071001109003183220000A0E0A0508FB131001109003183220000A0B0A0308E2061028180520000A0D0A0308FA0610C00C18900320000A0E0A0508E1041001109003183220000A0D0A0408FDAF02109003186420000A0E0A0508A8031001109003183220000A0B0A0308F1131064181420000A0E0A0508C104100110A006186420000A0D0A0308FB1410C00C18900320000A0B0A0308F10F1028180520000A0B0A0308C4051064181420000A0E0A0508D50A100110A006186420000A0E0A040820100110801918C00C20000A0B0A0308F9111028180520000A0E0A0508BA131001109003183220000A0D0A0408D3AA02109003186420000A0F0A0608F5AC021001109003183220000A0B0A0308AC011028180520000A0B0A030890031028180520000A0C0A040880AD021064181420000A0E0A0508900F1001109003183220000A0E0A0508DB0F1001109003183220000A0C0A0408FDAE021028180520000A0F0A0508D513100110C00C18900320000A0B0A0308D2131028180520000A0C0A0308CD13109003186420000A0E0A0508A406100110A006186420000A0E0A05089347100110A006186420000A0B0A0308F6081028180520000A0B0A03089E011064181420000A0B0A0308E30F1028180520000A0B0A030888141028180520000A0B0A0308DC061028180520000A100A0608C2AE02100110801918C00C20000A0F0A0608F9AB02100110A006186420000A0F0A0608F9AC021001109003183220000A0E0A0508B906100110A006186420000A100A0608E9AC02100110801918C00C20000A0C0A03088305109003186420000A0B0A0308AF101028180520000A100A060886B102100110801918C00C20000A0C0A0308C10F109003186420000A0B0A0308900F1028180520000A0B0A030895141064181420000A0B0A0308EC051064181420000A0C0A0408DBAF021064181420000A0E0A05089E01100110A006186420000A0F0A0508E115100110C00C18900320000A0D0A0308F80C10C00C18900320000A0B0A03088D031028180520000A0F0A0508A110100110801918C00C20000A0E0A04084B100110C00C18900320000A0B0A030897101028180520000A0B0A0308FB051064181420000A0E0A0508DF02100110A006186420000A0C0A03089D10109003186420000A0E0A040824100110801918C00C20000A0F0A0608E2AF021001109003183220000A0E0A0508A414100110A006186420000A0D0A040856100110A006186420000A0B0A03088E051064181420000A0E0A0508C414100110A006186420000A0E0A0508B303100110A006186420000A0B0A0308900E1028180520000A0F0A05089B03100110801918C00C20000A0B0A0308E2071028180520000A0D0A04088DAE02109003186420000A0E0A0408EFAF0210C00C18900320000A0E0A0508E913100110A006186420000A100A060883AC02100110801918C00C20000A0F0A0608F6AE021001109003183220000A0E0A0508D9131001109003183220000A0E0A0508CB141001109003183220000A0A0A0208711064181420000A0B0A0308D9071028180520000A0F0A0608D9AE02100110A006186420000A0B0A0308F7111064181420000A0F0A0508D706100110801918C00C20000A0E0A05088104100110A006186420000A0C0A040885AD021028180520000A0E0A05089E02100110A006186420000A0B0A030880101028180520000A0E0A05089301100110A006186420000A0F0A0508DB06100110C00C18900320000A0B0A0308980D1064181420000A0F0A060888AC021001109003183220000A0F0A05088305100110C00C18900320000A0B0A0308FD111064181420000A0F0A0508D80F100110C00C18900320000A0E0A05088A03100110A006186420000A0E0A05088F141001109003183220000A0E0A0408A8AB0210C00C18900320000A0B0A0308CC081064181420000A0E0A0508E7161001109003183220000A0F0A0508E002100110C00C18900320000A0F0A0508EF08100110801918C00C20000A0B0A0308F8021028180520000A0E0A0508F60F1001109003183220000A0C0A040889AC021028180520000A0F0A0508A210100110801918C00C20000A0C0A040891AD021064181420000A0B0A0308DC0F1028180520000A0E0A0508B111100110A006186420000A0F0A05089417100110801918C00C20000A100A0608FEAF02100110801918C00C20000A0F0A05089C10100110C00C18900320000A0E0A0508D5161001109003183220000A0D0A04083D1001109003183220000A0F0A0508E10F100110801918C00C20000A0D0A0408C0AF02109003186420000A0D0A0308F60210C00C18900320000A0B0A030897061064181420000A0E0A05088601100110A006186420000A0C0A03088A01109003186420000A0E0A0508B6131001109003183220000A0E0A0508ED01100110A006186420000A0C0A0408A1AC021064181420000A0E0A0508FA0F100110A006186420000A0E0A05089D151001109003183220000A0E0A050882051001109003183220000A0D0A040871100110A006186420000A0F0A06088DAF021001109003183220000A0B0A03088D0F1064181420000A0C0A04089AAC021028180520000A0B0A0308C5081028180520000A0C0A0308B911109003186420000A0E0A0508E103100110A006186420000A0D0A0308DA0F10C00C18900320000A0C0A0408A9AF021028180520000A0B0A0308B8031064181420000A0B0A030899141064181420000A0F0A0608DBAF02100110A006186420000A0C0A0308B206109003186420000A0F0A0608DDAD02100110A006186420000A0B0A030899021064181420000A100A06089FB002100110801918C00C20000A0B0A0308BA011028180520000A0C0A0308B413109003186420000A0D0A03089A1410C00C18900320000A0C0A0308ED08109003186420000A0E0A0408E0AC0210C00C18900320000A0E0A0508B514100110A006186420000A0C0A040883AD021028180520000A0D0A0308E10F10C00C18900320000A0D0A04088DAC02109003186420000A0A0A0208251064181420000A0E0A05089014100110A006186420000A0F0A060893AD02100110A006186420000A0E0A0508B76C1001109003183220000A0E0A0508C9011001109003183220000A0E0A0508EC111001109003183220000A0E0A0508F405100110A006186420000A0B0A0308DD081064181420000A0B0A0308B3131064181420000A100A0608D9AF02100110C00C18900320000A0E0A0508BF141001109003183220000A0E0A0508FB0C1001109003183220000A0B0A020817109003186420000A0F0A0508BD13100110C00C18900320000A0C0A0308A204109003186420000A0E0A0508DC061001109003183220000A0B0A0308CB141028180520000A0B0A0308C4151064181420000A0F0A05088614100110C00C18900320000A0F0A0608B8AC02100110A006186420000A0D0A0308EC1510C00C18900320000A0C0A0308D013109003186420000A0E0A0508DE05100110A006186420000A0E0A0508FF0F1001109003183220000A0F0A0608F7AA021001109003183220000A0B0A0308C9041028180520000A0E0A0508F90E1001109003183220000A0F0A06089AAC021001109003183220000A0E0A0508C1161001109003183220000A0C0A0308D204109003186420000A0B0A030897151028180520000A0E0A0508F7031001109003183220000A0F0A0608E9AB021001109003183220000A0B0A0308BF161028180520000A0E0A0408E6AE0210C00C18900320000A0B0A0308CE061028180520000A0E0A0508C911100110A006186420000A0F0A0508D10F100110C00C18900320000A0B0A030890101028180520000A0F0A0608CEB102100110A006186420000A0F0A0508BA11100110C00C18900320000A0B0A0308D9151064181420000A0B0A0308C4161028180520000A0B0A0308CB051064181420000A0B0A030881101028180520000A0D0A0308C31610C00C18900320000A0E0A05088C0F1001109003183220000A0B0A0308ED091064181420000A0E0A0508C903100110A006186420000A0B0A0308DF151028180520000A0C0A0308EE02109003186420000A0E0A0508E90F1001109003183220000A0E0A0508F946100110A006186420000A0B0A0308E6161028180520000A0E0A0508C314100110A006186420000A0F0A0508B206100110C00C18900320000A100A0608A2AC02100110C00C18900320000A0F0A0508C20E100110C00C18900320000A0F0A0508EC15100110801918C00C20000A0E0A0508920E1001109003183220000A0C0A0408FEAE021028180520000A0F0A0508C50F100110C00C18900320000A0E0A0508BF17100110A006186420000A0B0A0308FF051028180520000A0E0A0508BF161001109003183220000A0E0A0508C80F100110A006186420000A0E0A0508F6061001109003183220000A0C0A03088609109003186420000A0E0A0508F704100110A006186420000A0F0A0508A810100110801918C00C20000A0F0A060886B002100110A006186420000A0E0A050892101001109003183220000A0E0A040809100110801918C00C20000A0B0A0308AD151064181420000A0B0A0308DB031064181420000A0E0A05088508100110A006186420000A0B0A0308B5141064181420000A0B0A0308C8161028180520000A0C0A0308BE0F109003186420000A0B0A030882121028180520000A0B0A0308F7051064181420000A0D0A0308C80310C00C18900320000A0F0A0508F013100110C00C18900320000A0E0A050897011001109003183220000A0E0A0508F4111001109003183220000A0B0A0308F60E1028180520000A0E0A0508D216100110A006186420000A0F0A0508D202100110801918C00C20000A0E0A0508E60F1001109003183220000A0B0A0308C4061028180520000A0C0A0308CE13109003186420000A0F0A0608DAB0021001109003183220000A0C0A0308CF14109003186420000A0B0A0308F6061028180520000A0B0A0308B4051028180520000A0B0A0308D20F1064181420000A0F0A0608B2AD021001109003183220000A0B0A030880041028180520000A0E0A05088A10100110A006186420000A0B0A0308C2081028180520000A0C0A0408B1B0021028180520000A0F0A060883AD021001109003183220000A100A0608A7AD02100110C00C18900320000A0B0A0308CE161028180520000A0E0A050885101001109003183220000A0B0A0308EB131028180520000A0C0A0308C814109003186420000A0E0A0508EE13100110A006186420000A0B0A0308F0111028180520000A0E0A05088910100110A006186420000A0F0A0508CB15100110C00C18900320000A0E0A05088E10100110A006186420000A0B0A0308880E1028180520000A0E0A050880041001109003183220000A0E0A0508C4061001109003183220000A0E0A0508AE031001109003183220000A0B0A0308AE031028180520000A0E0A0508D307100110A006186420000A0E0A0508C2151001109003183220000A0B0A03089A041028180520000A0B0A0308D3071064181420000A0A0A02082D1028180520000A0E0A0508B3011001109003183220000A0E0A05088B141001109003183220000A0D0A0408BDAC02109003186420000A0E0A0508FA051001109003183220000A0E0A05088B10100110A006186420000A0E0A0508CF131001109003183220000A0E0A0508F40F1001109003183220000A0C0A04088CAC021064181420000A0B0A0308A0151064181420000A0E0A0508C415100110A006186420000A0C0A0308C50F109003186420000A0F0A0508B90D100110801918C00C20000A0A0A02085F1064181420000A0E0A0508FD021001109003183220000A0D0A04081E1001109003183220000A0C0A03089609109003186420000A100A06088AB002100110801918C00C20000A0D0A03089D0D10C00C18900320000A0C0A0408B6AC021064181420000A0E0A0508CC161001109003183220000A0F0A05088609100110C00C18900320000A0E0A0508F80F100110A006186420000A0C0A04088BAF021064181420000A0E0A050893141001109003183220000A0B0A0308E90F1028180520000A0F0A0508CE0F100110C00C18900320000A0F0A0608D0AF021001109003183220000A0B0A0308E3111064181420000A0E0A0508A9151001109003183220000A0D0A0408DCAF02109003186420000A0E0A0508D3161001109003183220000A0C0A0408DDAD021064181420000A100A0608C4AB02100110C00C18900320000A0F0A0608F6AA021001109003183220000A0C0A040893AD021064181420000A0E0A0508DF141001109003183220000A0E0A0408CFB10210C00C18900320000A0F0A0608F1AF02100110A006186420000A0E0A0508F00F1001109003183220000A0E0A0408C9AF0210C00C18900320000A0C0A0408F2AF021028180520000A0D0A0308B40310C00C18900320000A0D0A0308841710C00C18900320000A0E0A0508D2131001109003183220000A0E0A0508810E100110A006186420000A0E0A0508FD051001109003183220000A0E0A0508AB021001109003183220000A0F0A0508A615100110C00C18900320000A0E0A0508F90F1001109003183220000A0F0A060886AD021001109003183220000A0F0A0508C001100110C00C18900320000A0E0A0508BE161001109003183220000A0F0A0508A010100110801918C00C20000A0B0A0308C9131064181420000A0E0A050896141001109003183220000A0C0A02080910C00C18900320000A0E0A0508F50F1001109003183220000A0F0A0508C803100110801918C00C20000A0E0A0508E4131001109003183220000A0B0A0308EE0F1064181420000A0D0A0308930F10C00C18900320000A0F0A05089F10100110801918C00C20000A0C0A0308DE14109003186420000A0E0A0508BB161001109003183220000A0B0A0308B7171064181420000A0D0A0308D61110C00C18900320000A0F0A0608F2AF021001109003183220000A0F0A0508AF04100110801918C00C20000A0B0A030895031028180520000A0B0A03088E171064181420000A0D0A0308BA0410C00C18900320000A0E0A0508D1131001109003183220000A0C0A0308A805109003186420000A0F0A05088F06100110C00C18900320000A0B0A0308F9031028180520000A0F0A05088005100110801918C00C20000A0C0A0408F9B0021028180520000A0B0A0308E4151064181420000A0E0A050883091001109003183220000A0E0A0508A015100110A006186420000A0F0A05088710100110C00C18900320000A0C0A0408BBAF021028180520000A0F0A05089007100110801918C00C20000A0C0A040882AD021028180520000A0E0A0508C5081001109003183220000A0E0A0508C1131001109003183220000A0F0A0508B911100110C00C18900320000A0B0A0308DF141028180520000A0E0A050899071001109003183220000A0B0A0308D5161028180520000A0B0A03088C0E1028180520000A0F0A0608B0B002100110A006186420000A0A0A0208161028180520000A0E0A05088C10100110A006186420000A0F0A06088CAC02100110A006186420000A0E0A0508F70F1001109003183220000A0B0A030887041028180520000A0F0A0508ED08100110C00C18900320000A0F0A0508C703100110C00C18900320000A0E0A0508CE061001109003183220000A0B0A03088C101064181420000A0F0A0508A610100110801918C00C20000A0B0A03088D081064181420000A0C0A0308DE16109003186420000A0F0A0508F602100110801918C00C20000A0B0A0308DD041064181420000A0B0A0308ED041028180520000A0E0A0508A2141001109003183220000A0B0A03088F141028180520000A0F0A0508D30F100110801918C00C20000A0E0A0508B717100110A006186420000A0E0A0508C50E1001109003183220000A0A0A02080C1064181420000A0B0A0308C3131028180520000A0E0A0508E006100110A006186420000A0B0A0308BF141028180520000A0B0A0308B76C1028180520000A0B0A030883141064181420000A0B0A03088F091064181420000A100A0608C7AE02100110C00C18900320000A0E0A0508F711100110A006186420000A0B0A0308D2111028180520000A0B0A03088A101064181420000A0A0A0208441028180520000A0E0A05089F031001109003183220000A0E0A0508F70C100110A006186420000A0B0A0308CC161028180520000A0C0A04088F9A021064181420000A0E0A0508B2141001109003183220000A0F0A0508A209100110801918C00C20000A0B0A0308FF031064181420000A0D0A0308840E10C00C18900320000A0B0A0308F20F1064181420000A0B0A030880071064181420000A0E0A0508EE111001109003183220000A0C0A0308E40F109003186420000A0B0A0308DC021028180520000A0D0A0308C20610C00C18900320000A0B0A0308CE031028180520000A0E0A0508DA131001109003183220000A0E0A0508C4131001109003183220000A0E0A0508F9111001109003183220000A0D0A0308A21010C00C18900320000A0E0A0508F0111001109003183220000A0E0A05088F10100110A006186420000A0E0A0508D9071001109003183220000A0B0A0308D4041064181420000A0E0A0508E9011001109003183220000A0B0A030887031064181420000A0E0A05089902100110A006186420000A0F0A0608FEAE021001109003183220000A0C0A03088710109003186420000A0D0A0308D71310C00C18900320000A0B0A0308A4071064181420000A0E0A0508D5031001109003183220000A0B0A0308E50F1064181420000A0F0A0508A614100110C00C18900320000A0E0A0508DE071001109003183220000A0E0A0508CE031001109003183220000A0C0A0408F5AC021028180520000A0C0A0408D4AF021028180520000A0F0A0508FB0E100110801918C00C20000A0C0A0308E915109003186420000A0F0A0508E20F100110C00C18900320000A0F0A0508C814100110C00C18900320000A0E0A0508C40E1001109003183220000A0B0A0308E8011028180520000A0B0A0308FD051028180520000A0E0A05089706100110A006186420000A0E0A0508DF151001109003183220000A0B0A03089F031028180520000A0E0A0408C0AC0210C00C18900320000A0C0A0308D613109003186420000A0E0A0508AD15100110A006186420000A0B0A03088E0E1028180520000A0F0A05088914100110C00C18900320000A0F0A0508A315100110C00C18900320000A0E0A05089310100110A006186420000A0B0A03088B141028180520000A0E0A05088C011001109003183220000A0E0A0508D404100110A006186420000A0C0A02082010C00C18900320000A0E0A0508D1111001109003183220000A0E0A0508AE10100110A006186420000A0C0A0408CEB1021064181420000A0D0A03088B0F10C00C18900320000A0F0A0508A515100110801918C00C20000A0E0A050884101001109003183220000A100A0608B1AF02100110C00C18900320000A0E0A0508C405100110A006186420000A0B0A030893011064181420000A0D0A0308890610C00C18900320000A0B0A030888071028180520000A0E0A0508A705100110A006186420000A0E0A040886B10210C00C18900320000A0B0A030892101028180520000A0E0A0508870E100110A006186420000A0E0A0508D40A1001109003183220000A0C0A0308A615109003186420000A0B0A0308CF161028180520000A0D0A0308A31010C00C18900320000A0C0A0308F508109003186420000A0F0A0508B914100110C00C18900320000A0B0A0308D4051028180520000A0B0A0308B9061064181420000A0E0A0508E507100110A006186420000A0E0A0508E30F1001109003183220000A0E0A0508E20C100110A006186420000A0E0A0508E9121001109003183220000A0C0A0308B702109003186420000A0E0A0508C9041001109003183220000A0B0A0308D8141064181420000A0B0A0308CD161028180520000A100A0608BDAC02100110C00C18900320000A0B0A030895101064181420000A0C0A0408A0AB021064181420000A0E0A05089A021001109003183220000A0E0A0508AE061001109003183220000A0B0A0308DB0A1064181420000A0E0A050890101001109003183220000A0D0A0308FB0810C00C18900320000A0B0A0308CD151028180520000A0B0A0308C3141064181420000A0B0A0308E1031064181420000A0B0A03088D101064181420000A0C0A0308E115109003186420000A0D0A0308D20210C00C18900320000A0C0A0308D10F109003186420000A0E0A05089914100110A006186420000A0E0A0508F20B100110A006186420000A0C0A0408C5AE021028180520000A0B0A030885041064181420000A0B0A0308EA0F1028180520000A0B0A0308AD101028180520000A100A0608A0B002100110801918C00C20000A100A0608E0AC02100110801918C00C20000A0D0A03089F1010C00C18900320000A0B0A0308E8121028180520000A0C0A03089810109003186420000A100A0608D3AE02100110801918C00C20000A0C0A03089A10109003186420000A0E0A050894141001109003183220000A0B0A0308C3011028180520000A0F0A0608CEAE02100110A006186420000A0B0A03089A021028180520000A0B0A030885081064181420000A0F0A05088A01100110C00C18900320000A0B0A0308D2141028180520000A0E0A05088703100110A006186420000A0C0A0408F1AF021064181420000A0D0A0308900710C00C18900320000A0C0A0408D0AF021028180520000A0F0A0508DE14100110C00C18900320000A0F0A0608D4AE02100110A006186420000A0F0A0508B413100110C00C18900320000A100A0608CDAF02100110C00C18900320000A0C0A0408F7AA021028180520000A0E0A0508D50F1001109003183220000A0F0A06088BAF02100110A006186420000A0E0A0508BB13100110A006186420000A0E0A05089403100110A006186420000A0D0A04082D1001109003183220000A0E0A0508CD151001109003183220000A0D0A0308D70610C00C18900320000A0E0A0508B7041001109003183220000A0F0A060880AF021001109003183220000A0B0A0308FC0F1028180520000A0E0A0508EB131001109003183220000A0B0A0308A5091028180520000A0E0A05088D031001109003183220000A0B0A0308DB0F1028180520000A0C0A0408AFAC021064181420000A0B0A0308810A1028180520000A0C0A0308BB03109003186420000A0F0A060884AD021001109003183220000A0E0A0508C509100110A006186420000A0E0A0508E2061001109003183220000A0B0A0308DF021064181420000A0B0A0308C4141064181420000A0E0A0508900E1001109003183220000A0C0A040888AC021028180520000A0F0A060891AD02100110A006186420000A0F0A05088B0F100110801918C00C20000A0B0A0308FB011028180520000A0D0A0308DA0D10C00C18900320000A0E0A0508EB16100110A006186420000A0E0A05089514100110A006186420000A0C0A0308BD13109003186420000A0B0A0308E1041028180520000A0F0A0508C90F100110801918C00C20000A0C0A0408CEAE021064181420000A0E0A0508E8121001109003183220000A0E0A0508EA0F1001109003183220000A0B0A0308F8131064181420000A0F0A05088412100110801918C00C20000A0D0A0408F2AE02109003186420000A0E0A0508BA161001109003183220000A0C0A0408ECAE021028180520000A0B0A0308D60F1028180520000A0E0A05088310100110A006186420000A100A0608A8AB02100110801918C00C20000A0D0A0308FB0E10C00C18900320000A0F0A0608B4AC021001109003183220000A0F0A0508CE13100110C00C18900320000A0C0A03089910109003186420000A0E0A0508FB11100110A006186420000A0F0A05089A10100110C00C18900320000A0C0A0308B914109003186420000A0E0A0508E2151001109003183220000A0C0A0408FBAA021064181420000A0F0A0508A510100110801918C00C20000A0B0A030891101064181420000A0B0A03089B151028180520000A0E0A0508AF101001109003183220000A0F0A0608DBB0021001109003183220000A0E0A0508E50F100110A006186420000A0D0A0308F80810C00C18900320000A0F0A05089002100110C00C18900320000A0F0A0608B8AD021001109003183220000A0E0A0508C3011001109003183220000A0D0A0408161001109003183220000A0B0A0308D2151064181420000A0C0A0308A315109003186420000A0E0A050886061001109003183220000A0B0A03088F0F1028180520000A0E0A05088504100110A006186420000A0D0A0308EF0F10C00C18900320000A0D0A0408A7AD02109003186420000A0E0A050897681001109003183220000A0B0A03088A031064181420000A100A0608C9AF02100110801918C00C20000A0E0A0508F2011001109003183220000A0F0A0508A710100110801918C00C20000A0C0A0308A614109003186420000A0D0A040887AB02109003186420000A0C0A0308C115109003186420000A0B0A0308C60F1064181420000A0B0A0308B0101028180520000A0E0A0508FB05100110A006186420000A0D0A0408B1AF02109003186420000A0F0A060888B002100110A006186420000A0E0A050881051001109003183220000A0B0A0308DE071028180520000A0B0A0308F9461064181420000A0F0A0508850E100110801918C00C20000A0B0A030880121028180520000A0B0A0308D9131028180520000A0D0A0308C50410C00C18900320000A0B0A0308C8131064181420000A0F0A0508C316100110801918C00C20000A0D0A0408CDAF02109003186420000A0E0A0408CBAC0210C00C18900320000A0E0A0508F705100110A006186420000A0E0A0508BA011001109003183220000A0C0A0308C70F109003186420000A0F0A0508D204100110C00C18900320000A0B0A0308FB131028180520000A0E0A0508FA11100110A006186420000A0E0A050895031001109003183220000A0D0A0408A9AD02109003186420000A0B0A0308ED021028180520000A0E0A0508E70F100110A006186420000A0C0A0308C001109003186420000A0C0A040888B0021064181420000A0E0A050896101001109003183220000A0B0A0308E9121028180520000A0D0A0308A61010C00C18900320000A0E0A0508E00F100110A006186420000A0B0A0308D2161064181420000A0B0A0308FA051028180520000A0E0A0508D814100110A006186420000A0B0A0308ED0F1064181420000A0B0A0308F5041064181420000A0B0A0308F70F1028180520000A0E0A0508CD161001109003183220000A0C0A0408F6AA021028180520000A0C0A0308E107109003186420000A0C0A0308DB06109003186420000A0C0A0408F9AB021064181420000A0E0A0508B714100110A006186420000A0B0A03089D021028180520000A0B0A0308C4131028180520000A0B0A0308C9011028180520000A0E0A0508810A1001109003183220000A0B0A0308C9031064181420000A0F0A0608E8AF021001109003183220000A0D0A0308B01510C00C18900320000A0F0A0508F80D100110C00C18900320000A0C0A040888AF021064181420000A0E0A05088D0E1001109003183220000A0F0A06088AAD021001109003183220000A100A0608F2AE02100110C00C18900320000A0B0A03089E021064181420000A0B0A0308FE0D1064181420000A0F0A0508ED16100110C00C18900320000A0F0A0608FFAF02100110A006186420000A0E0A0508BC051001109003183220000A0F0A060880AD02100110A006186420000A0F0A0608F2B002100110A006186420000A0B0A0308BB161028180520000A0C0A0408BEAB021028180520000A0C0A0408CFAF021028180520000A0B0A030882051028180520000A0E0A0508E311100110A006186420000A0F0A0508D80A100110C00C18900320000A0E0A0508D311100110A006186420000A0F0A05088414100110C00C18900320000A0E0A0508E415100110A006186420000A100A0608AEAB02100110801918C00C20000A0B0A0308F50F1028180520000A0B0A030893071064181420000A0F0A0608C4AE021001109003183220000A0C0A04088EAC021064181420000A0C0A0408D191021064181420000A0E0A0508CA08100110A006186420000A0B0A0308810E1064181420000A0F0A05089B10100110C00C18900320000A0F0A0508C20F100110801918C00C20000A0D0A0408F9AA02109003186420000A0E0A05088610100110A006186420000A0E0A0508CF161001109003183220000A0C0A0408D9AE021064181420000A0E0A040883AC0210C00C18900320000A0B0A0308F5131028180520000A0D0A0408FFAD02109003186420000A0D0A0308A41510C00C18900320000A0F0A05089A14100110801918C00C20000A0E0A0508E2081001109003183220000A0E0A0508F713100110A006186420000A0B0A0308DA131028180520000A0E0A0508EA161001109003183220000A0F0A0608BBAF021001109003183220000A0F0A0508F80C100110801918C00C20000A0F0A0508A310100110801918C00C20000A0B0A02084B109003186420000A0A0A0208561064181420000A0F0A0508A314100110801918C00C20000A0E0A0508AB061001109003183220000A100A0608CBAC02100110801918C00C20000A0E0A0508CB13100110A006186420000A0A0A02083D1028180520000A0B0A030886101064181420000A0F0A0508B403100110801918C00C20000A0F0A06088F9A02100110A006186420000A0E0A050881101001109003183220000A0E0A0508CE15100110A006186420000A0B0A0308D50A1064181420000A0D0A0308820E10C00C18900320000A0E0A0508CB0F100110A006186420000A0B0A0308F5051028180520000A0B0A0308D90D1028180520000A0F0A0508FB14100110801918C00C20000A100A0608B0AF02100110C00C18900320000A0B0A0308A7051064181420000A0E0A0408BFAC0210C00C18900320000A0C0A0408CBAF021028180520000A0E0A0408D8AC0210C00C18900320000A0C0A0408FAAA021064181420000A0B0A0308F90F1028180520000A0E0A0508D215100110A006186420000A0E0A050890151001109003183220000A0F0A0608AFAC02100110A006186420000A0B0A0308C0141028180520000A0F0A0508AC04100110801918C00C20000A0F0A0608C5AE021001109003183220000A0B0A0308CD0F1064181420000A0B0A0308E9131064181420000A0D0A03089E1010C00C18900320000A0C0A03089B10109003186420000A0E0A0508F807100110A006186420000A0E0A0508F9031001109003183220000A0B0A0308BA131028180520000A0B0A0308E2111028180520000A0B0A0308C9111064181420000A0B0A0308D3161028180520000A0E0A050882121001109003183220000A0C0A02082410C00C18900320000A0B0A0308FA0C1064181420000A0B0A0308E6111064181420000A0E0A0508B803100110A006186420000A0F0A0508E911100110801918C00C20000A0F0A0508FF0D100110801918C00C20000A0E0A0508940F1001109003183220000A0E0A0508D60A100110A006186420000A0B0A030896141028180520000A0B0A0308C5091064181420000A0C0A040884B0021064181420000A0E0A0508F5161001109003183220000A0F0A0508BC14100110C00C18900320000A100A0608E6AE02100110801918C00C20000A0F0A0508A410100110801918C00C20000A0E0A0508ED09100110A006186420000A0E0A0508C9071001109003183220000A0B0A0308FB0F1028180520000A0D0A04080C100110A006186420000A0E0A05088F0F1001109003183220000A0B0A030894101028180520000A0C0A0308C703109003186420000A0B0A0308EA161028180520000A0F0A0608A0AB02100110A006186420000A0B0A0308FB061064181420000A0D0A0308E81110C00C18900320000A0D0A0408FEAA02109003186420000A0D0A0308EF0810C00C18900320000A100A060892AC02100110C00C18900320000A0E0A0508FB0F1001109003183220000A0D0A03089B0310C00C18900320000A0F0A0508C914100110801918C00C20000A100A060881B102100110C00C18900320000A0E0A0508D015100110A006186420000A0F0A0508EF0F100110801918C00C20000A0C0A0408D2AE021028180520000A0C0A0408C4AE021028180520000A0B0A0308D1111028180520000A0F0A0508E915100110C00C18900320000A0C0A0308F80D109003186420000A0B0A0308C9161028180520000A0F0A060884B002100110A006186420000A0B0A030882161028180520000A0F0A0508BE0F100110C00C18900320000A0E0A0508F20F100110A006186420000A0B0A0308B2141028180520000A0E0A0508C0151001109003183220000A0E0A0508EE0F100110A006186420000A0B0A0308FE071028180520000A0B0A0308CB0F1064181420000A0E0A0508E611100110A006186420000A0D0A040825100110A006186420000A0B0A0308F7131064181420000A0B0A0308A4061064181420000A0D0A0308941710C00C18900320000A0E0A0508A106100110A006186420000A0B0A0308A1061064181420000A0B0A0308E7161028180520000A0C0A04088DAF021028180520000A0D0A0308FF0D10C00C18900320000A100A0608C0AC02100110801918C00C20000A0B0A0308CA081064181420000A0B0A0308A8031028180520000A0F0A0508BB03100110C00C18900320000A0E0A0508FB06100110A006186420000A0F0A05089609100110C00C18900320000A0B0A0308F4111028180520000A0B0A0308C7171028180520000A0B0A0308890F1064181420000A0B0A03088A0E1028180520000A0E0A0508F8021001109003183220000A0C0A03089C10109003186420000A0B0A030891171064181420000A100A0608A7AC02100110C00C18900320000A0B0A0308F70D1028180520000A0E0A0408AEAB0210C00C18900320000A0C0A03089101109003186420000A0D0A04085F100110A006186420000A0F0A0608CFAF021001109003183220000A0D0A0308A81010C00C18900320000A0F0A060889AC021001109003183220000A0C0A0308BA11109003186420000A0E0A0508C308100110A006186420000A0B0A0308F70C1064181420000A0C0A0408FAB0021064181420000A0B0A03088E0F1064181420000A0B0A0308CB131064181420000A0E0A040817100110C00C18900320000A0B0A0308BE161028180520000A0C0A03088B08109003186420000A0B0A0308F80F1064181420000A0B0A0308E6041028180520000A0E0A050887041001109003183220000A0F0A0508BD14100110801918C00C20000A0E0A0508C8161001109003183220000A100A0608A4AC02100110C00C18900320000A0B0A0308E5131028180520000A0E0A0408E9AC0210C00C18900320000A0F0A06089DAC02100110A006186420000A100A0608EFAF02100110801918C00C20000A0B0A0308F4051064181420000A0C0A03088616109003186420000A0B0A030894141028180520000A0D0A0308A40310C00C18900320000A0B0A0308EE131064181420000A0E0A050882101001109003183220000A0D0A0308FC1310C00C18900320000A0B0A0308AE101064181420000A0F0A0508DF0F100110C00C18900320000A0C0A0408F2B0021064181420000A0B0A0308C7131028180520000A0D0A0308800510C00C18900320000A0B0A0308D20A1028180520000A0E0A0508D1141001109003183220000A0E0A0508ED021001109003183220000A0E0A0508DE15100110A006186420000A0B0A0308CF131028180520000A0F0A05089910100110C00C18900320000A0C0A0308950F109003186420000A0B0A0308BF171064181420000A0E0A0508D3131001109003183220000A0D0A0308ED0510C00C18900320000A0B0A03088A061028180520000A0B0A030896101028180520000A0B0A0308E20C1064181420000A0B0A0308C2151028180520000A0F0A0608A1AC02100110A006186420000A0D0A0408C7AE02109003186420000A0E0A0408D3AE0210C00C18900320000A0F0A0508D511100110801918C00C20000A0E0A0508EA041001109003183220000A0E0A0508A5091001109003183220000A0F0A0508EC0F100110C00C18900320000A0B0A0308D40A1028180520000A0F0A0508C115100110C00C18900320000A0B0A0308E00F1064181420000A0C0A04089DAC021064181420000A0B0A03088E101064181420000A0F0A0608FDAE021001109003183220000A0F0A05088417100110801918C00C20000A0B0A0308A2141028180520000A0B0A0308E0061064181420000A0F0A060881B0021001109003183220000A0B0A0308D4111028180520000A0F0A0508EB02100110801918C00C20000A0B0A0308A4141064181420000A0F0A0508D002100110801918C00C20000A0B0A0308F2011028180520000A100A0608A9AD02100110C00C18900320000A0B0A0308C2161028180520000A0E0A050880121001109003183220000A0C0A0308D513109003186420000A0B0A0308DC011064181420000A0C0A040880AF021028180520000A0D0A0308871710C00C18900320000A0E0A0508D60F1001109003183220000A0B0A0308D4081028180520000A0E0A0508FA0C100110A006186420000A0E0A0508C3131001109003183220000A0F0A0508930F100110801918C00C20000A0B0A0308910E1028180520000A0E0A0508E6161001109003183220000A0E0A0508DD0F100110A006186420000A0C0A0308E002109003186420000A0D0A04088AAE02109003186420000A0B0A03089D151028180520000A0E0A0508870F1001109003183220000A0B0A0308C1041064181420000A100A0608F9AA02100110C00C18900320000A0B0A030894031064181420000A0B0A0308C9071028180520000A0E0A0408C4AC0210C00C18900320000A0F0A05088906100110801918C00C20000A0E0A05089B151001109003183220000A0E0A050896061001109003183220000A0F0A0508B808100110801918C00C20000A0D0A0308F21310C00C18900320000A0E0A0508FA0D100110A006186420000A0C0A0308A708109003186420000A0F0A0508BA14100110801918C00C20000A0B0A0308C5031064181420000A0E0A0508FB011001109003183220000A0E0A0508890F100110A006186420000A0B0A0308B1111064181420000A0E0A0508DC01100110A006186420000A0E0A0508F2111001109003183220000A0E0A0508F811100110A006186420000A0E0A0508ED13100110A006186420000A0B0A0308F60F1028180520000A0B0A0308EC111028180520000A0E0A05088810100110A006186420000A0B0A0308E5071064181420000A0E0A0508D20F100110A006186420000A0F0A05089D0D100110801918C00C20000A0E0A0508F311100110A006186420000A0F0A0508C207100110801918C00C20000A0D0A0308EB0210C00C18900320000A0D0A0308AF0410C00C18900320000A0C0A0308F013109003186420000A0B0A030882101028180520000A0F0A0508D301100110C00C18900320000A0C0A0408DDAE021028180520000A0E0A0508C60F100110A006186420000A0E0A05088E0F100110A006186420000A0B0A0308FB111064181420000A0E0A0508DF161001109003183220000A0E0A0508DB03100110A006186420000A0D0A0308CA1410C00C18900320000A0E0A0508D2141001109003183220000A0C0A040886AD021028180520000A0F0A0608D4AF021001109003183220000A0E0A0508D40F100110A006186420000A0B0A0308F3111064181420000A0F0A060885AD021001109003183220000A0E0A0508F60E1001109003183220000A0B0A030899071028180520000A0E0A0508DB0A100110A006186420000A0E0A050897101001109003183220000A0D0A0308BC1510C00C18900320000A0D0A0408A7AC02109003186420000A0F0A0508CF14100110C00C18900320000A0F0A0608F4AF02100110A006186420000A0B0A0308890E1028180520000A0E0A0508C2081001109003183220000A0B0A0308A9151028180520000A0E0A0508DC15100110A006186420000A0E0A0508D915100110A006186420000A0B0A0308B4141064181420000A0C0A0308D90F109003186420000A0B0A0308E2151028180520000A0E0A0508CC08100110A006186420000A0E0A0508F111100110A006186420000A0E0A0508C0141001109003183220000A0E0A0508C7131001109003183220000A0C0A0308DF0F109003186420000A0B0A0308CE151064181420000A0C0A0308F305109003186420000A0B0A0308D8131028180520000A0E0A0508C90D100110A006186420000A0C0A0408FEAC021028180520000A0F0A06088EAC02100110A006186420000A0E0A0508F813100110A006186420000A0F0A0508A805100110C00C18900320000A0E0A0508F504100110A006186420000A0B0A0308F1111064181420000A100A0608AEB002100110C00C18900320000A0B0A0308BC051028180520000A0F0A0508C206100110801918C00C20000A0E0A0508D4111001109003183220000A0B0A0308E9011028180520000A0E0A0508DE0F100110A006186420000A0E0A0508FD0D1001109003183220000A100A0608FDAF02100110C00C18900320000A0B0A0308FF0F1028180520000A0F0A0508F914100110801918C00C20000A0B0A0308C40F1028180520000A0B0A0308CE141064181420000A0B0A0308F8071064181420000A0E0A0508D8131001109003183220000A0E0A0508C503100110A006186420000A0B0A030886061028180520000A0E0A0508D711100110A006186420000A100A0608DCAF02100110C00C18900320000A0F0A0508E811100110801918C00C20000A0C0A0408B8AC021064181420000A0F0A0508FC13100110801918C00C20000A0E0A05089D06100110A006186420000A0C0A0408DAB0021028180520000A0B0A0308EA041028180520000A0B0A0308C3081064181420000A0B0A0308F90E1028180520000A0E0A0508F10F1001109003183220000A0E0A0508C0071001109003183220000A0B0A0308920E1028180520000A0B0A030889101064181420000A0F0A0508950F100110C00C18900320000A0E0A0508E8011001109003183220000A0E0A0508CE14100110A006186420000A0E0A0508EC05100110A006186420000A0B0A0308FD0D1028180520000A0B0A0308CA161028180520000A0F0A0608F7AB021001109003183220000A0E0A0408FEAF0210C00C18900320000A0B0A03088D0E1028180520000A0D0A0308FA1410C00C18900320000A0C0A0308920F109003186420000A0F0A0508C515100110801918C00C20000A0E0A050882161001109003183220000A0E0A05088F0E1001109003183220000A100A0608FFAD02100110C00C18900320000A0E0A0408A0B00210C00C18900320000A0F0A05088717100110801918C00C20000A0F0A0508E107100110C00C18900320000A0B0A0308BA161028180520000A0E0A05089117100110A006186420000A0C0A0308BC14109003186420000A100A06088DAC02100110C00C18900320000A0E0A0508980D100110A006186420000A0C0A0308FD0F109003186420000A100A0608D8AC02100110801918C00C20000A0B0A0308E7111064181420000A0E0A0508E6041001109003183220000A0D0A0408D9AF02109003186420000A0E0A05089E07100110A006186420000A0F0A0508A403100110801918C00C20000A0B0A0308C90D1064181420000A0E0A0508CB16100110A006186420000A0F0A0608FBAA02100110A006186420000A0F0A0508E40F100110C00C18900320000A0E0A050890031001109003183220000A0D0A0408AEB002109003186420000A0C0A0408E8AF021028180520000A0B0A0308CB161064181420000A0F0A0508BF08100110C00C18900320000A0E0A0508C40F1001109003183220000A0E0A0508DD0A1001109003183220000A0E0A05088A061001109003183220000A0E0A0508B2081001109003183220000A0E0A0508CF151001109003183220000A0B0A0308D5081064181420000A0E0A0508DB091001109003183220000A100A0608C0AF02100110C00C18900320000A0D0A0308A11010C00C18900320000A0C0A0308910F109003186420000A0B0A0308E70F1064181420000A0B0A0308F6071064181420000A0B0A030893471064181420000A0F0A0608B1B0021001109003183220000A0B0A030897011028180520000A0C0A0308E20F109003186420000A0F0A0608FAAC021001109003183220000A0F0A0608FBAB02100110A006186420000A0B0A0308ED011064181420000A0E0A0508FE0D100110A006186420000A0C0A0408B9AB021064181420000A0C0A0408B0B0021064181420000A0E0A0508DC0F1001109003183220000A0E0A0508F30F1001109003183220000A0B0A0308870E1064181420000A0D0A0408221001109003183220000A0F0A0608CBAF021001109003183220000A0E0A0508CA161001109003183220000A0B0A0308C8041028180520000A0F0A0508FA0E100110801918C00C20000A0F0A05088B08100110C00C18900320000A0D0A0308851710C00C18900320000A0F0A0608ADB002100110A006186420000A0B0A0308F2051028180520000A0D0A0408A4AC02109003186420000A0B0A0308F50D1028180520000A0D0A0308C51510C00C18900320000A0C0A0408FFAF021064181420000A100A0608C4AC02100110801918C00C20000A0E0A05088E0E1001109003183220000A0B0A0308EB161064181420000A0B0A030883091028180520000A0D0A0308F91410C00C18900320000A0E0A0508890E1001109003183220000A0F0A0508AA06100110C00C18900320000A0D0A0308E91110C00C18900320000A0E0A0508EE01100110A006186420000A0C0A0408DBB0021028180520000A0F0A0508A715100110801918C00C20000A0C0A0408E2AF021028180520000A0E0A050881171001109003183220000A0B0A0308B7141064181420000A0B0A0308F8111064181420000A0F0A0508D613100110C00C18900320000A0D0A0308BA1410C00C18900320000A0B0A030883101064181420000A0F0A0508B702100110C00C18900320000A0B0A0308DE0F1064181420000A0F0A0608A9AF021001109003183220000A0B0A0308FE0C1064181420000A0B0A0308C6131064181420000A0B0A0308E4131028180520000A0F0A0608E0B002100110A006186420000A0F0A0608B6AC02100110A006186420000A100A0608BFAC02100110801918C00C20000A0F0A0508FB08100110801918C00C20000A0E0A0508910E1001109003183220000A0B0A030891141028180520000A0D0A040881B102109003186420000A0B0A0308C0071028180520000A0B0A0308E7071028180520000A0D0A0308C90F10C00C18900320000A0E0A0508A407100110A006186420000A0F0A0508EE02100110C00C18900320000A0B0A0308FD021028180520000A0B0A030886011064181420000A0E0A0508B0101001109003183220000A0B0A030882081064181420000A0B0A0308880F1028180520000A0E0A04089FB00210C00C18900320000A0E0A0508CB05100110A006186420000A0F0A060882B0021001109003183220000A0F0A0508A708100110C00C18900320000A0B0A0308AB061028180520000A0F0A0508FD0F100110C00C18900320000A0B0A0308CF151028180520000A0B0A0308D5031028180520000A0E0A05088E17100110A006186420000A0B0A0308EE061028180520000A0D0A0308841210C00C18900320000A0E0A05088007100110A006186420000A0B0A03089D061064181420000A0B0A03088C021028180520000A100A06088DAE02100110C00C18900320000A0E0A0508D2111001109003183220000A0B0A0308F7031028180520000A0D0A0308B20210C00C18900320000A0B0A03088F0E1028180520000A0B0A0308FA111064181420000A0B0A0308BB131064181420000A0E0A0508ED041001109003183220000A0D0A0308AC0410C00C18900320000A0B0A0308C1161028180520000A0F0A0608FAB002100110A006186420000A0F0A0508C504100110801918C00C20000A0E0A0508FC0F1001109003183220000A100A0608FEAA02100110C00C18900320000A0F0A0608ECAE021001109003183220000A0E0A0508FE0C100110A006186420000A0B0A0308F30C1028180520000A0B0A0308C40E1028180520000A0E0A0508FD11100110A006186420000A0B0A0308D3131028180520000A0D0A0308D51110C00C18900320000A0E0A05089307100110A006186420000A0C0A0408ADB0021064181420000A0B0A030890151028180520000A0E0A05089D021001109003183220000A0F0A06088DAD021001109003183220000A0B0A030881171028180520000A100A0608D3AA02100110C00C18900320000A0E0A0508F5131001109003183220000A0C0A0308BF08109003186420000A0E0A05088D10100110A006186420000A0C0A03088D14109003186420000A0F0A0508B015100110801918C00C20000A0C0A040884AD021028180520000A0B0A0308E2081028180520000A0B0A030893101064181420000A0B0A0308E7131028180520000A0F0A05089D10100110C00C18900320000A0E0A0508D4081001109003183220000A0E0A0508C615100110A006186420000A0B0A0308940F1028180520000A0E0A05088E05100110A006186420000A0E0A0508E8151001109003183220000A0E0A0508CE161001109003183220000A0F0A0508A415100110801918C00C20000A0F0A0608BEAB021001109003183220000A0D0A0308B90D10C00C18900320000A0E0A05088C0E1001109003183220000A0F0A0508C815100110801918C00C20000A0C0A0308CE0F109003186420000A0E0A0508C8041001109003183220000A0F0A0508BA04100110801918C00C20000A0F0A05088517100110801918C00C20000A0E0A0508B8131001109003183220000A0F0A060888AF02100110A006186420000A0B0A0308FA0F1064181420000A0B0A0308ED131064181420000A0B0A0308D1141028180520000A0F0A05088D14100110C00C18900320000A0E0A04088AB00210C00C18900320000A0F0A05089F02100110C00C18900320000A0C0A0308D301109003186420000A0C0A0308C20E109003186420000A0C0A03088614109003186420000A0F0A0508D90F100110C00C18900320000A0E0A0508F50D1001109003183220000A0B0A0308DE051064181420000A0D0A040892AC02109003186420000A0F0A0508F213100110801918C00C20000A0B0A0308E60F1028180520000A0C0A040881B0021028180520000A0F0A0508D611100110801918C00C20000A100A060887AB02100110C00C18900320000A0B0A0308D60A1064181420000A0C0A040882B0021028180520000A0E0A05088D08100110A006186420000A0B0A0308DA041028180520000A0C0A0308D80A109003186420000A0F0A05088C14100110C00C18900320000A0D0A0308A51510C00C18900320000A0F0A0508DE16100110C00C18900320000A0B0A0308F00F1028180520000A0B0A0308AB021028180520000A0C0A03088914109003186420000A0E0A050880101001109003183220000A0B0A0308870F1028180520000A0D0A0408A2AC02109003186420000A0F0A0508ED05100110801918C00C20000A0E0A050897151001109003183220000A0D0A0308A31410C00C18900320000A0B0A0308EB111028180520000A0F0A05088616100110C00C18900320000A0B0A0308BF131028180520000A0F0A0508FA14100110801918C00C20000A0F0A0608F9B0021001109003183220000A100A0608CFB102100110801918C00C20000A0B0A0308B9171064181420000A0D0A0308850E10C00C18900320000A0B0A03088C0F1028180520000A0E0A05089668100110A006186420000A0F0A0508820E100110801918C00C20000A0F0A0608FEAC021001109003183220000A0E0A050891141001109003183220000A0E0A0508F70D1001109003183220000A0F0A0508910F100110C00C18900320000A0B0A03088B101064181420000A0E0A0508B917100110A006186420000A0D0A0308A71010C00C18900320000A0B0A0308DD0A1028180520000A0F0A05089810100110C00C18900320000A0E0A0508F6081001109003183220000A0B0A0308D40F1064181420000A0E0A0508E2071001109003183220000A0E0A0508B313100110A006186420000A0B0A030885101028180520000A0E0A0408C2AE0210C00C18900320000A0D0A0308BD1410C00C18900320000A0E0A0508D508100110A006186420000A0F0A0508840E100110801918C00C20000A0E0A05088C021001109003183220000A0E0A0508DD08100110A006186420000A0E0A05088A0E1001109003183220000A0B0A0308D50F1028180520000A0E0A0508FE071001109003183220000A0F0A0508D713100110801918C00C20000A0E0A0508ED0F100110A006186420000A0B0A03089E071064181420000A0C0A0408C9B0021028180520000A0E0A0508880E1001109003183220000A0E0A05088F09100110A006186420000A0B0A030893141028180520000A0C0A03089F02109003186420000A0B0A030897681028180520000A0C0A03088C14109003186420000A0F0A0508F808100110801918C00C20000A0B0A0308C80F1064181420000A0C0A0308EC0F109003186420000A100A06088AAE02100110C00C18900320000A0D0A0308C20F10C00C18900320000A0C0A03088F06109003186420000A0B0A0308E8151028180520000A0B0A0308F2111028180520000A0E0A0508EE061001109003183220000A0D0A0308A41010C00C18900320000A0F0A05089304100110C00C18900320000A0B0A0308B8131028180520000A0C0A0408B8AD021028180520000A0D0A0308C81510C00C18900320000A0F0A0508F305100110C00C18900320000A0E0A0508D4051001109003183220000A0F0A0508E80F100110801918C00C20000A0E0A0508EB111001109003183220000A0E0A05088D0F100110A006186420000A0E0A0508E2111001109003183220000A0E0A0508FC10100110A006186420000A0F0A0608BEAE02100110A006186420000A0E0A0508C9161001109003183220000A0E0A05089A041001109003183220000A0D0A0308C91410C00C18900320000A0B0A0308B2081028180520000A0D0A0308DA0610C00C18900320000A0F0A0508C10F100110C00C18900320000A0C0A0408D4AE021064181420000A0F0A0508D013100110C00C18900320000A0E0A05088208100110A006186420000A0B0A0308B3011028180520000A0C0A040886B0021064181420000A0A0A0208451028180520000A0B0A0308EE111028180520000A0D0A0408B0AF02109003186420000A0F0A0508DA0F100110801918C00C20000A0B0A0308D0151064181420000A0B0A0308DC151064181420000A0B0A0308C50E1028180520000A0F0A05089E10100110801918C00C20000A0B0A0308EE011064181420000A0E0A0508E7071001109003183220000A0C0A0308ED16109003186420000A0E0A0508D90D1001109003183220000A0B0A0308C1131028180520000A0C0A0308CB15109003186420000A0B0A0308FB0C1028180520000A0D0A0408451001109003183220000A0C0A03088414109003186420000A0C0A0408F4AF021064181420000A0C0A0408FBAB021064181420000A0E0A0508AD101001109003183220000A0E0A0508CD0F100110A006186420000A0E0A0508B414100110A006186420000A0B0A030896061028180520000A0D0A0308D00210C00C18900320000A0E0A0508E7131001109003183220000A0B0A0308B3031064181420000A0D0A0308A20910C00C18900320000A0B0A0308B7041028180520000A0C0A0408E0B0021064181420000A0D0A0308FA0E10C00C18900320000A0E0A0508AC011001109003183220000A0B0A0308F5161028180520000A0F0A0508EB0F100110C00C18900320000A0C0A0308D80F109003186420000A0F0A0508CD13100110C00C18900320000A0D0A0308D30F10C00C18900320000A0B0A03088C011028180520000A0F0A0508B202100110801918C00C20000A0E0A0508880F1001109003183220000A0B0A030881051028180520000A0B0A0308DB091028180520000A0E0A0508DA041001109003183220000A0D0A0408441001109003183220000A0A0A02081E1028180520000A0E0A05088314100110A006186420000A0D0A0308A01010C00C18900320000A0E0A0508FF051001109003183220000A0E0A0508F607100110A006186420000A0F0A0608DDAE021001109003183220000A0B0A0308D3111064181420000A0E0A0508D70F100110A006186420000A0B0A0308FE0F1028180520000A0B0A0308DE151064181420000A0E0A0508F2051001109003183220000A0D0A03088E0410C00C18900320000A0B0A0308B6131028180520000A0C0A0408E9AB021028180520000A0B0A030881041064181420000A0E0A05089510100110A006186420000A0C0A0408B4AC021028180520000A0B0A0308FC101064181420000A0E0A0508C2161001109003183220000A0F0A0508C70F100110C00C18900320000A0D0A0308E80F10C00C18900320000A0F0A0508CA14100110801918C00C20000A0D0A0408C4AB02109003186420000A0E0A0508BF131001109003183220000A0C0A0408B2AD021028180520000A0B0A030890141064181420000A0F0A05089101100110C00C18900320000A0B0A03088F101064181420000A0E0A05089110100110A006186420000A0F0A05088E04100110801918C00C20000A0F0A0608B9AB02100110A006186420000A0C0A0408F6AE021028180520000A0F0A060887AC021001109003183220000A0E0A0508F5051001109003183220000A0B0A0308D7111064181420000A0B0A0308C6151064181420000A0E0A0508F30C1001109003183220000A0D0A0308A71510C00C18900320000A0E0A0508D20A1001109003183220000A0B0A0308DD0F1064181420000A0E0A0508C913100110A006186420000A0C0A0408F7AB021028180520000A0F0A0608D2AE021001109003183220000A0F0A0608D19102100110A006186420000A0E0A0508C7171001109003183220000A0F0A05088707100110C00C18900320000A0C0A03089304109003186420000A0C0A0408C1AB021028180520000A0F0A05089B14100110C00C18900320000A0D0A0308C20710C00C18900320000A0B0A0308F40F1028180520000A0B0A030884101028180520000A0C0A03088707109003186420000A0F0A0508F508100110C00C18900320000A0C0A04088DAD021028180520000A0F0A0608FAAA02100110A006186420000A0A0A0208221028180520000A0B0A0308F30F1028180520000A0E0A050888141001109003183220000A0F0A0608C1AB021001109003183220000A0C0A03089B14109003186420000A0B0A0308F20B1064181420000A0F0A0508BC15100110801918C00C20000A0C0A0308EB0F109003186420000A0E0A0508E711100110A006186420000A0B0A0308D70F1064181420000A0F0A0508FA06100110801918C00C20000A0E0A0508DD04100110A006186420000A0B0A030896681064181420000A0C0A0308AA06109003186420000A0B0A0308D1131028180520000A0E0A0508C813100110A006186420000A0F0A0508A204100110C00C18900320000A0C0A0408FAAC021028180520000A0B0A030888101064181420000A0D0A0308A51010C00C18900320000A0E0A0508DC021001109003183220000A0E0A050894101001109003183220000A0E0A0508C4161001109003183220000A0F0A0608C9B0021001109003183220000A0F0A060882AD021001109003183220000A0C0A040887AC021028180520000A0C0A03089002109003186420000A0F0A0508920F100110C00C18900320000A0B0A0308FA0D1064181420000A0E0A0508F113100110A006186420000A0B0A0308C0151028180520000A0E0A0508FE0F100110900318322000100522140A0C6D6573736167655F73697A65120418A9AE012A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + // byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318840222BFAE010A0C667261676D656E745F30303012ADAE0132A9AE010A0B0A0308A2021028182820010A0F0A0508A202100110900318900320010A0D0A0308F90C10900318900320010A0F0A0508F90C100110C00C18C00C20010A0D0A0308ED0310900318900320010A0F0A0508ED03100110C00C18C00C20010A0B0A0308D9041064186420010A0F0A0508D904100110A00618A00620010A0D0A0308980710900318900320010A0F0A05089807100110C00C18C00C20010A0B0A0308B1081064186420010A0F0A0508B108100110A00618A00620010A0B0A030892051028182820010A0F0A05089205100110900318900320010A0B0A0308F7061064186420010A0F0A0508F706100110A00618A00620010A0B0A0308D2031064186420010A0F0A0508D203100110A00618A00620010A0D0A0308DC0A10900318900320010A0F0A0508DC0A100110C00C18C00C20010A0B0A0308A8081064186420010A0F0A0508A808100110A00618A00620010A0B0A0308DF161028180520000A0E0A0508B4051001109003183220000A0C0A0408BEAE021064181420000A0E0A0508FF03100110A006186420000A0D0A0308B80810C00C18900320000A0B0A0308AE061028180520000A0C0A0408F9AC021028180520000A0E0A0508C613100110A006186420000A0C0A04088AAD021028180520000A0E0A0508E5131001109003183220000A0B0A0308F7041064181420000A0E0A050888071001109003183220000A0E0A0508FB131001109003183220000A0B0A0308E2061028180520000A0D0A0308FA0610C00C18900320000A0E0A0508E1041001109003183220000A0D0A0408FDAF02109003186420000A0E0A0508A8031001109003183220000A0B0A0308F1131064181420000A0E0A0508C104100110A006186420000A0D0A0308FB1410C00C18900320000A0B0A0308F10F1028180520000A0B0A0308C4051064181420000A0E0A0508D50A100110A006186420000A0E0A040820100110801918C00C20000A0B0A0308F9111028180520000A0E0A0508BA131001109003183220000A0D0A0408D3AA02109003186420000A0F0A0608F5AC021001109003183220000A0B0A0308AC011028180520000A0B0A030890031028180520000A0C0A040880AD021064181420000A0E0A0508900F1001109003183220000A0E0A0508DB0F1001109003183220000A0C0A0408FDAE021028180520000A0F0A0508D513100110C00C18900320000A0B0A0308D2131028180520000A0C0A0308CD13109003186420000A0E0A0508A406100110A006186420000A0E0A05089347100110A006186420000A0B0A0308F6081028180520000A0B0A03089E011064181420000A0B0A0308E30F1028180520000A0B0A030888141028180520000A0B0A0308DC061028180520000A100A0608C2AE02100110801918C00C20000A0F0A0608F9AB02100110A006186420000A0F0A0608F9AC021001109003183220000A0E0A0508B906100110A006186420000A100A0608E9AC02100110801918C00C20000A0C0A03088305109003186420000A0B0A0308AF101028180520000A100A060886B102100110801918C00C20000A0C0A0308C10F109003186420000A0B0A0308900F1028180520000A0B0A030895141064181420000A0B0A0308EC051064181420000A0C0A0408DBAF021064181420000A0E0A05089E01100110A006186420000A0F0A0508E115100110C00C18900320000A0D0A0308F80C10C00C18900320000A0B0A03088D031028180520000A0F0A0508A110100110801918C00C20000A0E0A04084B100110C00C18900320000A0B0A030897101028180520000A0B0A0308FB051064181420000A0E0A0508DF02100110A006186420000A0C0A03089D10109003186420000A0E0A040824100110801918C00C20000A0F0A0608E2AF021001109003183220000A0E0A0508A414100110A006186420000A0D0A040856100110A006186420000A0B0A03088E051064181420000A0E0A0508C414100110A006186420000A0E0A0508B303100110A006186420000A0B0A0308900E1028180520000A0F0A05089B03100110801918C00C20000A0B0A0308E2071028180520000A0D0A04088DAE02109003186420000A0E0A0408EFAF0210C00C18900320000A0E0A0508E913100110A006186420000A100A060883AC02100110801918C00C20000A0F0A0608F6AE021001109003183220000A0E0A0508D9131001109003183220000A0E0A0508CB141001109003183220000A0A0A0208711064181420000A0B0A0308D9071028180520000A0F0A0608D9AE02100110A006186420000A0B0A0308F7111064181420000A0F0A0508D706100110801918C00C20000A0E0A05088104100110A006186420000A0C0A040885AD021028180520000A0E0A05089E02100110A006186420000A0B0A030880101028180520000A0E0A05089301100110A006186420000A0F0A0508DB06100110C00C18900320000A0B0A0308980D1064181420000A0F0A060888AC021001109003183220000A0F0A05088305100110C00C18900320000A0B0A0308FD111064181420000A0F0A0508D80F100110C00C18900320000A0E0A05088A03100110A006186420000A0E0A05088F141001109003183220000A0E0A0408A8AB0210C00C18900320000A0B0A0308CC081064181420000A0E0A0508E7161001109003183220000A0F0A0508E002100110C00C18900320000A0F0A0508EF08100110801918C00C20000A0B0A0308F8021028180520000A0E0A0508F60F1001109003183220000A0C0A040889AC021028180520000A0F0A0508A210100110801918C00C20000A0C0A040891AD021064181420000A0B0A0308DC0F1028180520000A0E0A0508B111100110A006186420000A0F0A05089417100110801918C00C20000A100A0608FEAF02100110801918C00C20000A0F0A05089C10100110C00C18900320000A0E0A0508D5161001109003183220000A0D0A04083D1001109003183220000A0F0A0508E10F100110801918C00C20000A0D0A0408C0AF02109003186420000A0D0A0308F60210C00C18900320000A0B0A030897061064181420000A0E0A05088601100110A006186420000A0C0A03088A01109003186420000A0E0A0508B6131001109003183220000A0E0A0508ED01100110A006186420000A0C0A0408A1AC021064181420000A0E0A0508FA0F100110A006186420000A0E0A05089D151001109003183220000A0E0A050882051001109003183220000A0D0A040871100110A006186420000A0F0A06088DAF021001109003183220000A0B0A03088D0F1064181420000A0C0A04089AAC021028180520000A0B0A0308C5081028180520000A0C0A0308B911109003186420000A0E0A0508E103100110A006186420000A0D0A0308DA0F10C00C18900320000A0C0A0408A9AF021028180520000A0B0A0308B8031064181420000A0B0A030899141064181420000A0F0A0608DBAF02100110A006186420000A0C0A0308B206109003186420000A0F0A0608DDAD02100110A006186420000A0B0A030899021064181420000A100A06089FB002100110801918C00C20000A0B0A0308BA011028180520000A0C0A0308B413109003186420000A0D0A03089A1410C00C18900320000A0C0A0308ED08109003186420000A0E0A0408E0AC0210C00C18900320000A0E0A0508B514100110A006186420000A0C0A040883AD021028180520000A0D0A0308E10F10C00C18900320000A0D0A04088DAC02109003186420000A0A0A0208251064181420000A0E0A05089014100110A006186420000A0F0A060893AD02100110A006186420000A0E0A0508B76C1001109003183220000A0E0A0508C9011001109003183220000A0E0A0508EC111001109003183220000A0E0A0508F405100110A006186420000A0B0A0308DD081064181420000A0B0A0308B3131064181420000A100A0608D9AF02100110C00C18900320000A0E0A0508BF141001109003183220000A0E0A0508FB0C1001109003183220000A0B0A020817109003186420000A0F0A0508BD13100110C00C18900320000A0C0A0308A204109003186420000A0E0A0508DC061001109003183220000A0B0A0308CB141028180520000A0B0A0308C4151064181420000A0F0A05088614100110C00C18900320000A0F0A0608B8AC02100110A006186420000A0D0A0308EC1510C00C18900320000A0C0A0308D013109003186420000A0E0A0508DE05100110A006186420000A0E0A0508FF0F1001109003183220000A0F0A0608F7AA021001109003183220000A0B0A0308C9041028180520000A0E0A0508F90E1001109003183220000A0F0A06089AAC021001109003183220000A0E0A0508C1161001109003183220000A0C0A0308D204109003186420000A0B0A030897151028180520000A0E0A0508F7031001109003183220000A0F0A0608E9AB021001109003183220000A0B0A0308BF161028180520000A0E0A0408E6AE0210C00C18900320000A0B0A0308CE061028180520000A0E0A0508C911100110A006186420000A0F0A0508D10F100110C00C18900320000A0B0A030890101028180520000A0F0A0608CEB102100110A006186420000A0F0A0508BA11100110C00C18900320000A0B0A0308D9151064181420000A0B0A0308C4161028180520000A0B0A0308CB051064181420000A0B0A030881101028180520000A0D0A0308C31610C00C18900320000A0E0A05088C0F1001109003183220000A0B0A0308ED091064181420000A0E0A0508C903100110A006186420000A0B0A0308DF151028180520000A0C0A0308EE02109003186420000A0E0A0508E90F1001109003183220000A0E0A0508F946100110A006186420000A0B0A0308E6161028180520000A0E0A0508C314100110A006186420000A0F0A0508B206100110C00C18900320000A100A0608A2AC02100110C00C18900320000A0F0A0508C20E100110C00C18900320000A0F0A0508EC15100110801918C00C20000A0E0A0508920E1001109003183220000A0C0A0408FEAE021028180520000A0F0A0508C50F100110C00C18900320000A0E0A0508BF17100110A006186420000A0B0A0308FF051028180520000A0E0A0508BF161001109003183220000A0E0A0508C80F100110A006186420000A0E0A0508F6061001109003183220000A0C0A03088609109003186420000A0E0A0508F704100110A006186420000A0F0A0508A810100110801918C00C20000A0F0A060886B002100110A006186420000A0E0A050892101001109003183220000A0E0A040809100110801918C00C20000A0B0A0308AD151064181420000A0B0A0308DB031064181420000A0E0A05088508100110A006186420000A0B0A0308B5141064181420000A0B0A0308C8161028180520000A0C0A0308BE0F109003186420000A0B0A030882121028180520000A0B0A0308F7051064181420000A0D0A0308C80310C00C18900320000A0F0A0508F013100110C00C18900320000A0E0A050897011001109003183220000A0E0A0508F4111001109003183220000A0B0A0308F60E1028180520000A0E0A0508D216100110A006186420000A0F0A0508D202100110801918C00C20000A0E0A0508E60F1001109003183220000A0B0A0308C4061028180520000A0C0A0308CE13109003186420000A0F0A0608DAB0021001109003183220000A0C0A0308CF14109003186420000A0B0A0308F6061028180520000A0B0A0308B4051028180520000A0B0A0308D20F1064181420000A0F0A0608B2AD021001109003183220000A0B0A030880041028180520000A0E0A05088A10100110A006186420000A0B0A0308C2081028180520000A0C0A0408B1B0021028180520000A0F0A060883AD021001109003183220000A100A0608A7AD02100110C00C18900320000A0B0A0308CE161028180520000A0E0A050885101001109003183220000A0B0A0308EB131028180520000A0C0A0308C814109003186420000A0E0A0508EE13100110A006186420000A0B0A0308F0111028180520000A0E0A05088910100110A006186420000A0F0A0508CB15100110C00C18900320000A0E0A05088E10100110A006186420000A0B0A0308880E1028180520000A0E0A050880041001109003183220000A0E0A0508C4061001109003183220000A0E0A0508AE031001109003183220000A0B0A0308AE031028180520000A0E0A0508D307100110A006186420000A0E0A0508C2151001109003183220000A0B0A03089A041028180520000A0B0A0308D3071064181420000A0A0A02082D1028180520000A0E0A0508B3011001109003183220000A0E0A05088B141001109003183220000A0D0A0408BDAC02109003186420000A0E0A0508FA051001109003183220000A0E0A05088B10100110A006186420000A0E0A0508CF131001109003183220000A0E0A0508F40F1001109003183220000A0C0A04088CAC021064181420000A0B0A0308A0151064181420000A0E0A0508C415100110A006186420000A0C0A0308C50F109003186420000A0F0A0508B90D100110801918C00C20000A0A0A02085F1064181420000A0E0A0508FD021001109003183220000A0D0A04081E1001109003183220000A0C0A03089609109003186420000A100A06088AB002100110801918C00C20000A0D0A03089D0D10C00C18900320000A0C0A0408B6AC021064181420000A0E0A0508CC161001109003183220000A0F0A05088609100110C00C18900320000A0E0A0508F80F100110A006186420000A0C0A04088BAF021064181420000A0E0A050893141001109003183220000A0B0A0308E90F1028180520000A0F0A0508CE0F100110C00C18900320000A0F0A0608D0AF021001109003183220000A0B0A0308E3111064181420000A0E0A0508A9151001109003183220000A0D0A0408DCAF02109003186420000A0E0A0508D3161001109003183220000A0C0A0408DDAD021064181420000A100A0608C4AB02100110C00C18900320000A0F0A0608F6AA021001109003183220000A0C0A040893AD021064181420000A0E0A0508DF141001109003183220000A0E0A0408CFB10210C00C18900320000A0F0A0608F1AF02100110A006186420000A0E0A0508F00F1001109003183220000A0E0A0408C9AF0210C00C18900320000A0C0A0408F2AF021028180520000A0D0A0308B40310C00C18900320000A0D0A0308841710C00C18900320000A0E0A0508D2131001109003183220000A0E0A0508810E100110A006186420000A0E0A0508FD051001109003183220000A0E0A0508AB021001109003183220000A0F0A0508A615100110C00C18900320000A0E0A0508F90F1001109003183220000A0F0A060886AD021001109003183220000A0F0A0508C001100110C00C18900320000A0E0A0508BE161001109003183220000A0F0A0508A010100110801918C00C20000A0B0A0308C9131064181420000A0E0A050896141001109003183220000A0C0A02080910C00C18900320000A0E0A0508F50F1001109003183220000A0F0A0508C803100110801918C00C20000A0E0A0508E4131001109003183220000A0B0A0308EE0F1064181420000A0D0A0308930F10C00C18900320000A0F0A05089F10100110801918C00C20000A0C0A0308DE14109003186420000A0E0A0508BB161001109003183220000A0B0A0308B7171064181420000A0D0A0308D61110C00C18900320000A0F0A0608F2AF021001109003183220000A0F0A0508AF04100110801918C00C20000A0B0A030895031028180520000A0B0A03088E171064181420000A0D0A0308BA0410C00C18900320000A0E0A0508D1131001109003183220000A0C0A0308A805109003186420000A0F0A05088F06100110C00C18900320000A0B0A0308F9031028180520000A0F0A05088005100110801918C00C20000A0C0A0408F9B0021028180520000A0B0A0308E4151064181420000A0E0A050883091001109003183220000A0E0A0508A015100110A006186420000A0F0A05088710100110C00C18900320000A0C0A0408BBAF021028180520000A0F0A05089007100110801918C00C20000A0C0A040882AD021028180520000A0E0A0508C5081001109003183220000A0E0A0508C1131001109003183220000A0F0A0508B911100110C00C18900320000A0B0A0308DF141028180520000A0E0A050899071001109003183220000A0B0A0308D5161028180520000A0B0A03088C0E1028180520000A0F0A0608B0B002100110A006186420000A0A0A0208161028180520000A0E0A05088C10100110A006186420000A0F0A06088CAC02100110A006186420000A0E0A0508F70F1001109003183220000A0B0A030887041028180520000A0F0A0508ED08100110C00C18900320000A0F0A0508C703100110C00C18900320000A0E0A0508CE061001109003183220000A0B0A03088C101064181420000A0F0A0508A610100110801918C00C20000A0B0A03088D081064181420000A0C0A0308DE16109003186420000A0F0A0508F602100110801918C00C20000A0B0A0308DD041064181420000A0B0A0308ED041028180520000A0E0A0508A2141001109003183220000A0B0A03088F141028180520000A0F0A0508D30F100110801918C00C20000A0E0A0508B717100110A006186420000A0E0A0508C50E1001109003183220000A0A0A02080C1064181420000A0B0A0308C3131028180520000A0E0A0508E006100110A006186420000A0B0A0308BF141028180520000A0B0A0308B76C1028180520000A0B0A030883141064181420000A0B0A03088F091064181420000A100A0608C7AE02100110C00C18900320000A0E0A0508F711100110A006186420000A0B0A0308D2111028180520000A0B0A03088A101064181420000A0A0A0208441028180520000A0E0A05089F031001109003183220000A0E0A0508F70C100110A006186420000A0B0A0308CC161028180520000A0C0A04088F9A021064181420000A0E0A0508B2141001109003183220000A0F0A0508A209100110801918C00C20000A0B0A0308FF031064181420000A0D0A0308840E10C00C18900320000A0B0A0308F20F1064181420000A0B0A030880071064181420000A0E0A0508EE111001109003183220000A0C0A0308E40F109003186420000A0B0A0308DC021028180520000A0D0A0308C20610C00C18900320000A0B0A0308CE031028180520000A0E0A0508DA131001109003183220000A0E0A0508C4131001109003183220000A0E0A0508F9111001109003183220000A0D0A0308A21010C00C18900320000A0E0A0508F0111001109003183220000A0E0A05088F10100110A006186420000A0E0A0508D9071001109003183220000A0B0A0308D4041064181420000A0E0A0508E9011001109003183220000A0B0A030887031064181420000A0E0A05089902100110A006186420000A0F0A0608FEAE021001109003183220000A0C0A03088710109003186420000A0D0A0308D71310C00C18900320000A0B0A0308A4071064181420000A0E0A0508D5031001109003183220000A0B0A0308E50F1064181420000A0F0A0508A614100110C00C18900320000A0E0A0508DE071001109003183220000A0E0A0508CE031001109003183220000A0C0A0408F5AC021028180520000A0C0A0408D4AF021028180520000A0F0A0508FB0E100110801918C00C20000A0C0A0308E915109003186420000A0F0A0508E20F100110C00C18900320000A0F0A0508C814100110C00C18900320000A0E0A0508C40E1001109003183220000A0B0A0308E8011028180520000A0B0A0308FD051028180520000A0E0A05089706100110A006186420000A0E0A0508DF151001109003183220000A0B0A03089F031028180520000A0E0A0408C0AC0210C00C18900320000A0C0A0308D613109003186420000A0E0A0508AD15100110A006186420000A0B0A03088E0E1028180520000A0F0A05088914100110C00C18900320000A0F0A0508A315100110C00C18900320000A0E0A05089310100110A006186420000A0B0A03088B141028180520000A0E0A05088C011001109003183220000A0E0A0508D404100110A006186420000A0C0A02082010C00C18900320000A0E0A0508D1111001109003183220000A0E0A0508AE10100110A006186420000A0C0A0408CEB1021064181420000A0D0A03088B0F10C00C18900320000A0F0A0508A515100110801918C00C20000A0E0A050884101001109003183220000A100A0608B1AF02100110C00C18900320000A0E0A0508C405100110A006186420000A0B0A030893011064181420000A0D0A0308890610C00C18900320000A0B0A030888071028180520000A0E0A0508A705100110A006186420000A0E0A040886B10210C00C18900320000A0B0A030892101028180520000A0E0A0508870E100110A006186420000A0E0A0508D40A1001109003183220000A0C0A0308A615109003186420000A0B0A0308CF161028180520000A0D0A0308A31010C00C18900320000A0C0A0308F508109003186420000A0F0A0508B914100110C00C18900320000A0B0A0308D4051028180520000A0B0A0308B9061064181420000A0E0A0508E507100110A006186420000A0E0A0508E30F1001109003183220000A0E0A0508E20C100110A006186420000A0E0A0508E9121001109003183220000A0C0A0308B702109003186420000A0E0A0508C9041001109003183220000A0B0A0308D8141064181420000A0B0A0308CD161028180520000A100A0608BDAC02100110C00C18900320000A0B0A030895101064181420000A0C0A0408A0AB021064181420000A0E0A05089A021001109003183220000A0E0A0508AE061001109003183220000A0B0A0308DB0A1064181420000A0E0A050890101001109003183220000A0D0A0308FB0810C00C18900320000A0B0A0308CD151028180520000A0B0A0308C3141064181420000A0B0A0308E1031064181420000A0B0A03088D101064181420000A0C0A0308E115109003186420000A0D0A0308D20210C00C18900320000A0C0A0308D10F109003186420000A0E0A05089914100110A006186420000A0E0A0508F20B100110A006186420000A0C0A0408C5AE021028180520000A0B0A030885041064181420000A0B0A0308EA0F1028180520000A0B0A0308AD101028180520000A100A0608A0B002100110801918C00C20000A100A0608E0AC02100110801918C00C20000A0D0A03089F1010C00C18900320000A0B0A0308E8121028180520000A0C0A03089810109003186420000A100A0608D3AE02100110801918C00C20000A0C0A03089A10109003186420000A0E0A050894141001109003183220000A0B0A0308C3011028180520000A0F0A0608CEAE02100110A006186420000A0B0A03089A021028180520000A0B0A030885081064181420000A0F0A05088A01100110C00C18900320000A0B0A0308D2141028180520000A0E0A05088703100110A006186420000A0C0A0408F1AF021064181420000A0D0A0308900710C00C18900320000A0C0A0408D0AF021028180520000A0F0A0508DE14100110C00C18900320000A0F0A0608D4AE02100110A006186420000A0F0A0508B413100110C00C18900320000A100A0608CDAF02100110C00C18900320000A0C0A0408F7AA021028180520000A0E0A0508D50F1001109003183220000A0F0A06088BAF02100110A006186420000A0E0A0508BB13100110A006186420000A0E0A05089403100110A006186420000A0D0A04082D1001109003183220000A0E0A0508CD151001109003183220000A0D0A0308D70610C00C18900320000A0E0A0508B7041001109003183220000A0F0A060880AF021001109003183220000A0B0A0308FC0F1028180520000A0E0A0508EB131001109003183220000A0B0A0308A5091028180520000A0E0A05088D031001109003183220000A0B0A0308DB0F1028180520000A0C0A0408AFAC021064181420000A0B0A0308810A1028180520000A0C0A0308BB03109003186420000A0F0A060884AD021001109003183220000A0E0A0508C509100110A006186420000A0E0A0508E2061001109003183220000A0B0A0308DF021064181420000A0B0A0308C4141064181420000A0E0A0508900E1001109003183220000A0C0A040888AC021028180520000A0F0A060891AD02100110A006186420000A0F0A05088B0F100110801918C00C20000A0B0A0308FB011028180520000A0D0A0308DA0D10C00C18900320000A0E0A0508EB16100110A006186420000A0E0A05089514100110A006186420000A0C0A0308BD13109003186420000A0B0A0308E1041028180520000A0F0A0508C90F100110801918C00C20000A0C0A0408CEAE021064181420000A0E0A0508E8121001109003183220000A0E0A0508EA0F1001109003183220000A0B0A0308F8131064181420000A0F0A05088412100110801918C00C20000A0D0A0408F2AE02109003186420000A0E0A0508BA161001109003183220000A0C0A0408ECAE021028180520000A0B0A0308D60F1028180520000A0E0A05088310100110A006186420000A100A0608A8AB02100110801918C00C20000A0D0A0308FB0E10C00C18900320000A0F0A0608B4AC021001109003183220000A0F0A0508CE13100110C00C18900320000A0C0A03089910109003186420000A0E0A0508FB11100110A006186420000A0F0A05089A10100110C00C18900320000A0C0A0308B914109003186420000A0E0A0508E2151001109003183220000A0C0A0408FBAA021064181420000A0F0A0508A510100110801918C00C20000A0B0A030891101064181420000A0B0A03089B151028180520000A0E0A0508AF101001109003183220000A0F0A0608DBB0021001109003183220000A0E0A0508E50F100110A006186420000A0D0A0308F80810C00C18900320000A0F0A05089002100110C00C18900320000A0F0A0608B8AD021001109003183220000A0E0A0508C3011001109003183220000A0D0A0408161001109003183220000A0B0A0308D2151064181420000A0C0A0308A315109003186420000A0E0A050886061001109003183220000A0B0A03088F0F1028180520000A0E0A05088504100110A006186420000A0D0A0308EF0F10C00C18900320000A0D0A0408A7AD02109003186420000A0E0A050897681001109003183220000A0B0A03088A031064181420000A100A0608C9AF02100110801918C00C20000A0E0A0508F2011001109003183220000A0F0A0508A710100110801918C00C20000A0C0A0308A614109003186420000A0D0A040887AB02109003186420000A0C0A0308C115109003186420000A0B0A0308C60F1064181420000A0B0A0308B0101028180520000A0E0A0508FB05100110A006186420000A0D0A0408B1AF02109003186420000A0F0A060888B002100110A006186420000A0E0A050881051001109003183220000A0B0A0308DE071028180520000A0B0A0308F9461064181420000A0F0A0508850E100110801918C00C20000A0B0A030880121028180520000A0B0A0308D9131028180520000A0D0A0308C50410C00C18900320000A0B0A0308C8131064181420000A0F0A0508C316100110801918C00C20000A0D0A0408CDAF02109003186420000A0E0A0408CBAC0210C00C18900320000A0E0A0508F705100110A006186420000A0E0A0508BA011001109003183220000A0C0A0308C70F109003186420000A0F0A0508D204100110C00C18900320000A0B0A0308FB131028180520000A0E0A0508FA11100110A006186420000A0E0A050895031001109003183220000A0D0A0408A9AD02109003186420000A0B0A0308ED021028180520000A0E0A0508E70F100110A006186420000A0C0A0308C001109003186420000A0C0A040888B0021064181420000A0E0A050896101001109003183220000A0B0A0308E9121028180520000A0D0A0308A61010C00C18900320000A0E0A0508E00F100110A006186420000A0B0A0308D2161064181420000A0B0A0308FA051028180520000A0E0A0508D814100110A006186420000A0B0A0308ED0F1064181420000A0B0A0308F5041064181420000A0B0A0308F70F1028180520000A0E0A0508CD161001109003183220000A0C0A0408F6AA021028180520000A0C0A0308E107109003186420000A0C0A0308DB06109003186420000A0C0A0408F9AB021064181420000A0E0A0508B714100110A006186420000A0B0A03089D021028180520000A0B0A0308C4131028180520000A0B0A0308C9011028180520000A0E0A0508810A1001109003183220000A0B0A0308C9031064181420000A0F0A0608E8AF021001109003183220000A0D0A0308B01510C00C18900320000A0F0A0508F80D100110C00C18900320000A0C0A040888AF021064181420000A0E0A05088D0E1001109003183220000A0F0A06088AAD021001109003183220000A100A0608F2AE02100110C00C18900320000A0B0A03089E021064181420000A0B0A0308FE0D1064181420000A0F0A0508ED16100110C00C18900320000A0F0A0608FFAF02100110A006186420000A0E0A0508BC051001109003183220000A0F0A060880AD02100110A006186420000A0F0A0608F2B002100110A006186420000A0B0A0308BB161028180520000A0C0A0408BEAB021028180520000A0C0A0408CFAF021028180520000A0B0A030882051028180520000A0E0A0508E311100110A006186420000A0F0A0508D80A100110C00C18900320000A0E0A0508D311100110A006186420000A0F0A05088414100110C00C18900320000A0E0A0508E415100110A006186420000A100A0608AEAB02100110801918C00C20000A0B0A0308F50F1028180520000A0B0A030893071064181420000A0F0A0608C4AE021001109003183220000A0C0A04088EAC021064181420000A0C0A0408D191021064181420000A0E0A0508CA08100110A006186420000A0B0A0308810E1064181420000A0F0A05089B10100110C00C18900320000A0F0A0508C20F100110801918C00C20000A0D0A0408F9AA02109003186420000A0E0A05088610100110A006186420000A0E0A0508CF161001109003183220000A0C0A0408D9AE021064181420000A0E0A040883AC0210C00C18900320000A0B0A0308F5131028180520000A0D0A0408FFAD02109003186420000A0D0A0308A41510C00C18900320000A0F0A05089A14100110801918C00C20000A0E0A0508E2081001109003183220000A0E0A0508F713100110A006186420000A0B0A0308DA131028180520000A0E0A0508EA161001109003183220000A0F0A0608BBAF021001109003183220000A0F0A0508F80C100110801918C00C20000A0F0A0508A310100110801918C00C20000A0B0A02084B109003186420000A0A0A0208561064181420000A0F0A0508A314100110801918C00C20000A0E0A0508AB061001109003183220000A100A0608CBAC02100110801918C00C20000A0E0A0508CB13100110A006186420000A0A0A02083D1028180520000A0B0A030886101064181420000A0F0A0508B403100110801918C00C20000A0F0A06088F9A02100110A006186420000A0E0A050881101001109003183220000A0E0A0508CE15100110A006186420000A0B0A0308D50A1064181420000A0D0A0308820E10C00C18900320000A0E0A0508CB0F100110A006186420000A0B0A0308F5051028180520000A0B0A0308D90D1028180520000A0F0A0508FB14100110801918C00C20000A100A0608B0AF02100110C00C18900320000A0B0A0308A7051064181420000A0E0A0408BFAC0210C00C18900320000A0C0A0408CBAF021028180520000A0E0A0408D8AC0210C00C18900320000A0C0A0408FAAA021064181420000A0B0A0308F90F1028180520000A0E0A0508D215100110A006186420000A0E0A050890151001109003183220000A0F0A0608AFAC02100110A006186420000A0B0A0308C0141028180520000A0F0A0508AC04100110801918C00C20000A0F0A0608C5AE021001109003183220000A0B0A0308CD0F1064181420000A0B0A0308E9131064181420000A0D0A03089E1010C00C18900320000A0C0A03089B10109003186420000A0E0A0508F807100110A006186420000A0E0A0508F9031001109003183220000A0B0A0308BA131028180520000A0B0A0308E2111028180520000A0B0A0308C9111064181420000A0B0A0308D3161028180520000A0E0A050882121001109003183220000A0C0A02082410C00C18900320000A0B0A0308FA0C1064181420000A0B0A0308E6111064181420000A0E0A0508B803100110A006186420000A0F0A0508E911100110801918C00C20000A0F0A0508FF0D100110801918C00C20000A0E0A0508940F1001109003183220000A0E0A0508D60A100110A006186420000A0B0A030896141028180520000A0B0A0308C5091064181420000A0C0A040884B0021064181420000A0E0A0508F5161001109003183220000A0F0A0508BC14100110C00C18900320000A100A0608E6AE02100110801918C00C20000A0F0A0508A410100110801918C00C20000A0E0A0508ED09100110A006186420000A0E0A0508C9071001109003183220000A0B0A0308FB0F1028180520000A0D0A04080C100110A006186420000A0E0A05088F0F1001109003183220000A0B0A030894101028180520000A0C0A0308C703109003186420000A0B0A0308EA161028180520000A0F0A0608A0AB02100110A006186420000A0B0A0308FB061064181420000A0D0A0308E81110C00C18900320000A0D0A0408FEAA02109003186420000A0D0A0308EF0810C00C18900320000A100A060892AC02100110C00C18900320000A0E0A0508FB0F1001109003183220000A0D0A03089B0310C00C18900320000A0F0A0508C914100110801918C00C20000A100A060881B102100110C00C18900320000A0E0A0508D015100110A006186420000A0F0A0508EF0F100110801918C00C20000A0C0A0408D2AE021028180520000A0C0A0408C4AE021028180520000A0B0A0308D1111028180520000A0F0A0508E915100110C00C18900320000A0C0A0308F80D109003186420000A0B0A0308C9161028180520000A0F0A060884B002100110A006186420000A0B0A030882161028180520000A0F0A0508BE0F100110C00C18900320000A0E0A0508F20F100110A006186420000A0B0A0308B2141028180520000A0E0A0508C0151001109003183220000A0E0A0508EE0F100110A006186420000A0B0A0308FE071028180520000A0B0A0308CB0F1064181420000A0E0A0508E611100110A006186420000A0D0A040825100110A006186420000A0B0A0308F7131064181420000A0B0A0308A4061064181420000A0D0A0308941710C00C18900320000A0E0A0508A106100110A006186420000A0B0A0308A1061064181420000A0B0A0308E7161028180520000A0C0A04088DAF021028180520000A0D0A0308FF0D10C00C18900320000A100A0608C0AC02100110801918C00C20000A0B0A0308CA081064181420000A0B0A0308A8031028180520000A0F0A0508BB03100110C00C18900320000A0E0A0508FB06100110A006186420000A0F0A05089609100110C00C18900320000A0B0A0308F4111028180520000A0B0A0308C7171028180520000A0B0A0308890F1064181420000A0B0A03088A0E1028180520000A0E0A0508F8021001109003183220000A0C0A03089C10109003186420000A0B0A030891171064181420000A100A0608A7AC02100110C00C18900320000A0B0A0308F70D1028180520000A0E0A0408AEAB0210C00C18900320000A0C0A03089101109003186420000A0D0A04085F100110A006186420000A0F0A0608CFAF021001109003183220000A0D0A0308A81010C00C18900320000A0F0A060889AC021001109003183220000A0C0A0308BA11109003186420000A0E0A0508C308100110A006186420000A0B0A0308F70C1064181420000A0C0A0408FAB0021064181420000A0B0A03088E0F1064181420000A0B0A0308CB131064181420000A0E0A040817100110C00C18900320000A0B0A0308BE161028180520000A0C0A03088B08109003186420000A0B0A0308F80F1064181420000A0B0A0308E6041028180520000A0E0A050887041001109003183220000A0F0A0508BD14100110801918C00C20000A0E0A0508C8161001109003183220000A100A0608A4AC02100110C00C18900320000A0B0A0308E5131028180520000A0E0A0408E9AC0210C00C18900320000A0F0A06089DAC02100110A006186420000A100A0608EFAF02100110801918C00C20000A0B0A0308F4051064181420000A0C0A03088616109003186420000A0B0A030894141028180520000A0D0A0308A40310C00C18900320000A0B0A0308EE131064181420000A0E0A050882101001109003183220000A0D0A0308FC1310C00C18900320000A0B0A0308AE101064181420000A0F0A0508DF0F100110C00C18900320000A0C0A0408F2B0021064181420000A0B0A0308C7131028180520000A0D0A0308800510C00C18900320000A0B0A0308D20A1028180520000A0E0A0508D1141001109003183220000A0E0A0508ED021001109003183220000A0E0A0508DE15100110A006186420000A0B0A0308CF131028180520000A0F0A05089910100110C00C18900320000A0C0A0308950F109003186420000A0B0A0308BF171064181420000A0E0A0508D3131001109003183220000A0D0A0308ED0510C00C18900320000A0B0A03088A061028180520000A0B0A030896101028180520000A0B0A0308E20C1064181420000A0B0A0308C2151028180520000A0F0A0608A1AC02100110A006186420000A0D0A0408C7AE02109003186420000A0E0A0408D3AE0210C00C18900320000A0F0A0508D511100110801918C00C20000A0E0A0508EA041001109003183220000A0E0A0508A5091001109003183220000A0F0A0508EC0F100110C00C18900320000A0B0A0308D40A1028180520000A0F0A0508C115100110C00C18900320000A0B0A0308E00F1064181420000A0C0A04089DAC021064181420000A0B0A03088E101064181420000A0F0A0608FDAE021001109003183220000A0F0A05088417100110801918C00C20000A0B0A0308A2141028180520000A0B0A0308E0061064181420000A0F0A060881B0021001109003183220000A0B0A0308D4111028180520000A0F0A0508EB02100110801918C00C20000A0B0A0308A4141064181420000A0F0A0508D002100110801918C00C20000A0B0A0308F2011028180520000A100A0608A9AD02100110C00C18900320000A0B0A0308C2161028180520000A0E0A050880121001109003183220000A0C0A0308D513109003186420000A0B0A0308DC011064181420000A0C0A040880AF021028180520000A0D0A0308871710C00C18900320000A0E0A0508D60F1001109003183220000A0B0A0308D4081028180520000A0E0A0508FA0C100110A006186420000A0E0A0508C3131001109003183220000A0F0A0508930F100110801918C00C20000A0B0A0308910E1028180520000A0E0A0508E6161001109003183220000A0E0A0508DD0F100110A006186420000A0C0A0308E002109003186420000A0D0A04088AAE02109003186420000A0B0A03089D151028180520000A0E0A0508870F1001109003183220000A0B0A0308C1041064181420000A100A0608F9AA02100110C00C18900320000A0B0A030894031064181420000A0B0A0308C9071028180520000A0E0A0408C4AC0210C00C18900320000A0F0A05088906100110801918C00C20000A0E0A05089B151001109003183220000A0E0A050896061001109003183220000A0F0A0508B808100110801918C00C20000A0D0A0308F21310C00C18900320000A0E0A0508FA0D100110A006186420000A0C0A0308A708109003186420000A0F0A0508BA14100110801918C00C20000A0B0A0308C5031064181420000A0E0A0508FB011001109003183220000A0E0A0508890F100110A006186420000A0B0A0308B1111064181420000A0E0A0508DC01100110A006186420000A0E0A0508F2111001109003183220000A0E0A0508F811100110A006186420000A0E0A0508ED13100110A006186420000A0B0A0308F60F1028180520000A0B0A0308EC111028180520000A0E0A05088810100110A006186420000A0B0A0308E5071064181420000A0E0A0508D20F100110A006186420000A0F0A05089D0D100110801918C00C20000A0E0A0508F311100110A006186420000A0F0A0508C207100110801918C00C20000A0D0A0308EB0210C00C18900320000A0D0A0308AF0410C00C18900320000A0C0A0308F013109003186420000A0B0A030882101028180520000A0F0A0508D301100110C00C18900320000A0C0A0408DDAE021028180520000A0E0A0508C60F100110A006186420000A0E0A05088E0F100110A006186420000A0B0A0308FB111064181420000A0E0A0508DF161001109003183220000A0E0A0508DB03100110A006186420000A0D0A0308CA1410C00C18900320000A0E0A0508D2141001109003183220000A0C0A040886AD021028180520000A0F0A0608D4AF021001109003183220000A0E0A0508D40F100110A006186420000A0B0A0308F3111064181420000A0F0A060885AD021001109003183220000A0E0A0508F60E1001109003183220000A0B0A030899071028180520000A0E0A0508DB0A100110A006186420000A0E0A050897101001109003183220000A0D0A0308BC1510C00C18900320000A0D0A0408A7AC02109003186420000A0F0A0508CF14100110C00C18900320000A0F0A0608F4AF02100110A006186420000A0B0A0308890E1028180520000A0E0A0508C2081001109003183220000A0B0A0308A9151028180520000A0E0A0508DC15100110A006186420000A0E0A0508D915100110A006186420000A0B0A0308B4141064181420000A0C0A0308D90F109003186420000A0B0A0308E2151028180520000A0E0A0508CC08100110A006186420000A0E0A0508F111100110A006186420000A0E0A0508C0141001109003183220000A0E0A0508C7131001109003183220000A0C0A0308DF0F109003186420000A0B0A0308CE151064181420000A0C0A0308F305109003186420000A0B0A0308D8131028180520000A0E0A0508C90D100110A006186420000A0C0A0408FEAC021028180520000A0F0A06088EAC02100110A006186420000A0E0A0508F813100110A006186420000A0F0A0508A805100110C00C18900320000A0E0A0508F504100110A006186420000A0B0A0308F1111064181420000A100A0608AEB002100110C00C18900320000A0B0A0308BC051028180520000A0F0A0508C206100110801918C00C20000A0E0A0508D4111001109003183220000A0B0A0308E9011028180520000A0E0A0508DE0F100110A006186420000A0E0A0508FD0D1001109003183220000A100A0608FDAF02100110C00C18900320000A0B0A0308FF0F1028180520000A0F0A0508F914100110801918C00C20000A0B0A0308C40F1028180520000A0B0A0308CE141064181420000A0B0A0308F8071064181420000A0E0A0508D8131001109003183220000A0E0A0508C503100110A006186420000A0B0A030886061028180520000A0E0A0508D711100110A006186420000A100A0608DCAF02100110C00C18900320000A0F0A0508E811100110801918C00C20000A0C0A0408B8AC021064181420000A0F0A0508FC13100110801918C00C20000A0E0A05089D06100110A006186420000A0C0A0408DAB0021028180520000A0B0A0308EA041028180520000A0B0A0308C3081064181420000A0B0A0308F90E1028180520000A0E0A0508F10F1001109003183220000A0E0A0508C0071001109003183220000A0B0A0308920E1028180520000A0B0A030889101064181420000A0F0A0508950F100110C00C18900320000A0E0A0508E8011001109003183220000A0E0A0508CE14100110A006186420000A0E0A0508EC05100110A006186420000A0B0A0308FD0D1028180520000A0B0A0308CA161028180520000A0F0A0608F7AB021001109003183220000A0E0A0408FEAF0210C00C18900320000A0B0A03088D0E1028180520000A0D0A0308FA1410C00C18900320000A0C0A0308920F109003186420000A0F0A0508C515100110801918C00C20000A0E0A050882161001109003183220000A0E0A05088F0E1001109003183220000A100A0608FFAD02100110C00C18900320000A0E0A0408A0B00210C00C18900320000A0F0A05088717100110801918C00C20000A0F0A0508E107100110C00C18900320000A0B0A0308BA161028180520000A0E0A05089117100110A006186420000A0C0A0308BC14109003186420000A100A06088DAC02100110C00C18900320000A0E0A0508980D100110A006186420000A0C0A0308FD0F109003186420000A100A0608D8AC02100110801918C00C20000A0B0A0308E7111064181420000A0E0A0508E6041001109003183220000A0D0A0408D9AF02109003186420000A0E0A05089E07100110A006186420000A0F0A0508A403100110801918C00C20000A0B0A0308C90D1064181420000A0E0A0508CB16100110A006186420000A0F0A0608FBAA02100110A006186420000A0F0A0508E40F100110C00C18900320000A0E0A050890031001109003183220000A0D0A0408AEB002109003186420000A0C0A0408E8AF021028180520000A0B0A0308CB161064181420000A0F0A0508BF08100110C00C18900320000A0E0A0508C40F1001109003183220000A0E0A0508DD0A1001109003183220000A0E0A05088A061001109003183220000A0E0A0508B2081001109003183220000A0E0A0508CF151001109003183220000A0B0A0308D5081064181420000A0E0A0508DB091001109003183220000A100A0608C0AF02100110C00C18900320000A0D0A0308A11010C00C18900320000A0C0A0308910F109003186420000A0B0A0308E70F1064181420000A0B0A0308F6071064181420000A0B0A030893471064181420000A0F0A0608B1B0021001109003183220000A0B0A030897011028180520000A0C0A0308E20F109003186420000A0F0A0608FAAC021001109003183220000A0F0A0608FBAB02100110A006186420000A0B0A0308ED011064181420000A0E0A0508FE0D100110A006186420000A0C0A0408B9AB021064181420000A0C0A0408B0B0021064181420000A0E0A0508DC0F1001109003183220000A0E0A0508F30F1001109003183220000A0B0A0308870E1064181420000A0D0A0408221001109003183220000A0F0A0608CBAF021001109003183220000A0E0A0508CA161001109003183220000A0B0A0308C8041028180520000A0F0A0508FA0E100110801918C00C20000A0F0A05088B08100110C00C18900320000A0D0A0308851710C00C18900320000A0F0A0608ADB002100110A006186420000A0B0A0308F2051028180520000A0D0A0408A4AC02109003186420000A0B0A0308F50D1028180520000A0D0A0308C51510C00C18900320000A0C0A0408FFAF021064181420000A100A0608C4AC02100110801918C00C20000A0E0A05088E0E1001109003183220000A0B0A0308EB161064181420000A0B0A030883091028180520000A0D0A0308F91410C00C18900320000A0E0A0508890E1001109003183220000A0F0A0508AA06100110C00C18900320000A0D0A0308E91110C00C18900320000A0E0A0508EE01100110A006186420000A0C0A0408DBB0021028180520000A0F0A0508A715100110801918C00C20000A0C0A0408E2AF021028180520000A0E0A050881171001109003183220000A0B0A0308B7141064181420000A0B0A0308F8111064181420000A0F0A0508D613100110C00C18900320000A0D0A0308BA1410C00C18900320000A0B0A030883101064181420000A0F0A0508B702100110C00C18900320000A0B0A0308DE0F1064181420000A0F0A0608A9AF021001109003183220000A0B0A0308FE0C1064181420000A0B0A0308C6131064181420000A0B0A0308E4131028180520000A0F0A0608E0B002100110A006186420000A0F0A0608B6AC02100110A006186420000A100A0608BFAC02100110801918C00C20000A0F0A0508FB08100110801918C00C20000A0E0A0508910E1001109003183220000A0B0A030891141028180520000A0D0A040881B102109003186420000A0B0A0308C0071028180520000A0B0A0308E7071028180520000A0D0A0308C90F10C00C18900320000A0E0A0508A407100110A006186420000A0F0A0508EE02100110C00C18900320000A0B0A0308FD021028180520000A0B0A030886011064181420000A0E0A0508B0101001109003183220000A0B0A030882081064181420000A0B0A0308880F1028180520000A0E0A04089FB00210C00C18900320000A0E0A0508CB05100110A006186420000A0F0A060882B0021001109003183220000A0F0A0508A708100110C00C18900320000A0B0A0308AB061028180520000A0F0A0508FD0F100110C00C18900320000A0B0A0308CF151028180520000A0B0A0308D5031028180520000A0E0A05088E17100110A006186420000A0B0A0308EE061028180520000A0D0A0308841210C00C18900320000A0E0A05088007100110A006186420000A0B0A03089D061064181420000A0B0A03088C021028180520000A100A06088DAE02100110C00C18900320000A0E0A0508D2111001109003183220000A0B0A0308F7031028180520000A0D0A0308B20210C00C18900320000A0B0A03088F0E1028180520000A0B0A0308FA111064181420000A0B0A0308BB131064181420000A0E0A0508ED041001109003183220000A0D0A0308AC0410C00C18900320000A0B0A0308C1161028180520000A0F0A0608FAB002100110A006186420000A0F0A0508C504100110801918C00C20000A0E0A0508FC0F1001109003183220000A100A0608FEAA02100110C00C18900320000A0F0A0608ECAE021001109003183220000A0E0A0508FE0C100110A006186420000A0B0A0308F30C1028180520000A0B0A0308C40E1028180520000A0E0A0508FD11100110A006186420000A0B0A0308D3131028180520000A0D0A0308D51110C00C18900320000A0E0A05089307100110A006186420000A0C0A0408ADB0021064181420000A0B0A030890151028180520000A0E0A05089D021001109003183220000A0F0A06088DAD021001109003183220000A0B0A030881171028180520000A100A0608D3AA02100110C00C18900320000A0E0A0508F5131001109003183220000A0C0A0308BF08109003186420000A0E0A05088D10100110A006186420000A0C0A03088D14109003186420000A0F0A0508B015100110801918C00C20000A0C0A040884AD021028180520000A0B0A0308E2081028180520000A0B0A030893101064181420000A0B0A0308E7131028180520000A0F0A05089D10100110C00C18900320000A0E0A0508D4081001109003183220000A0E0A0508C615100110A006186420000A0B0A0308940F1028180520000A0E0A05088E05100110A006186420000A0E0A0508E8151001109003183220000A0E0A0508CE161001109003183220000A0F0A0508A415100110801918C00C20000A0F0A0608BEAB021001109003183220000A0D0A0308B90D10C00C18900320000A0E0A05088C0E1001109003183220000A0F0A0508C815100110801918C00C20000A0C0A0308CE0F109003186420000A0E0A0508C8041001109003183220000A0F0A0508BA04100110801918C00C20000A0F0A05088517100110801918C00C20000A0E0A0508B8131001109003183220000A0F0A060888AF02100110A006186420000A0B0A0308FA0F1064181420000A0B0A0308ED131064181420000A0B0A0308D1141028180520000A0F0A05088D14100110C00C18900320000A0E0A04088AB00210C00C18900320000A0F0A05089F02100110C00C18900320000A0C0A0308D301109003186420000A0C0A0308C20E109003186420000A0C0A03088614109003186420000A0F0A0508D90F100110C00C18900320000A0E0A0508F50D1001109003183220000A0B0A0308DE051064181420000A0D0A040892AC02109003186420000A0F0A0508F213100110801918C00C20000A0B0A0308E60F1028180520000A0C0A040881B0021028180520000A0F0A0508D611100110801918C00C20000A100A060887AB02100110C00C18900320000A0B0A0308D60A1064181420000A0C0A040882B0021028180520000A0E0A05088D08100110A006186420000A0B0A0308DA041028180520000A0C0A0308D80A109003186420000A0F0A05088C14100110C00C18900320000A0D0A0308A51510C00C18900320000A0F0A0508DE16100110C00C18900320000A0B0A0308F00F1028180520000A0B0A0308AB021028180520000A0C0A03088914109003186420000A0E0A050880101001109003183220000A0B0A0308870F1028180520000A0D0A0408A2AC02109003186420000A0F0A0508ED05100110801918C00C20000A0E0A050897151001109003183220000A0D0A0308A31410C00C18900320000A0B0A0308EB111028180520000A0F0A05088616100110C00C18900320000A0B0A0308BF131028180520000A0F0A0508FA14100110801918C00C20000A0F0A0608F9B0021001109003183220000A100A0608CFB102100110801918C00C20000A0B0A0308B9171064181420000A0D0A0308850E10C00C18900320000A0B0A03088C0F1028180520000A0E0A05089668100110A006186420000A0F0A0508820E100110801918C00C20000A0F0A0608FEAC021001109003183220000A0E0A050891141001109003183220000A0E0A0508F70D1001109003183220000A0F0A0508910F100110C00C18900320000A0B0A03088B101064181420000A0E0A0508B917100110A006186420000A0D0A0308A71010C00C18900320000A0B0A0308DD0A1028180520000A0F0A05089810100110C00C18900320000A0E0A0508F6081001109003183220000A0B0A0308D40F1064181420000A0E0A0508E2071001109003183220000A0E0A0508B313100110A006186420000A0B0A030885101028180520000A0E0A0408C2AE0210C00C18900320000A0D0A0308BD1410C00C18900320000A0E0A0508D508100110A006186420000A0F0A0508840E100110801918C00C20000A0E0A05088C021001109003183220000A0E0A0508DD08100110A006186420000A0E0A05088A0E1001109003183220000A0B0A0308D50F1028180520000A0E0A0508FE071001109003183220000A0F0A0508D713100110801918C00C20000A0E0A0508ED0F100110A006186420000A0B0A03089E071064181420000A0C0A0408C9B0021028180520000A0E0A0508880E1001109003183220000A0E0A05088F09100110A006186420000A0B0A030893141028180520000A0C0A03089F02109003186420000A0B0A030897681028180520000A0C0A03088C14109003186420000A0F0A0508F808100110801918C00C20000A0B0A0308C80F1064181420000A0C0A0308EC0F109003186420000A100A06088AAE02100110C00C18900320000A0D0A0308C20F10C00C18900320000A0C0A03088F06109003186420000A0B0A0308E8151028180520000A0B0A0308F2111028180520000A0E0A0508EE061001109003183220000A0D0A0308A41010C00C18900320000A0F0A05089304100110C00C18900320000A0B0A0308B8131028180520000A0C0A0408B8AD021028180520000A0D0A0308C81510C00C18900320000A0F0A0508F305100110C00C18900320000A0E0A0508D4051001109003183220000A0F0A0508E80F100110801918C00C20000A0E0A0508EB111001109003183220000A0E0A05088D0F100110A006186420000A0E0A0508E2111001109003183220000A0E0A0508FC10100110A006186420000A0F0A0608BEAE02100110A006186420000A0E0A0508C9161001109003183220000A0E0A05089A041001109003183220000A0D0A0308C91410C00C18900320000A0B0A0308B2081028180520000A0D0A0308DA0610C00C18900320000A0F0A0508C10F100110C00C18900320000A0C0A0408D4AE021064181420000A0F0A0508D013100110C00C18900320000A0E0A05088208100110A006186420000A0B0A0308B3011028180520000A0C0A040886B0021064181420000A0A0A0208451028180520000A0B0A0308EE111028180520000A0D0A0408B0AF02109003186420000A0F0A0508DA0F100110801918C00C20000A0B0A0308D0151064181420000A0B0A0308DC151064181420000A0B0A0308C50E1028180520000A0F0A05089E10100110801918C00C20000A0B0A0308EE011064181420000A0E0A0508E7071001109003183220000A0C0A0308ED16109003186420000A0E0A0508D90D1001109003183220000A0B0A0308C1131028180520000A0C0A0308CB15109003186420000A0B0A0308FB0C1028180520000A0D0A0408451001109003183220000A0C0A03088414109003186420000A0C0A0408F4AF021064181420000A0C0A0408FBAB021064181420000A0E0A0508AD101001109003183220000A0E0A0508CD0F100110A006186420000A0E0A0508B414100110A006186420000A0B0A030896061028180520000A0D0A0308D00210C00C18900320000A0E0A0508E7131001109003183220000A0B0A0308B3031064181420000A0D0A0308A20910C00C18900320000A0B0A0308B7041028180520000A0C0A0408E0B0021064181420000A0D0A0308FA0E10C00C18900320000A0E0A0508AC011001109003183220000A0B0A0308F5161028180520000A0F0A0508EB0F100110C00C18900320000A0C0A0308D80F109003186420000A0F0A0508CD13100110C00C18900320000A0D0A0308D30F10C00C18900320000A0B0A03088C011028180520000A0F0A0508B202100110801918C00C20000A0E0A0508880F1001109003183220000A0B0A030881051028180520000A0B0A0308DB091028180520000A0E0A0508DA041001109003183220000A0D0A0408441001109003183220000A0A0A02081E1028180520000A0E0A05088314100110A006186420000A0D0A0308A01010C00C18900320000A0E0A0508FF051001109003183220000A0E0A0508F607100110A006186420000A0F0A0608DDAE021001109003183220000A0B0A0308D3111064181420000A0E0A0508D70F100110A006186420000A0B0A0308FE0F1028180520000A0B0A0308DE151064181420000A0E0A0508F2051001109003183220000A0D0A03088E0410C00C18900320000A0B0A0308B6131028180520000A0C0A0408E9AB021028180520000A0B0A030881041064181420000A0E0A05089510100110A006186420000A0C0A0408B4AC021028180520000A0B0A0308FC101064181420000A0E0A0508C2161001109003183220000A0F0A0508C70F100110C00C18900320000A0D0A0308E80F10C00C18900320000A0F0A0508CA14100110801918C00C20000A0D0A0408C4AB02109003186420000A0E0A0508BF131001109003183220000A0C0A0408B2AD021028180520000A0B0A030890141064181420000A0F0A05089101100110C00C18900320000A0B0A03088F101064181420000A0E0A05089110100110A006186420000A0F0A05088E04100110801918C00C20000A0F0A0608B9AB02100110A006186420000A0C0A0408F6AE021028180520000A0F0A060887AC021001109003183220000A0E0A0508F5051001109003183220000A0B0A0308D7111064181420000A0B0A0308C6151064181420000A0E0A0508F30C1001109003183220000A0D0A0308A71510C00C18900320000A0E0A0508D20A1001109003183220000A0B0A0308DD0F1064181420000A0E0A0508C913100110A006186420000A0C0A0408F7AB021028180520000A0F0A0608D2AE021001109003183220000A0F0A0608D19102100110A006186420000A0E0A0508C7171001109003183220000A0F0A05088707100110C00C18900320000A0C0A03089304109003186420000A0C0A0408C1AB021028180520000A0F0A05089B14100110C00C18900320000A0D0A0308C20710C00C18900320000A0B0A0308F40F1028180520000A0B0A030884101028180520000A0C0A03088707109003186420000A0F0A0508F508100110C00C18900320000A0C0A04088DAD021028180520000A0F0A0608FAAA02100110A006186420000A0A0A0208221028180520000A0B0A0308F30F1028180520000A0E0A050888141001109003183220000A0F0A0608C1AB021001109003183220000A0C0A03089B14109003186420000A0B0A0308F20B1064181420000A0F0A0508BC15100110801918C00C20000A0C0A0308EB0F109003186420000A0E0A0508E711100110A006186420000A0B0A0308D70F1064181420000A0F0A0508FA06100110801918C00C20000A0E0A0508DD04100110A006186420000A0B0A030896681064181420000A0C0A0308AA06109003186420000A0B0A0308D1131028180520000A0E0A0508C813100110A006186420000A0F0A0508A204100110C00C18900320000A0C0A0408FAAC021028180520000A0B0A030888101064181420000A0D0A0308A51010C00C18900320000A0E0A0508DC021001109003183220000A0E0A050894101001109003183220000A0E0A0508C4161001109003183220000A0F0A0608C9B0021001109003183220000A0F0A060882AD021001109003183220000A0C0A040887AC021028180520000A0C0A03089002109003186420000A0F0A0508920F100110C00C18900320000A0B0A0308FA0D1064181420000A0E0A0508F113100110A006186420000A0B0A0308C0151028180520000A0E0A0508FE0F100110900318322000100522140A0C6D6573736167655F73697A65120418A9AE012A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); - Protocol.Header header = Protocol.Header.newBuilder() + /* Protocol.Header header = Protocol.Header.newBuilder() .setServiceId(4) .setMethodId(1) .setToken(conn.nextToken()) .setObjectId(0) .setSize(b.length) .setStatus(0) - .build(); + .build();*/ - conn.send(new BattleNetPacket(header, b)); + // conn.send(new BattleNetPacket(header, b)); } @Override 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 index 816c62f..e51e19c 100644 --- 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 @@ -2,6 +2,8 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +11,14 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CLIENT_OPTIONS; public class ClientOptions extends GenericParser { + + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.ClientOptions clientOptions = Protocol.ClientOptions.newBuilder() 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 index 9379e3f..e83cdc0 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,9 +12,20 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotifica import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.COLLECTION; public class Collection extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { - // Protocol.Collection collection = Protocol.Collection.newBuilder().build(); + // my collection + Protocol.Collection collection = Protocol.Collection.newBuilder().build(); Protocol.Notification n = generateEmptyNotification(207); 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 index 5715a92..0421c2d 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.DECK_LIST; public class DeckList extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.userService = (UserService) service; + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.DeckList deckList = Protocol.DeckList.newBuilder() 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 index 766da58..b15d834 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -10,6 +13,15 @@ import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.ARCANE_DUST_B public class DustBalance extends GenericParser { + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.userService = (UserService) service; + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.ArcaneDustBalance dustBalance = Protocol.ArcaneDustBalance.newBuilder() 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 index 6ab88f1..ebff01b 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.FAVORITE_HEROES; public class FavoriteHeroes extends GenericParser { + + private UserService userService; + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.FavoriteHeroesResponse favoriteHeroesResponse = Protocol.FavoriteHeroesResponse.newBuilder() 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 index 50acf20..56be37e 100644 --- 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 @@ -19,7 +19,9 @@ public class GeneralGenericParser extends ReflectionLoader<GenericParser> { return; } try { - this.getParsers().get(req.getValue()).parseGenericRequest(token, conn); + GenericParser parser = this.getParsers().get(req.getValue()); + parser.setResources(conn.getUserService(), conn.getServerConfig()); + parser.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 index 5644a53..a7bbc51 100644 --- 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 @@ -2,7 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; import com.alterdekim.hearthhack.reflect.AbstractParser; +import com.alterdekim.hearthhack.service.IService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; import com.alterdekim.hearthhack.util.Util; @@ -13,6 +15,9 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; @NoArgsConstructor public abstract class GenericParser implements AbstractParser { + + public abstract void setResources(IService service, ServerConfig config); + public abstract void parseGenericRequest(int token, TcpConnection conn) throws Exception; @Override 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 index 3dffc0e..2d1f070 100644 --- 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 @@ -2,13 +2,26 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; 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{ +public class GoldBalance extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder() 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 index 38b1391..14eaffe 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.HERO_XP; public class HeroXP extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { 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 index 5a56b19..4b227c2 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.MEDAL_INFO; public class MedalInfo extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.userService = (UserService) service; + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.MedalInfo medalInfo = Protocol.MedalInfo.newBuilder() 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 index 74374cd..8ea574d 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOT_SO_MASSIVE_LOGIN; public class NotSoMassiveLoginReply extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.userService = (UserService) service; + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.NotSoMassiveLoginReply reply = Protocol.NotSoMassiveLoginReply.newBuilder() diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayQueue.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayQueue.java index e24af6a..93f26d6 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayQueue.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayQueue.java @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; import lombok.extern.slf4j.Slf4j; @@ -11,6 +14,16 @@ import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.PVP_QUEUE; @Slf4j public class PlayQueue extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.PlayQueue playQueue = Protocol.PlayQueue.newBuilder() 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 index 8c3de5f..9537c8f 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.PLAYER_RECORD; public class PlayerRecords extends GenericParser { + + private ServerConfig config; + private UserService userService; + + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.PlayerRecords playerRecords = Protocol.PlayerRecords.newBuilder() 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 index 4d44564..c88a005 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; import lombok.AllArgsConstructor; @@ -18,6 +21,8 @@ import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOTICES; public class ProfileNotices extends GenericParser { private Executor executor; + private UserService userService; + private ServerConfig config; private void sendNotices(TcpConnection conn) throws Exception { Protocol.ProfileNotices notices = Protocol.ProfileNotices.newBuilder() @@ -37,6 +42,12 @@ public class ProfileNotices extends GenericParser { conn.send(new BattleNetPacket(header, n.toByteArray())); } + @Override + public void setResources(IService service, ServerConfig config) { + this.config = config; + this.userService = (UserService) service; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { if( this.executor != null ) this.executor.setRunning(false); 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 index fd5a1dd..70cf21f 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -9,6 +12,16 @@ import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CAMPAIGN_INFO; public class ProfileProgress extends GenericParser { + + private UserService userService; + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.userService = (UserService) service; + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.ProfileProgress profileProgress = Protocol.ProfileProgress.newBuilder() 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 index 3e7308e..b3b4484 100644 --- 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 @@ -2,6 +2,9 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.config.ServerConfig; +import com.alterdekim.hearthhack.service.IService; +import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; @@ -10,6 +13,15 @@ import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.REWARD_PROGRE public class RewardProgress extends GenericParser { + private UserService userService; + private ServerConfig config; + + @Override + public void setResources(IService service, ServerConfig config) { + this.userService = (UserService) service; + this.config = config; + } + @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { Protocol.RewardProgress rewardProgress = Protocol.RewardProgress.newBuilder() diff --git a/src/main/java/com/alterdekim/hearthhack/config/ServerConfig.java b/src/main/java/com/alterdekim/hearthhack/config/ServerConfig.java new file mode 100644 index 0000000..2e50b69 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/config/ServerConfig.java @@ -0,0 +1,11 @@ +package com.alterdekim.hearthhack.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +public class ServerConfig { + @Value("${hearthhack.dbf_path}") private String dbfPath; +} diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java b/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java new file mode 100644 index 0000000..ad759ca --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java @@ -0,0 +1,17 @@ +package com.alterdekim.hearthhack.dbf; + +import lombok.*; + +import java.util.List; + +@ToString +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class CardsDBF { + private String name; + private String sourceFingerprint; + private List<DBFColumn> columns; + private List<DBFCard> records; +} diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java b/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java new file mode 100644 index 0000000..6083a04 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java @@ -0,0 +1,14 @@ +package com.alterdekim.hearthhack.dbf; + +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class DBFCard { + private List<DBFField> fields; +} diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java b/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java new file mode 100644 index 0000000..04f3628 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java @@ -0,0 +1,13 @@ +package com.alterdekim.hearthhack.dbf; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class DBFColumn { + private String name; + private String type; +} diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java b/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java new file mode 100644 index 0000000..88db3ba --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java @@ -0,0 +1,13 @@ +package com.alterdekim.hearthhack.dbf; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class DBFField { + private String column; + private String val; +} diff --git a/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java b/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java new file mode 100644 index 0000000..852164b --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java @@ -0,0 +1,22 @@ +package com.alterdekim.hearthhack.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "card_backs") +public class CardBack { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable=false) + private Integer backId; +} diff --git a/src/main/java/com/alterdekim/hearthhack/entity/Deck.java b/src/main/java/com/alterdekim/hearthhack/entity/Deck.java new file mode 100644 index 0000000..8862b10 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/entity/Deck.java @@ -0,0 +1,53 @@ +package com.alterdekim.hearthhack.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "decks") +public class Deck { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable=false) + private Long userId; + + @Column(nullable=false) + private String name; + + @Column(nullable = false) + private Integer cardBack; + + @Column(nullable = false) + private Integer hero; + + @Column(nullable = false) + private Integer deckType; + + @Column(nullable = false) + private Long validity; + + @Column(nullable = false) + private Integer heroPremium; + + @Column(nullable = false) + private Boolean cardBackOverride; + + @Column(nullable = false) + private Boolean heroOverride; + + @Column(nullable = false) + private Long sortOrder; + + @Column(nullable = false) + private Integer sourceType; +} diff --git a/src/main/java/com/alterdekim/hearthhack/entity/User.java b/src/main/java/com/alterdekim/hearthhack/entity/User.java index f9087a5..ec64bc3 100644 --- a/src/main/java/com/alterdekim/hearthhack/entity/User.java +++ b/src/main/java/com/alterdekim/hearthhack/entity/User.java @@ -37,4 +37,12 @@ public class User { inverseJoinColumns={@JoinColumn(name="ROLE_ID", referencedColumnName="ID")}) private List<Role> roles = new ArrayList<>(); + @Column(nullable = false) + private Long dustBalance; + + @Column(nullable = false) + private Long goldBalance; + + @Column(nullable = false) + private Integer defaultCardBack = 0; } diff --git a/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java b/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java new file mode 100644 index 0000000..1527429 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java @@ -0,0 +1,29 @@ +package com.alterdekim.hearthhack.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "ucards") +public class UserCard { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable=false) + private Long userId; + + @Column(nullable = false) + private Integer asset; + + @Column(nullable = false) + private Integer premium; +} diff --git a/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java b/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java new file mode 100644 index 0000000..9d84621 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java @@ -0,0 +1,101 @@ +package com.alterdekim.hearthhack.parser; + +import com.alterdekim.hearthhack.dbf.CardsDBF; +import com.alterdekim.hearthhack.dbf.DBFCard; +import com.alterdekim.hearthhack.dbf.DBFColumn; +import com.alterdekim.hearthhack.dbf.DBFField; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class DBFParser extends DefaultHandler { + public static CardsDBF parseCards(String path) { + SAXParserFactory factory = SAXParserFactory.newInstance(); + try (InputStream is = new FileInputStream(path + "/CARD.xml")) { + SAXParser saxParser = factory.newSAXParser(); + DBFParser handler = new DBFParser(); + saxParser.parse(is, handler); + return handler.getResult(); + } catch (ParserConfigurationException | SAXException | IOException e) { + log.error(e.getMessage()); + } + return new CardsDBF(); + } + + private final StringBuilder currentValue = new StringBuilder(); + + @Getter + private CardsDBF result; + + @Override + public void startDocument() { + result = new CardsDBF(); + result.setColumns(new ArrayList<>()); + result.setRecords(new ArrayList<>()); + } + + @Override + public void startElement( + String uri, + String localName, + String qName, + Attributes attributes) { + + currentValue.setLength(0); + + switch (qName) { + case "SourceFingerprint": + result.setSourceFingerprint(attributes.getValue(qName)); + break; + case "Column": + DBFColumn column = new DBFColumn(); + column.setName(attributes.getValue("name")); + column.setType(attributes.getValue("type")); + result.getColumns().add(column); + break; + case "Record": + result.getRecords().add(new DBFCard(new ArrayList<>())); + break; + case "Field": + DBFField field = new DBFField(); + field.setColumn(attributes.getValue("column")); + result.getRecords() + .get(result.getRecords().size()-1) + .getFields() + .add(field); + break; + case "Dbf": + result.setName(attributes.getValue("name")); + } + } + + public void endElement(String uri, + String localName, + String qName) { + if( qName.equals("Field") ) { + List<DBFField> fields = result.getRecords() + .get(result.getRecords().size()-1) + .getFields(); + fields.get(fields.size()-1).setVal(currentValue.toString()); + result.getRecords() + .get(result.getRecords().size()-1) + .setFields(fields); + } + } + + public void characters(char[] ch, int start, int length) { + currentValue.append(ch, start, length); + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/service/IService.java b/src/main/java/com/alterdekim/hearthhack/service/IService.java new file mode 100644 index 0000000..2680742 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/service/IService.java @@ -0,0 +1,4 @@ +package com.alterdekim.hearthhack.service; + +public interface IService { +} diff --git a/src/main/java/com/alterdekim/hearthhack/service/RoomPlayerService.java b/src/main/java/com/alterdekim/hearthhack/service/RoomPlayerService.java index bfc7e05..20a22f5 100644 --- a/src/main/java/com/alterdekim/hearthhack/service/RoomPlayerService.java +++ b/src/main/java/com/alterdekim/hearthhack/service/RoomPlayerService.java @@ -9,7 +9,7 @@ import java.util.List; @Service @RequiredArgsConstructor -public class RoomPlayerService { +public class RoomPlayerService implements IService { private final RoomPlayerRepository repository; diff --git a/src/main/java/com/alterdekim/hearthhack/service/RoomService.java b/src/main/java/com/alterdekim/hearthhack/service/RoomService.java index a30301f..0161130 100644 --- a/src/main/java/com/alterdekim/hearthhack/service/RoomService.java +++ b/src/main/java/com/alterdekim/hearthhack/service/RoomService.java @@ -10,7 +10,7 @@ import java.util.Optional; @RequiredArgsConstructor @Service -public class RoomService { +public class RoomService implements IService { private final RoomRepository roomRepository; public List<Room> getAll() { diff --git a/src/main/java/com/alterdekim/hearthhack/service/UserService.java b/src/main/java/com/alterdekim/hearthhack/service/UserService.java index d62b5d2..0b41d90 100644 --- a/src/main/java/com/alterdekim/hearthhack/service/UserService.java +++ b/src/main/java/com/alterdekim/hearthhack/service/UserService.java @@ -15,7 +15,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Service -public class UserService { +public class UserService implements IService { private final UserRepository userRepository; private final RoleRepository roleRepository; diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java b/src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java new file mode 100644 index 0000000..351d83d --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java @@ -0,0 +1,16 @@ +package com.alterdekim.hearthhack.xml; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static com.alterdekim.hearthhack.xml.XmlType.Attribute; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface XmlElement { + String name() default ""; + XmlType type() default Attribute; + boolean inheritName() default true; +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XmlType.java b/src/main/java/com/alterdekim/hearthhack/xml/XmlType.java new file mode 100644 index 0000000..9c91b60 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/xml/XmlType.java @@ -0,0 +1,9 @@ +package com.alterdekim.hearthhack.xml; + +public enum XmlType { + Attribute, + ChildElement, + PlainValue, + NestedList, + List +}