From ce9db33448dd0df6ed44cf9efa018234e9adc07d Mon Sep 17 00:00:00 2001 From: travisutk Date: Sun, 24 Apr 2011 23:15:55 +0000 Subject: [PATCH 1/1] Carrier and specan shellcode for CC1110. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1014 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFETCC.py | 38 +- client/goodfet.cc | 5 +- client/shellcode/chipcon/cc1110/carrier.ihx | 36 ++ client/shellcode/chipcon/cc1110/reflex.ihx | 19 +- client/shellcode/chipcon/cc1110/rxpacket.ihx | 17 +- .../shellcode/chipcon/cc1110/rxpacketp25.ihx | 15 +- client/shellcode/chipcon/cc1110/specan.ihx | 370 ++++++++++++++++++ 7 files changed, 456 insertions(+), 44 deletions(-) create mode 100644 client/shellcode/chipcon/cc1110/carrier.ihx create mode 100644 client/shellcode/chipcon/cc1110/specan.ihx diff --git a/client/GoodFETCC.py b/client/GoodFETCC.py index 9e135c1..bf7e491 100644 --- a/client/GoodFETCC.py +++ b/client/GoodFETCC.py @@ -30,11 +30,15 @@ class GoodFETCC(GoodFET): if self.smartrfpath==None: self.smartrfpath="/opt/smartrf7"; - + haveloadedsymbols=False; def loadsymbols(self): - try: self.SRF_loadsymbols(); + if self.haveloadedsymbols: + return; + try: + self.SRF_loadsymbols(); + self.haveloadedsymbols=True; except: - print "SmartRF not found at %s." % self.smartrfpath; + print "SmartRF not found for this chip."; def SRF_chipdom(self,chip="cc1110", doc="register_definition.xml"): """Loads the chip XML definitions from SmartRF7.""" fn="%s/config/xml/%s/%s" % (self.smartrfpath,chip,doc); @@ -716,7 +720,7 @@ class GoodFETCC(GoodFET): print "ERROR: PC changed during CCdebuginstr([NOP])!"; print "Checking pokes to XRAM." - for i in range(0xf000,0xf020): + for i in range(self.execbuf,self.execbuf+0x20): self.CCpokedatabyte(i,0xde); if(self.CCpeekdatabyte(i)!=0xde): print "Error in XDATA at 0x%04x" % i; @@ -756,17 +760,18 @@ class GoodFETCC(GoodFET): 0x9500:"CC2533", 0x8D00:"CC2540", 0xFF00:"CCmissing"}; + execbuf=None; CCexecbuf= {0x0100:0xF000, 0x1100:0xF000, 0x8500:0xF000, 0x8900:0xF000, 0x8100:0xF000, 0x9100:0xF000, - 0xA500:0x8000, + 0xA500:0x0000, #CC2530 0xB500:0x8000, 0x9500:0x8000, 0x8D00:0x8000, - 0xFF00:0xF000} #missing + 0xFF00:None} #missing CCpagesizes={0x01: 1024, #"CC1110", 0x11: 1024, #"CC1111", 0x85: 2048, #"CC2430", @@ -777,13 +782,16 @@ class GoodFETCC(GoodFET): 0xB5: 2048, #"CC2531", 0x95: 2048, #"CC2533", 0x8D: 2048, #"CC2540", - 0xFF: 0 } #"CCmissing"}; + 0xFF: None} def infostring(self): return self.CCidentstr(); def CCidentstr(self): ident=self.CCident(); chip=self.CCversions.get(ident&0xFF00); + execbuf=self.CCexecbuf.get(ident&0xFF00); pagesize=self.CCpagesizes.get(ident>0xFF); + self.execbuf=execbuf; + try: return "%s/r%0.4x/ps0x%0.4x" % (chip, ident, pagesize); except: @@ -911,21 +919,17 @@ class GoodFETCC(GoodFET): return str; def start(self): """Start debugging.""" + ident=0x0000; + #while ident==0xFFFF or ident==0x0000: self.setup(); self.writecmd(self.APP,0x20,0,self.data); - ident=self.CCident(); - if ident==0xFFFF or ident==0x0000: - self.writecmd(self.APP,0x20,0,self.data); - ident=self.CCident(); - + identa=self.CCident(); + self.CCidentstr(); - #print "Target identifies as %s." % ident; - #print "Status: %s." % self.status(); - self.CCreleasecpu(); - self.CChaltcpu(); + ident=self.CCident(); #Get SmartRF Studio regs if they exist. self.loadsymbols(); - + print "Status: %s" % self.status(); def stop(self): """Stop debugging.""" self.writecmd(self.APP,0x21,0,self.data); diff --git a/client/goodfet.cc b/client/goodfet.cc index f7574bc..178ca3c 100755 --- a/client/goodfet.cc +++ b/client/goodfet.cc @@ -155,9 +155,8 @@ client.serInit() client.setup(); client.start(); -#REMOVEME -client.halt(); -client.pokebyte(0xc7,0x08); +#client.halt(); +#client.pokebyte(0xc7,0x08); if(sys.argv[1]=="carrier"): if len(sys.argv)>2: diff --git a/client/shellcode/chipcon/cc1110/carrier.ihx b/client/shellcode/chipcon/cc1110/carrier.ihx new file mode 100644 index 0000000..40e1871 --- /dev/null +++ b/client/shellcode/chipcon/cc1110/carrier.ihx @@ -0,0 +1,36 @@ +:03F0000002F00813 +:03F0610002F003B7 +:05F0030012F06480FE24 +:03F0640053BEFB9D +:08F06700E5BE30E6FB53C6B81C +:0EF06F00E5C620E6FB43BE0490DF07740AF0FE +:0EF07D0090DF08E4F090DF0C7486F090DF0D59 +:0EF08B007483F090DF0E7430F090DF0F74226B +:0DF09900F090DF1074F8F090DF06E4F090C6 +:0EF0A600DF11F090DF1A7456F090DF1B74102B +:0EF0B400F090DF147414F090DF157416F090D5 +:0EF0C200DF16746CF090DF177403F090DF1807 +:0EF0D0007440F090DF197491F090DF1C74E929 +:0DF0DE00F090DF1D742AF090DF1EE4F0902A +:0EF0EB00DF1F741FF090DF237488F090DF2485 +:0EF0F9007431F090DF257409F090DF2E745012 +:0EF10700F090DF037404F090DF047422F090A7 +:0EF11500DF05E4F090DF0274FFF090DF00747D +:0BF12300AAF090DF0174AAF075E10370 +:0BF12E0090DF3BE0FA53021FBA13F51C +:02F1390080FE56 +:06F03700E478FFF6D8FDAD +:08F015007900E94400601B7A58 +:05F01D000090F13F78B6 +:03F02200007593E3 +:0AF0250000E493F2A308B80002050E +:08F02F0093D9F4DAF27593FFA6 +:08F03D007800E84400600A7944 +:03F04500007593C0 +:06F0480000E4F309D8FC0E +:08F04E007800E84400600C7931 +:0BF0560000900000E4F0A3D8FCD9FA01 +:03F0080075810708 +:0AF00B0012F13BE582600302F003FE +:04F13B0075820022B7 +:00000001FF diff --git a/client/shellcode/chipcon/cc1110/reflex.ihx b/client/shellcode/chipcon/cc1110/reflex.ihx index 45d3258..a422301 100644 --- a/client/shellcode/chipcon/cc1110/reflex.ihx +++ b/client/shellcode/chipcon/cc1110/reflex.ihx @@ -28,15 +28,16 @@ :0AF16000000A12F12CD00275E10242 :0EF16A0090DF3BE0FBBB0DF87B00900064C023 :0AF1780002C00312F12CD003D002F4 -:08F18200C3EB9A400302F1A562 -:0EF18A00900001C00212F12CD00290DF3AE09A -:0DF19800FC74806CFB90FE00F0A502F1827B -:06F1A50075E10475E103B1 -:0CF1AB0090DF3BE0FA53021FBA13F5A5F9 -:02F1B70080FED8 +:04F18200EBB50200E7 +:05F18600400302F1A6A8 +:0EF18B00900001C00212F12CD00290DF3AE099 +:0DF19900FC74806CFB90FE00F0A502F1827A +:06F1A60075E10475E103B0 +:0CF1AC0090DF3BE0FA53021FBA13F5A5F8 +:02F1B80080FED7 :06F03700E478FFF6D8FDAD :08F015007900E94400601B7A58 -:05F01D000090F1BD7838 +:05F01D000090F1BE7837 :03F02200007593E3 :0AF0250000E493F2A308B80002050E :08F02F0093D9F4DAF27593FFA6 @@ -46,6 +47,6 @@ :08F04E007800E84400600C7931 :0BF0560000900000E4F0A3D8FCD9FA01 :03F0080075810708 -:0AF00B0012F1B9E582600302F00380 -:04F1B9007582002239 +:0AF00B0012F1BAE582600302F0037F +:04F1BA007582002238 :00000001FF diff --git a/client/shellcode/chipcon/cc1110/rxpacket.ihx b/client/shellcode/chipcon/cc1110/rxpacket.ihx index 9251acd..d50f8ab 100644 --- a/client/shellcode/chipcon/cc1110/rxpacket.ihx +++ b/client/shellcode/chipcon/cc1110/rxpacket.ihx @@ -10,18 +10,19 @@ :04F09600E0387B00E3 :0EF09A008A047D0074032CFCE43DFD8B067F90 :0EF0A80000C3EE9CEF64808DF063F08095F065 -:02F0B600503FC9 +:02F0B6005040C8 :05F0B80010890280FB3D :0DF0BD008B040B8C827583FEE5D9FCF0906E :06F0CA00FE00E0FA80CA1E :0AF0D00090DF02E090FE00F07A01EC -:0AF0DA0090DF02E0FBC3EA9B501335 -:05F0E40010890280FB11 -:0EF0E9008A030A8B827583FEE5D9FBF080E373 -:05F0F70075E104A522F3 +:09F0DA0090DF02E0FBEAB503003F +:02F0E3005013C8 +:05F0E50010890280FB10 +:0EF0EA008A030A8B827583FEE5D9FBF080E273 +:05F0F80075E104A522F2 :06F03700E478FFF6D8FDAD :08F015007900E94400601B7A58 -:05F01D000090F10078F5 +:05F01D000090F10178F4 :03F02200007593E3 :0AF0250000E493F2A308B80002050E :08F02F0093D9F4DAF27593FFA6 @@ -31,6 +32,6 @@ :08F04E007800E84400600C7931 :0BF0560000900000E4F0A3D8FCD9FA01 :03F0080075810708 -:0AF00B0012F0FCE582600302F0033E -:04F0FC0075820022F7 +:0AF00B0012F0FDE582600302F0033D +:04F0FD0075820022F6 :00000001FF diff --git a/client/shellcode/chipcon/cc1110/rxpacketp25.ihx b/client/shellcode/chipcon/cc1110/rxpacketp25.ihx index 1c8fca6..2739b1c 100644 --- a/client/shellcode/chipcon/cc1110/rxpacketp25.ihx +++ b/client/shellcode/chipcon/cc1110/rxpacketp25.ihx @@ -8,13 +8,14 @@ :0BF07B0090DF3BE0FABA01F875E102FB :0DF0860090DF3BE0FABA0DF890DF02E09059 :05F09300FE00F07A010F -:0AF0980090DF02E0FBC3EA9B501377 -:05F0A20010890280FB53 -:0EF0A7008A030A8B827583FEE5D9FBF080E3B5 -:05F0B50075E104A52235 +:09F0980090DF02E0FBEAB5030081 +:02F0A10050130A +:05F0A30010890280FB52 +:0EF0A8008A030A8B827583FEE5D9FBF080E2B5 +:05F0B60075E104A52234 :06F03700E478FFF6D8FDAD :08F015007900E94400601B7A58 -:05F01D000090F0BE7838 +:05F01D000090F0BF7837 :03F02200007593E3 :0AF0250000E493F2A308B80002050E :08F02F0093D9F4DAF27593FFA6 @@ -24,6 +25,6 @@ :08F04E007800E84400600C7931 :0BF0560000900000E4F0A3D8FCD9FA01 :03F0080075810708 -:0AF00B0012F0BAE582600302F00380 -:04F0BA007582002239 +:0AF00B0012F0BBE582600302F0037F +:04F0BB007582002238 :00000001FF diff --git a/client/shellcode/chipcon/cc1110/specan.ihx b/client/shellcode/chipcon/cc1110/specan.ihx new file mode 100644 index 0000000..f9254bc --- /dev/null +++ b/client/shellcode/chipcon/cc1110/specan.ihx @@ -0,0 +1,370 @@ +:03F0000002F00813 +:03F0610002F003B7 +:05F0030012F7A980FED8 +:04F06400AA82AB834E +:05F068001ABAFF011BB4 +:0EF06D00C3E49A74808BF063F08095F0500F2E +:04F07B007CB07D04E4 +:05F07F001CBCFF011D97 +:06F08400EC4D70F780DE88 +:01F08A002263 +:0EF08B0090DF077412F090DF08E4F090DF17BA +:0EF09900E044C0F090DF1C74EAF090DF1D74BC +:0EF0A7002AF090DF1EE4F090DF1F741FF0903F +:0EF0B500DF237488F090DF247431F090DF25A3 +:09F0C3007409F090DF14E4F0225E +:07F0CC007401B52602800764 +:07F0D3007402B5261080074E +:07F0DA0090DF0C74ECF02242 +:07F0E10090DF0C740CF0221B +:07F0E80090DF0C746CF022B4 +:0EF0EF00AA82AB83ACF0FDC002C003C004C017 +:0EF0FD000512F9ADAE82AF83A8F0F9C006C0CF +:0EF10B0007C000C0019030E975F025743B127A +:0EF11900F8B3AE82AF83A8F0F9E58124FCF5CF +:0EF12700818E828F8388F0E912F9C0AE82AF2C +:0EF1350083A8F0D005D004D003D00290DF09EB +:0EF14300E8F090DF0AEFF07F0078007900908E +:0CF15100DF0BEEF0E525700FC3EA9480A0 +:0BF15D00EB944BEC94F4ED9412402274 +:0CF168007401B5250CC3EB94BAEC94457F +:05F17400ED94194011AB +:0CF179007402B52513C3EB9474EC948B66 +:05F18500ED943250077B +:07F18A0090DF1D740AF02262 +:07F1910090DF1D742AF0223B +:0DF1980012F0EF75E10175E1029000021226 +:0CF1A500F064E52A75F008A4FAABF0EA6B +:0AF1B1002400FCEB3400FD90DF09A0 +:0CF1BB00E08C828D83F0EA2400FAEB3433 +:0CF1C70000FB74012AFCE43BFD90DF0A11 +:0EF1D300E08C828D83F074022AFCE43BFD90F8 +:0EF1E100DF0BE08C828D83F074032AFCE43B8C +:0EF1EF00FD90DF1CE08C828D83F074042AFCFE +:0EF1FD00E43BFD90DF1DE08C828D83F07405F5 +:0EF20B002AFCE43BFD90DF1EE08C828D83F038 +:0EF2190074062AFCE43BFD90DF3AE0FE63063B +:0EF22700808C828D83EEF074072AF582E43B22 +:08F23500F583E4F075E1042209 +:09F23D0085822B85832C7401B538 +:04F246002602800715 +:07F24A007402B5264F80138A +:07F25100753A03753B0175DE +:07F258002E44752FC3E4F5FD +:05F25F0030F531806F65 +:07F26400753A2A753B147591 +:06F26B002E88752F2B75A3 +:08F27100300A753100740A2512 +:09F279002BF582E4352CF58375B8 +:06F28200081475090012DA +:07F28800F88A8582088583E6 +:09F28F000990001412F9F98582BE +:06F298002B85832C80355C +:07F29E00753A0D753B057583 +:06F2A5002E10752F0D75FF +:06F2AB00300375310085FF +:08F2B1002B82852C83A3A375B9 +:06F2B900080575090012B2 +:07F2BF00F88A8582088583AF +:09F2C6000990000512F9F9858296 +:04F2CF002B85832CDC +:0AF2D300C37467952B7402952C405C +:04F2DD000302F42311 +:0AF2E100752D02AC3A7D0074C2C323 +:0CF2EB009CFE74039DFFE53BC313F87903 +:0CF2F700002EF582E93FF583AE3B7F005E +:0AF303008E088F09C004C005C00683 +:0EF30D00C007C000C00112FAD3AA82AB83D0A1 +:0AF31B0001D000D007D0068E088F45 +:0CF32500098A828B83C006C007C000C0AC +:09F331000112F9F985823C858383 +:0CF33A003DD001D000D007D006D005D097 +:0CF346000474ED2CF58274023DF5838EFA +:0AF35200088F09C004C005C006C002 +:0EF35C0007C000C00112FAD3AA82AB83D00111 +:0AF36A00D000D007D0068E088F09EE +:0DF374008A828B83C006C007C000C0011252 +:07F38100F9F985823E858346 +:0CF388003FD001D000D007D006D005D047 +:0CF394000474192CF58274013DF5838E81 +:0AF3A000088F09C004C005C006C0B4 +:0EF3AA0007C000C00112FAD3AA82AB83D001C3 +:0AF3B800D000D007D0068E088F09A0 +:0DF3C2008A828B83C006C007C000C0011204 +:0EF3CF00F9F9AA82AB83D001D000D007D00696 +:0EF3DD00D005D00474E1C39CFC74019DFDE8D2 +:0AF3EB002CF582E93DF5838E088FB2 +:0CF3F50009C002C003C006C00712FAD312 +:0BF40100AC82AD83D007D0068E088FD0 +:0CF40C00098C828D8312F9F9AC82AD836B +:0BF41800D003D0027E007F0102F5C28D +:0AF42300C37471952B7401952C4001 +:04F42D000302F4FBE7 +:05F43100752D01853A74 +:08F436004075410074E1C3952B +:06F43E0040F54274019547 +:04F4440041F543E566 +:07F448003BC313F888447573 +:05F44F004500E5442525 +:06F4540042F582E545359A +:05F45A0043F583853B32 +:05F45F00427543008529 +:03F46400420885D6 +:03F4670043091244 +:04F46A00FAD385420A +:03F46E00088543CB +:06F471000912F9F9858281 +:07F477003C85833D747A25FA +:0AF47E0040F58274013541F58385E5 +:03F48800420885B2 +:03F48B0043091220 +:04F48E00FAD38542E6 +:03F49200088543A7 +:06F495000912F9F985825D +:07F49B003E85833F74ED255F +:0AF4A20040F58274023541F58385C0 +:03F4AC004208858E +:03F4AF00430912FC +:04F4B200FAD38542C2 +:03F4B60008854383 +:0CF4B9000912F9F9AA82AB837469C395AB +:08F4C50040F874019541F9E5DE +:0AF4CD004428F582E54539F58385F2 +:03F4D70042088563 +:07F4DA004309C002C0031248 +:04F4E100FAD3854293 +:03F4E50008854354 +:0CF4E8000912F9F9AC82AD83D003D00208 +:07F4F4007E027F0002F5C259 +:05F4FB00752D00853AAB +:08F50000447545007469C395D0 +:06F5080044F54274019578 +:04F50E0045F543E597 +:07F512003BC313F8884075AC +:05F519004100E5402562 +:06F51E0042F582E54135D3 +:05F5240043F583853B67 +:05F5290042754300855E +:03F52E004208850B +:03F5310043091279 +:04F53400FAD385423F +:03F5380008854300 +:06F53B000912F9F98582B6 +:07F541003C85833D74192590 +:0AF5480044F58274013545F5838512 +:03F55200420885E7 +:03F5550043091255 +:04F55800FAD385421B +:03F55C00088543DC +:06F55F000912F9F9858292 +:07F565003E85833F747A2507 +:0AF56C0044F58274013545F58385EE +:03F57600420885C3 +:03F5790043091231 +:04F57C00FAD38542F7 +:03F58000088543B8 +:0CF583000912F9F9AA82AB8374C2C39587 +:08F58F0044F874039545F9E509 +:0AF597004028F582E54139F583852F +:03F5A10042088598 +:07F5A4004309C002C003127D +:04F5AB00FAD38542C8 +:03F5AF0008854389 +:0CF5B2000912F9F9AC82AD83D003D0023D +:04F5BE007E017F0249 +:06F5C200C3E53C952BE5BA +:06F5C8003D952C50138557 +:03F5CE003C2B854E +:03F5D1003D2CE5E9 +:05F5D40025B52D248E79 +:04F5D9002D8A2B8BC1 +:03F5DD002C801C63 +:06F5E000C3E52B953EE59A +:06F5E6002C953F50118539 +:03F5EC003E2B852E +:03F5EF003F2CE5C9 +:05F5F20025B52D068F78 +:04F5F7002D8C2B8D9F +:01F5FB002CE3 +:05F5FC00852D25E4B59A +:04F601002502801F3F +:09F605007401B5253475328075DD +:06F60E0033D2753487754C +:06F6140035167536407545 +:06F61A00377A7538AB756C +:04F62000391C8032DF +:07F624007532407533B87523 +:06F62B0034BF75351075B7 +:06F63100364075376C75D0 +:07F6370038847539158018B5 +:07F63E007532407533D575EC +:06F6450034A475352C759C +:06F64B0036807537F475EE +:05F6510038567539393F +:04F65600852B088573 +:03F65A002C097503 +:0AF65D000A00750B0090424075F0A2 +:0EF667000FE412FA16AE82AF83A8F0F98E02FD +:09F675008F038804890575294200 +:08F67E00C3E5369AE5379BE570 +:0AF68600389CE5399D4047747C254F +:05F6900029404185291D +:0CF695002A8A828B838CF0EDC002C00337 +:0DF6A100C004C005C006C007C000C00112B3 +:0EF6AE00F198D001D000D007D006D005D004CE +:0AF6BC00D003D002E52E2AFAE52F54 +:0AF6C6003BFBE5303CFCE5313DFD67 +:04F6D000052980AADE +:0AF6D400EEC3952EFAEF952FFBE828 +:08F6DE009530FCE99531FD7542 +:02F6E6002842B8 +:09F6E800C3EA9532EB9533EC9571 +:07F6F10034ED95354036E5CC +:06F6F80028603215288590 +:0AF6FE00282A8A828B838CF0EDC06D +:0EF7080002C003C004C00512F198D005D00461 +:0BF71600D003D002EAC3952EFAEB9559 +:08F721002FFBEC9530FCED9587 +:04F7290031FD80BB73 +:04F72D00852B218582 +:03F731002C22C2C5 +:05F7340000852B828519 +:03F739002C8322FC +:0CF73C00E58275F008A4FAABF0EA2400A6 +:0CF74800F582EB3400F583E090DF09F05F +:0AF75400EA2400FAEB3400FB8A827D +:0EF75E008B83A3E090DF0AF08A828B83A3A343 +:0EF76C00E090DF0BF08A828B83A3A3A3E090D2 +:0DF77A00DF1CF08A828B83A3A3A3A3E09081 +:0EF78700DF1DF08A828B83A3A3A3A3A3E090CF +:04F79500DF1EF02261 +:07F7990085822612F0CC85E9 +:06F7A00021828522830294 +:02F7A600F23D32 +:01F7A800223E +:07F7A9007521937522037521 +:06F7B0002393752403758C +:06F7B6002502752600C2C9 +:04F7BC0000C201C2C4 +:05F7C000027527007531 +:06F7C500280075298312E3 +:08F7CB00F08B75820012F79922 +:02F7D300AA2862 +:04F7D500EAB5290068 +:05F7D900400302F86886 +:0EF7DE008A82C00212F73C75E10290000A1206 +:0CF7EC00F064D0027401B526117B5E7C35 +:01F7F800010F +:09F7F9008B058C061BBBFF011CF3 +:04F80200ED4E70F364 +:0AF80600EA75F008A42400FB74006A +:0EF8100035F0FC74062BFDE43CFE90DF3AE080 +:0CF81E00FF6307808D828E83EFF03000C6 +:0EF82A002B74072BFFE43CF88D828E83E0F9EF +:0AF838008F828883E0F546B50100D9 +:0AF8420050088D828E83E0FD8002E5 +:02F84C00AD46C7 +:08F84E008F828883EDF0800B2E +:0BF8560074072BF582E43CF583E4F01E +:07F8610075E1040A02F7D56E +:06F8680012F7A8E521B52E +:05F86E002308E522B5AE +:05F87300240302F7D39D +:07F878008523828524831221 +:07F87F00F23D858223858321 +:04F886002402F7D38E +:05F88A007A10E4FBFC14 +:0EF88F00E58225E0F582E58333F583EB33FB5C +:0AF89D00EC33FCEB9508F5F0EC9558 +:09F8A700094006FCABF0438201AC +:03F8B000DADD227C +:06F8B30012F956BC00032F +:03F8B90002FAA5AB +:08F8BC00EF60FA30D502B2D171 +:08F8C400E583B4FF0302FABB67 +:08F8CC00E582B4FF0302FABB60 +:0BF8D400258340072482400B02FAA5A8 +:08F8DF00248314500302FABB5C +:0EF8E700F582EA8DF0A4A8F0EA8EF0A428F8CD +:0EF8F500E435F0F9EB8DF0A428E935F0F9E4E4 +:0EF9030033CA8FF0A429F9EA35F0FAEBF88E3A +:0EF91100F0A429F9EA35F0FAE433FBEC8DF0AE +:0EF91F00A429F9EA35F0FAE43BFBE88FF0A4E6 +:0EF92D002AFAEB35F0FBE433CCFD8EF0A42A71 +:0EF93B00FAEB35F0FBE43CFCED8FF0A42BFB67 +:0AF94900EC35F0FC20E70312F9840E +:03F9530002FA8431 +:0DF95600AA82AB83A2F73392D16002D2F7F0 +:0EF96300F582ACF0E58124F9F8E6FD08E6FE39 +:0EF971000886F008E6A2F73392D56002D2F7BE +:05F97F00F583AFF0224A +:06F03700E478FFF6D8FDAD +:02F98400780405 +:0EF98600EC700DC9CACBFCE58224F8F582D8DE +:02F99400F1225E +:02F996007820D7 +:0EF9980020E7111582C3E933F9EA33FAEB33A5 +:06F9A600FBEC33FCD8EC81 +:01F9AC002238 +:08F015007900E94400601B7A58 +:05F01D000090FB527899 +:03F02200207593C3 +:0AF0250004E493F2A308B80002050A +:08F02F0093D9F4DAF27593FFA6 +:09F9AD00FCABF0AA83A982749E50 +:02F9B600C2D1BC +:08F9B800F58212F98402FA84C1 +:02F9C0007F9E28 +:09F9C20012F9E730D10302FAA5A5 +:0EF9CB00C3EF9582500974FFF5F0F583F582C5 +:01F9D900220B +:05F9DA00790012FB0B97 +:08F9DF0089828A838BF0EC227F +:0DF9E700AA82AB83A2F73392D16002D2F75F +:05F9F400F582ACF022D9 +:0BF9F900E5828508F0A4C582C0F085FF +:0AFA040009F0A4D0F025F0C58385B9 +:08FA0E0008F0A42583F5832212 +:0CFA1600AAF0FBE5828508F0A4FCADF02E +:0CFA2200E5838508F0A42DFDE435F0FE1E +:0CFA2E00E5828509F0A42DFDE5F03EFE08 +:0CFA3A00E433FFEA8508F0A42EFEE5F09E +:0CFA46003FFFE5838509F0A42EFEE5F0EB +:0CFA52003FFFE582850AF0A42EFEE5F0DF +:0BFA5E003FFFEB8508F0A42FFFEA85B6 +:0AFA690009F0A42FFFE583850AF0E1 +:0CFA7300A42FFFE582850BF0A42F8EF07D +:05FA7F008D838C822242 +:08F03D007800E84400600A7944 +:03F04500007593C0 +:06F0480000E4F309D8FC0E +:08F04E007820E84404600C790D +:0BF0560005900000E4F0A3D8FCD9FAFC +:06FA8400B98003EA13B390 +:0EFA8A004010EA2401FAE43BFBE43CFC50048B +:04FA98007C800582E7 +:09FA9C00BC000EBB000BBA00080F +:08FAA500E4F5F0F583F582227F +:0EFAAD00A2D1E582138CF092F78B838A82221D +:0DFABB00E4F583F58275F080F4A2D11322EA +:0BFAC800E4F583F58275F0C0747F2226 +:03F00800758146C9 +:0AF00B0012FB4EE582600302F003E1 +:0EFAD300C2D5E58330E70DD2D5E4C39582F5A8 +:06FAE10082E49583F58329 +:0AFAE700E50930E70DB2D5E4C39540 +:05FAF10008F508E49592 +:03FAF60009F50906 +:0EFAF90012F88A30D50BE4C39582F582E495AD +:03FB070083F58300 +:01FB0A0022D8 +:09FB0B006040F82582500274FFED +:0EFB1400F582E824F8501ECCCBCAF9E4CC24CC +:0EFB2200F85014CBCAF9E4CB24F8500BCAF902 +:09FB3000E4CA24F8500379002214 +:05FB390024086010F833 +:0EFB3E00C3EC13FCEB13FBEA13FAE913F9D83E +:01FB4C00F1C7 +:01FB4D002295 +:04FB4E00758200229A +:00000001FF -- 2.20.1