From 673c8b10603b919e25a22d4bb218d1bfab5fe5e6 Mon Sep 17 00:00:00 2001 From: MazdaNick Date: Thu, 17 Sep 2026 12:17:54 -0400 Subject: [PATCH] mazda: fix HBC under radar takeover Under the alpha-long radar takeover the synthetic radar sent only empty 5/6 track templates, and the camera read that as a dead radar: auto high beams stopped deciding. Send one occupied 0x365 track on the camera bus, a far static object (175 m nominal, 87-350 m band, zero closing speed) that never suppresses beams; the body bus keeps the empty templates stop-and-go needs, and libsafety pins the occupied pattern per slot on the camera bus only. The replacement CRZ_CTRL packed the camera's HBC-arming relay bit as 0, so the dash's green HBC light never lit. Relay 0x440 BIT2 into CRZ_CTRL NEW_SIGNAL_3 (bit 13) on both buses at 50 Hz, as stock does. The idle 0x362 template drops its captured c7 8c phantom track, which stock never sends idle, and the validator special case goes with it. Validation: night drive with alpha-long: beams react to darkness, bright areas, oncoming traffic, and leads; the green HBC light follows arming. Stop-and-go verified on the empty body-bus templates. 551 Mazda car tests, 278 Mazda safety tests, 781 car-wide interface tests; misra check passes. --- opendbc/car/mazda/carcontroller.py | 2 +- opendbc/car/mazda/carstate.py | 6 ++- opendbc/car/mazda/mazdacan.py | 31 ++++++++++-- opendbc/car/mazda/tests/conftest.py | 4 +- opendbc/car/mazda/tests/mazda_golden_tx.json | 2 +- .../car/mazda/tests/test_mazda_carstate.py | 18 +++++-- .../car/mazda/tests/test_mazda_golden_tx.py | 5 +- .../mazda/tests/test_mazda_longitudinal.py | 11 ++++ .../car/mazda/tests/test_mazda_mazdacan.py | 46 +++++++++++++++-- opendbc/safety/modes/mazda.h | 50 +++++++++++++++++-- opendbc/safety/tests/test_mazda.py | 32 +++++++++++- 11 files changed, 181 insertions(+), 26 deletions(-) diff --git a/opendbc/car/mazda/carcontroller.py b/opendbc/car/mazda/carcontroller.py index 054b9ddce48..eeb1a148e00 100644 --- a/opendbc/car/mazda/carcontroller.py +++ b/opendbc/car/mazda/carcontroller.py @@ -312,7 +312,7 @@ def update_longitudinal(self, CC, CC_SP, CS): stopping=sm.stop_bits, resume_unlatching=sm.resume_unlatching)) can_sends.append(mazdacan.create_crz_ctrl(self.packer, bus, long_engaged, acc_available, gap, self.lead_adv.has_lead, self.lead_adv.ctrl_phase, - acc_active_2)) + acc_active_2, hbc_armed=CS.hbc_armed)) self.long_counter += 1 return can_sends diff --git a/opendbc/car/mazda/carstate.py b/opendbc/car/mazda/carstate.py index ec515fc8f51..cd82189aec1 100644 --- a/opendbc/car/mazda/carstate.py +++ b/opendbc/car/mazda/carstate.py @@ -53,6 +53,9 @@ def __init__(self, CP, CP_SP): # The camera's own TJA/CTS state from its 0x440: 0 off, 2 armed, 3 to 5 steering. Live, # never latched; 0 when the camera is stale. self.stock_tja = 0 + # The camera's HBC arm state, 0x440 BIT2. The stock radar relays it to CRZ_CTRL bit 13 for + # the dash's green HBC light; under the radar takeover the controller relays it instead. + self.hbc_armed = False # Raised by the controller once per arming episode when its camera presses did not clear # stock_tja; consumed here into a stockLkas pulse. self.stock_cts_stuck = False @@ -291,7 +294,7 @@ def update(self, can_parsers) -> tuple[structs.CarState, structs.CarStateSP]: ret.cruiseState.enabled = self.cruise_enabled and not self.cruise_enabled_blocked # The FSC teardown gate requires fresh, settled CAM_LANEINFO without ERR_BIT. BIT2 is - # excluded because it may remain set for an entire ignition cycle. + # excluded: it is the auto high-beam arming bit and stays set for as long as HBC is armed. laneinfo = cp_cam.vl["CAM_LANEINFO"] settled = cam_laneinfo_fresh and not (laneinfo["NO_ERR_BIT"] or laneinfo["ERR_BIT"]) self.fsc_settled_frames = self.fsc_settled_frames + 1 if settled else 0 @@ -334,6 +337,7 @@ def update(self, can_parsers) -> tuple[structs.CarState, structs.CarStateSP]: self.cam_laneinfo = cp_cam.vl["CAM_LANEINFO"] ret.steerFaultPermanent = cp_cam.vl["CAM_LKAS"]["ERR_BIT_1"] == 1 self.stock_tja = int(self.cam_laneinfo["TJA"]) if cam_laneinfo_fresh else 0 + self.hbc_armed = cam_laneinfo_fresh and self.cam_laneinfo["BIT2"] == 1 # The camera stayed armed through the controller's presses: one pulse of stockLkas, which # the Mazda event hook turns into a one-shot warning. openpilot keeps steering; the panda diff --git a/opendbc/car/mazda/mazdacan.py b/opendbc/car/mazda/mazdacan.py index 8f737f9bccf..2f9f928025d 100644 --- a/opendbc/car/mazda/mazdacan.py +++ b/opendbc/car/mazda/mazdacan.py @@ -6,11 +6,9 @@ RADAR_STATIC_MSG = (0x499, bytes.fromhex("0008c00000000000")) RADAR_TRACK_MSGS = { 0x361: bytes.fromhex("fff7fefe1fc00080"), - 0x362: bytes.fromhex("fff7fefe1fc78c80"), + 0x362: bytes.fromhex("fff7fefe1fc00080"), 0x363: bytes.fromhex("fff7fefe1fc00000"), 0x364: bytes.fromhex("fff7fefe1fc00000"), - 0x365: bytes.fromhex("fff7fe7ffbff3fc0"), - 0x366: bytes.fromhex("fff7fe7ffbff3fc0"), } LEAD_TRACK_ADDR = 0x364 # Constant bytes for an occupied 0x364 track. create_lead_track replaces its measurements. @@ -18,6 +16,18 @@ DIST_OBJ_SCALE = 0.0625 # m per bit, DIST_OBJ and RELV_OBJ share it DIST_OBJ_MAX = 255.875 # m, the full-scale DIST_OBJ reading a track can carry +# The camera gates auto high beams on a living 5/6 object world: empty-only templates read as +# a dead radar and HBC stops deciding under the takeover. The occupied 0x365 track, encoded +# on the 0x364 field layout, sits at 175 m nominal (2x-uncalibrated scale, 87-350 m band), +# far enough out to never suppress beams. It is camera-facing; the body bus carries the +# empty templates stop-and-go needs. +RADAR_TRACK_56_EMPTY = bytes.fromhex("fff7fe7ffbff3fc0") +SYNTHETIC_TRACK_ADDRS = (0x365, 0x366) +SYNTHETIC_TRACK_CYCLE = { + 0x365: bytes.fromhex("af00a4001bff37c1"), + 0x366: RADAR_TRACK_56_EMPTY, +} + # The G46L radar (2016.5 bodies) sends only this static frame and no track messages at # all, so the lead rides CRZ_CTRL alone; fully static — no counter, no checksum. G46L_RADAR_STATIC_MSG = (0x499, bytes.fromhex("0098400000000000")) @@ -54,8 +64,11 @@ def create_acc_command(packer, bus, counter, accel, *, long_active, acc_availabl return packer.make_can_msg("CRZ_INFO", bus, values) -def create_crz_ctrl(packer, bus, long_active, acc_available, gap_setting, radar_has_lead, stop_go_phase, acc_active_2): +def create_crz_ctrl(packer, bus, long_active, acc_available, gap_setting, radar_has_lead, stop_go_phase, acc_active_2, + *, hbc_armed=False): # CRZ_CTRL replaces radar cruise state and mirrors stop phase and driver gap selection. + # NEW_SIGNAL_3 (bit 13) mirrors the camera's HBC-arming bit (0x440 BIT2), matching stock; + # the dash's green HBC light follows it. values = { "MSG_1_INV": 1, "MSG_1_INV_COPY": 1, @@ -66,6 +79,7 @@ def create_crz_ctrl(packer, bus, long_active, acc_available, gap_setting, radar_ "RADAR_HAS_LEAD": int(radar_has_lead), "RADAR_LEAD_RELATIVE_DISTANCE": stop_go_phase, "ACC_ACTIVE_2": int(acc_active_2), + "NEW_SIGNAL_3": int(hbc_armed), } return packer.make_can_msg("CRZ_CTRL", bus, values) @@ -86,6 +100,10 @@ def create_lead_track(d_rel: float, v_rel: float) -> bytes: return bytes(dat) +# The FSC camera listens on bus 2; the body ECU rides bus 0 and needs the empty tracks. +CAM_BUS = 2 + + def create_radar_frames(bus, counter, lead, g46l=False): """lead is the (dRel, vRel) of the object to advertise on 0x364, or None for an empty slot.""" if g46l: @@ -95,6 +113,11 @@ def create_radar_frames(bus, counter, lead, g46l=False): if lead is not None and addr == LEAD_TRACK_ADDR: dat = create_lead_track(*lead) frames.append(CanData(addr, dat[:7] + bytes([(dat[7] & 0xf0) | (counter % 16)]), bus)) + for addr in SYNTHETIC_TRACK_ADDRS: + cycle = SYNTHETIC_TRACK_CYCLE[addr] if bus == CAM_BUS else RADAR_TRACK_56_EMPTY + i = (counter % (len(cycle) // 8)) * 8 + dat = cycle[i:i + 8] + frames.append(CanData(addr, dat[:7] + bytes([(dat[7] & 0xf0) | (counter % 16)]), bus)) return frames diff --git a/opendbc/car/mazda/tests/conftest.py b/opendbc/car/mazda/tests/conftest.py index 542143ec797..90b982b859b 100644 --- a/opendbc/car/mazda/tests/conftest.py +++ b/opendbc/car/mazda/tests/conftest.py @@ -33,6 +33,7 @@ CAM_LKAS = 0x243 CAM_LANEINFO = 0x440 LEAD_TRACK = 0x364 +SYNTHETIC_TRACK = 0x365 RADAR_STATIC = 0x499 RADAR_UDS = 0x764 @@ -138,7 +139,7 @@ def set_car_state(cs: CarState, out=None, *, brake_hold=False, stock_radar_alive fsc_settled=True, radar_was_silenced=False, radar_session_refused=False, radar_session_response=0, radar_bus_healthy=True, steer_undelivered=False, lkas_blocked=False, lkas_effective=0, steer_first_engage_hold=False, lkas_allowed_speed=True, lkas_rejected=0, - lkas_fault=False, crz_btns_counter=0, stock_tja=0, + lkas_fault=False, crz_btns_counter=0, stock_tja=0, hbc_armed=False, cancel_button=0, accel_button=0, decel_button=0, **out_kwargs) -> CarState: """Put the controller-facing state of a real CarState where a test wants it. @@ -174,6 +175,7 @@ def set_car_state(cs: CarState, out=None, *, brake_hold=False, stock_radar_alive cs.lkas_fault = lkas_fault cs.crz_btns_counter = crz_btns_counter cs.stock_tja = stock_tja + cs.hbc_armed = hbc_armed cs.cancel_button = cancel_button cs.accel_button = accel_button cs.decel_button = decel_button diff --git a/opendbc/car/mazda/tests/mazda_golden_tx.json b/opendbc/car/mazda/tests/mazda_golden_tx.json index 091a0a69c0c..9a20ed14e6a 100644 --- a/opendbc/car/mazda/tests/mazda_golden_tx.json +++ b/opendbc/car/mazda/tests/mazda_golden_tx.json @@ -1 +1 @@ -{"frames":1940,"phases":[{"name":"boot_stock_radar","start":0},{"name":"fsc_settled_silencing","start":100},{"name":"radar_silenced_armed_idle","start":220},{"name":"engage_steer_ramp","start":320},{"name":"highway_rail","start":540},{"name":"approach_stop","start":710},{"name":"hold_on_the_plan","start":810},{"name":"hold_body_latched","start":960},{"name":"latched_release","start":1060},{"name":"drive_off","start":1180},{"name":"second_approach","start":1280},{"name":"hold_never_latched","start":1330},{"name":"never_latched_release_breakaway","start":1430},{"name":"moving_again","start":1530},{"name":"gas_override","start":1580},{"name":"steer_undelivered_latch","start":1640},{"name":"cancel","start":1680},{"name":"icbm_taps","start":1740},{"name":"handback","start":1780},{"name":"stock_radar_back","start":1880}],"hashes":["085196a105f5","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","b49c92fa77fd","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","85c87fc3d570","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","334a1c83b07a","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","c78e4aa1829c","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","8b235a6c5376","800a69340bc6","2b22241e9837","1412e0f45990","90bc334052f2","983de59f948c","7c3880dadf25","16f435405527","d868cf8b9eb3","e9d069d91dd6","bed544eed160","b6e96f31c24c","837be7322dd3","cdb9224916d6","62b9ac3abe51","b27e4d213767","7e6c5e76638b","800a69340bc6","15ec8f9bf8de","1412e0f45990","6730cc5c7595","983de59f948c","436ffc21e9f3","16f435405527","89e890e0ad1d","e9d069d91dd6","ea9ae0d87a09","b6e96f31c24c","65f1acd4e3a0","cdb9224916d6","d2030b00ab6e","b27e4d213767","ee7c11c9775f","800a69340bc6","2b22241e9837","1412e0f45990","90bc334052f2","983de59f948c","7c3880dadf25","16f435405527","7cb4ea435b9c","e9d069d91dd6","3f5ba15c128c","b6e96f31c24c","837be7322dd3","cdb9224916d6","62b9ac3abe51","b27e4d213767","7e6c5e76638b","800a69340bc6","340a645674b2","1412e0f45990","315164088708","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","f32093773387","cdb9224916d6","2ed2f514b6ee","b27e4d213767","003e7724d022","800a69340bc6","f905fed8392a","1412e0f45990","f99bb41d0a03","983de59f948c","cbec64d4b17c","16f435405527","f72671d59f9c","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","dec5a52b9610","800a69340bc6","57010dc6149f","1412e0f45990","315164088708","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","37f3ad1b71d1","b6e96f31c24c","023a8d498ca9","cdb9224916d6","2ed2f514b6ee","b27e4d213767","003e7724d022","800a69340bc6","f905fed8392a","1412e0f45990","94c17a81c605","a99779f4e620","b81134a92f0b","a8b6d0642893","41f20187ee57","3c8efbaec9c7","9937a3019db5","77febe97463e","df3a771bc5f2","3a532f464b1f","91649dbdb830","bd70e96efcf1","6aed5ce397e0","18a9a521e000","af02573a1c4e","15f5f91363b6","32debbec3cb2","fe8a1c534ed5","1ad48408936f","ae6ef2c7bf01","c2dc3aae6da0","3b01ab7a5349","f20cc90877fd","d549dc7a1a60","d17a07db074c","08aa16ac1ac7","612b2050b493","4fe29a28fa93","483ce4d55a45","d9bdebe61577","405e9f4ee50b","8f3da26e3c3c","7762cebb4704","39ac666b0494","bf20ee797f2a","0ec135499cbc","e239a6f574f1","135529a3ddfc","7d138855e2d7","e0694d7ea27b","ec0a6d2d845f","a81016ac1298","9be6df67dcca","33d62c6209b4","ccbe24094865","a7cdb4ffd0c2","0fa68e7756b2","f8f3ce5f29cb","d83aef1c3948","23af3b7acc9d","1617b0f8fe29","4bfc4378ef82","e1dd9ab828fb","dfc95ecdbc34","3ca63e2464e1","3dda586b2a29","5ed9a2426071","5c13d572a904","5e424bf08eb7","b88044628052","6cbc66004f6b","6396d0d3a9e7","7c8be3576c84","23373325f926","82bb93406e86","5d93a7fe7a25","4df7addfb00c","cb00f4c45e23","5ca2e405e818","7cb669afb7d4","57e0e483637f","bac5e16b9243","c2629814fba9","58f034b2edab","77afce7a66e2","6fd75f28bd03","e7fa50a53672","7f05ab297129","a1eea159c6f7","34f257fe95d8","a240657d9f8f","229d7d7b7eb1","6bf5346e2cc3","fd87043334d5","b8d3e21a927e","450f0ecd1703","7fb1239d75f5","60ef1dd3c519","399ea3e32b17","34d26365bcff","82cb3522ddb0","fd42fc6af137","10823561681c","4904d8cb364e","3e970d188e09","5c418cf23d51","983b3b5033e0","8e6100914ac5","28075a0ca0b8","44573ffa12cf","c6f431c13c33","25eb0dc30e2d","64cf1cff9b53","782510113f7d","c79f5f8843c2","ccc09456c98b","78f5bc9298a6","e1571ed0f21e","fdd5091dfd9f","9013fac20981","26a2d47330c9","12268a073bc8","38b635a23994","b3a7d5fdaeed","16bbd6377507","e967dd17c83c","7f9a752aa110","a43f96ac9b90","b7e0b76d2c99","297270243b48","773697223f14","0d1e2c5e4f8a","5dc994f62452","d016832d88f6","a4c8dca69e3e","aa666e2e0470","d6d768e77182","9f91cb9ca0f2","944971a0336f","0022a0757d12","0068d7467155","63933c0e7c55","76e2ee302084","6d79f03e6dca","aca6020298a7","032282c9d2d7","de1a200bac9a","5b5421c9bc21","5c22ab145bd5","7e802e993e2c","84160f667923","8173cbb09a28","d816ce6d7590","bad09aa2924c","c7802dddd344","31d97aa342a6","057742d19b12","5e3884cb26c0","00bd4d0cf678","0a407bedef76","7a8299869b79","39818a69f804","0c848cc0193c","29193ade6fac","3fe1f76d80e2","63c01086fe1c","214a1ec5c13f","40a5c491f523","2c0ae7bfabe0","f8db3b77841d","5e9eef9a6baf","9219c46995bf","444b834d47aa","5f030aac0e33","19726c8f1ae3","396c26d6b95e","5c6f69d074f6","d84c3bfe5892","3eba51327957","cbb6bd25b6c4","33f3b109f0f5","63c01086fe1c","ad5d88bd624c","40a5c491f523","0b0809e4a246","f8db3b77841d","6fbdf599bba4","9219c46995bf","6293fa152ce3","5f030aac0e33","63a681b89018","396c26d6b95e","ae6efd474d50","d84c3bfe5892","39ace6a3f537","cbb6bd25b6c4","709cc523c25b","63c01086fe1c","214a1ec5c13f","40a5c491f523","ffdc1e4ee52f","f8db3b77841d","64d230e601a4","9219c46995bf","444b834d47aa","5f030aac0e33","19726c8f1ae3","396c26d6b95e","5c6f69d074f6","d84c3bfe5892","2dff8aa50b85","cbb6bd25b6c4","e88348839fb9","63c01086fe1c","ad5d88bd624c","40a5c491f523","0b0809e4a246","f8db3b77841d","6fbdf599bba4","9219c46995bf","a54f0df96f64","5f030aac0e33","252dd0207875","396c26d6b95e","ae6efd474d50","d84c3bfe5892","39ace6a3f537","cbb6bd25b6c4","709cc523c25b","63c01086fe1c","069feafe0860","2f869fd37679","10043b2933eb","b3e104a2fece","76d1e85f4a60","e5560d70f1f9","ebb393bd4e94","69c156ba1ee9","a3ddc26e3648","6d7d2f59de36","d3b671e41309","9ec790df5363","0fc30d343e45","06100db23eb7","9ee160eb65ed","abdcc58b6bf7","db564fb773c9","1e85f0b7ac8b","bb49044ef0c2","9dc7adf2be27","177bc83a33b9","7ca4ee2d764a","605bdd201392","0f9ed858175b","4ec9e683176d","f8be53c332d4","968849ccd6b6","273d5ccccb01","152f63d39acc","597b740388ee","fd320cdd6564","2eb4c14b9b49","c40dcd8a8780","ae5e74f27430","03d40bf082ec","87bc819afade","d5444d5fa3ea","2201df670318","e3b81703dbc4","efca2866dde2","2b9c1dd0acbb","be6b19a86479","c4b2987a8820","e07e9d90149b","ee039154fe73","5a0b5f8c948b","43a3ad19dc64","1daae5cb745d","9afe0d7eb27f","16560a652f13","e490241a9999","e10bbf4b9340","99115b085845","2dec728a1f90","6b9129187949","0e610f5fcd29","59cc31f5b6dd","90013f7a8fd9","4e3ae179107d","54aa8630e61b","7fe234ffd20e","fd1a31ac3637","50e7f1b56aaf","ea1021f4a78a","c04457d05702","e2add9713e4f","70092f9161f5","e72a9a28081f","7c1f723ede31","73975ddd13f0","ba436978563b","79294d95e2c1","501ddeacc662","3571a868ed3f","46e9ec7d0979","d11cbc762557","dd84a56877b8","5b518e086bdf","3fb3c2343260","11c8d294530f","98db69529fc9","003dd310bac0","c9924bf9f6db","4d27a4628ead","ecd5c5e930cc","a40af7a2e4a8","aad6edb46164","df8eebbed457","8e562ce5e711","d6d0687a3bdd","ad674554cdea","2e31d57c07ed","bb2068089fd2","c7eaa7d82597","d2362c3976b6","5528b770c1f0","7293b14c873c","159eaa001d6d","8bdcdab38143","791568fac70f","175ec1d7ab0a","4875b6a58791","148aa42a209b","8209a93a2e4f","fec4656f8be5","3e50399d339b","c44b77dd685d","981bc420f6e3","96781c48545c","4689b6898393","811447dbaf5c","ade7984f633f","633ed14d344e","e0f53e8fc61d","3c13434ef470","4598668ed078","3b9e74af5cb0","cea22146c9a6","eca59fe732e6","76693af21556","d3d13a42bdf8","9cc53095958a","b59423f510f8","9deefabaa15a","753ef7fcad5c","eed8dccd255e","422566ab51eb","39409f1c21f6","5904be0bc878","c3ddf6d9e3b9","5fe30863bb99","0857dd411570","0a37ed342a7b","3507bd580555","c5d2a1fdad6a","4f1d3a13e493","bc7fbb6d576f","489233980094","ace5b2925798","b5fc8791dcac","781c0579b108","01b3533303ea","f9b5aba2c7cf","a93e5ded447c","5390f664a9d8","214026f73c9b","7dc747686d1c","08bf61f42cc5","41e8a9139cf2","0d908f877d86","4c3e7538a548","ec5ceb05b9bd","c231523302e0","de46ebc2a912","907a1027b72d","1e55b1833c5a","cfcaf2a0b1fb","46dd6ac5aa27","42aa845c0255","8841ba8082c0","2a7f92213330","b0d0f618e0f5","0c4af2b55288","8139c6e91cc3","571ba34e8eb2","c9b7e6b6032d","e339985d49a3","59ca78cd6d3d","d5a80a414222","de46ebc2a912","27f152e2b00e","ca862bbb414a","a5853dc4b78c","e5546f3ae634","e8958e7692ef","e7338f12ba61","880609a33a69","7ecde1bac99c","63e41f367e92","2e2a83c01c8e","ba80d72bef71","1a1abd3edb23","2ccd01cfb043","9147c93c6fa7","b7f3b90a929e","0cc09293b056","eba1c87c9838","fd7d288b06ca","4d21dd4daeff","ba183330b7b6","b76a3ea8ca8d","4e1acf0ca66a","ab2653f1ee3f","abba89abaaf5","29a22772cd30","4a546d41334a","e93f78d0a28d","21f577049555","a597e699195e","1c5092e0a777","48d7650079fd","11397af10597","b7803ed106b0","4e5cc5f0d513","2e9f87d2f89d","430722ccc272","4cff92a09f22","f7a609b55aee","838f36dc8710","b3c150e76316","c58cf5cddbf4","ee1c5a383fa7","3cbcebbeaa13","11363f628705","ad4e96a70342","0c10ea273813","5e30e0c1ad25","0b4493de711f","44731e8cb20e","6d6faca46649","398cc618e1b9","0d2ee3197e19","953d4f3c66cf","ed643a902d14","7f8165f06c6f","125b69b22066","9422cd378ece","dde6284aaab1","78722cb00d3a","61b379c49f7c","bfdde73ce3fb","4934895f3132","e8c88c3cb781","0539a3986253","3b1d30064a6d","c0d140c17f1c","cee68c209ad3","f3c6efd90e8b","9b70f54211d4","82ac7baa0246","e55e458d27c1","dca357a507a1","39d277e07fce","6281457aeeff","d90432c4aa86","29e4603d57a2","3cb7ea59f73b","4934895f3132","09d52dd557ee","0539a3986253","6123516b5ae2","c0d140c17f1c","4621f814d24c","f3c6efd90e8b","87a307aa2c87","82ac7baa0246","5a7b84d874b8","dca357a507a1","1453012b188c","6281457aeeff","4c94424325c4","29e4603d57a2","ecfa805a1fbf","4934895f3132","e8c88c3cb781","0539a3986253","3b1d30064a6d","c0d140c17f1c","cee68c209ad3","f3c6efd90e8b","a9256dbcdf59","3434400ae562","212ebd8bcc24","aa4d1c55776a","5cca57e685de","ce462f88fe00","e11c75d2a789","5551250cef92","5a3f760f3e56","5cd191a8fe4b","1b08e869010b","6165d889d55f","47fcf9fd6923","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","69c23b53890d","297363a13342","ec2a477092e5","3b064f77cb1d","9a7f511fae22","d68b45dd3522","073b8c3b5f33","c05a56bbda83","cf48507d808e","6165d889d55f","14a3c45d48b3","7544fcb0f024","e71065c5c3d2","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","82bc3453ae39","297363a13342","113106f4b8ad","3b064f77cb1d","96886ba1356d","d68b45dd3522","2e9e5acf4310","c05a56bbda83","67341198d5fc","6165d889d55f","47fcf9fd6923","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","87f324382ddb","297363a13342","8f127f73ecce","3b064f77cb1d","9a7f511fae22","d68b45dd3522","073b8c3b5f33","c05a56bbda83","cf48507d808e","6165d889d55f","65fad0090cce","7544fcb0f024","596bf151795f","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","82bc3453ae39","297363a13342","113106f4b8ad","3b064f77cb1d","1937b86ad4e1","d68b45dd3522","7b3df45ae2b0","c05a56bbda83","67341198d5fc","6165d889d55f","47fcf9fd6923","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","191ac5ebea86","4a2c31e9f73c","69c23b53890d","297363a13342","8f127f73ecce","3b064f77cb1d","9a7f511fae22","d68b45dd3522","073b8c3b5f33","c05a56bbda83","36378790a743","6165d889d55f","14a3c45d48b3","7544fcb0f024","596bf151795f","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","82bc3453ae39","297363a13342","3aab110d3ab4","3b064f77cb1d","96886ba1356d","d68b45dd3522","7b3df45ae2b0","c05a56bbda83","67341198d5fc","6165d889d55f","47fcf9fd6923","7544fcb0f024","5ee1b0bd60ac","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","69c23b53890d","297363a13342","8f127f73ecce","3b064f77cb1d","9a7f511fae22","d68b45dd3522","d037fe709194","c05a56bbda83","cf48507d808e","6165d889d55f","14a3c45d48b3","7544fcb0f024","596bf151795f","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","8fabf56925ee","297363a13342","113106f4b8ad","3b064f77cb1d","96886ba1356d","d68b45dd3522","7b3df45ae2b0","c05a56bbda83","67341198d5fc","6165d889d55f","ba4e6a89c2b0","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","69c23b53890d","297363a13342","8f127f73ecce","3b064f77cb1d","46e6ac39d7dc","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","12f7efaf7233","1f06d5dba06d","ae30c1906491","708af1b1d9fd","9d65c167e872","2776e024cf3c","ea21bed6151d","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","552dac3e39af","0eaa9a479b77","4d7ae51540d1","1833c9fcad7f","01fb3017c243","0b8600ebe131","2c893a5045ce","1f06d5dba06d","7387a394dfca","708af1b1d9fd","9ffc9065325a","2776e024cf3c","41da3cd296aa","c2e212de1a30","592ec12ca639","8bfd110c83ee","c22a5018b8fe","0eaa9a479b77","351acdc0702c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","12f7efaf7233","1f06d5dba06d","ae30c1906491","708af1b1d9fd","53d4d0da405f","2776e024cf3c","a087777cde7c","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","552dac3e39af","0eaa9a479b77","4d7ae51540d1","1833c9fcad7f","1e73a0f33e8e","0b8600ebe131","2ef595110933","1f06d5dba06d","7387a394dfca","708af1b1d9fd","9ffc9065325a","2776e024cf3c","41da3cd296aa","c2e212de1a30","6be6cb5c15d0","8bfd110c83ee","e2d905a5b527","0eaa9a479b77","351acdc0702c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","12f7efaf7233","1f06d5dba06d","60b9748b195e","708af1b1d9fd","9d65c167e872","2776e024cf3c","a087777cde7c","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","552dac3e39af","0eaa9a479b77","fa9f0ebc254c","1833c9fcad7f","01fb3017c243","0b8600ebe131","2ef595110933","1f06d5dba06d","7387a394dfca","708af1b1d9fd","9ffc9065325a","2776e024cf3c","e4cf4ea70abc","c2e212de1a30","592ec12ca639","8bfd110c83ee","e2d905a5b527","0eaa9a479b77","351acdc0702c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","eeab9a7f7dc1","1f06d5dba06d","ae30c1906491","708af1b1d9fd","9d65c167e872","2776e024cf3c","a087777cde7c","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","4dfd133ad81b","0eaa9a479b77","4d7ae51540d1","1833c9fcad7f","01fb3017c243","0b8600ebe131","2ef595110933","1f06d5dba06d","7387a394dfca","708af1b1d9fd","5f57167f0c53","2776e024cf3c","e78fd3531516","c2e212de1a30","f9a400bff777","59caea36b5e0","5d89f96fa984","2980511df466","4c82cd92e098","c03f04631f7d","30bda4e83a07","0e31d137f86e","c5aae88821de","5654375101af","5f22b45b8b76","05329d2ded9d","a9edd8bc0486","5364e83ccc61","327d31d487ad","b1b9910c45a0","f7e0c0a2733d","301a7c5df884","b8f3d330eba2","6f536f319004","f62c4e64d63d","d2384dd93933","d6c184c4d8ce","ff41f3bf712b","2878ba50f4b2","5ee1dcb46cdf","11a0013b4e8e","49fba95bdd53","47c9f27636aa","352ba8311735","28d0b68f6e49","43158ec89a15","631c7547a970","cb744ea0f185","30f8f0018233","90fbca596e60","54b267c516cc","7c316fd94854","5bf25780e994","ca68e47c6ae1","5577ba919e6c","e26b79853608","3dff4034bdaf","0042ba943478","7a623f48c7a2","30e1e63f03fd","fed6edbe972d","0e5c148adbb3","71456ad2bf98","21c055293b7e","646720888364","a5209bdf1f59","bcd15ed35363","19c81c92c2e6","98b8f7801089","e6ba6885ecb5","22b953a71795","455a6b996708","85f46406dda5","1382a45fef6a","436acd2633b7","3475e37319a8","b396cfd05da1","976df835889a","5ded522e0327","2c017de91b3e","89ae0c5f1c17","5687ab8694fd","2eff5cc7dc74","fe3c3e2c13d1","e80d66434ce6","76f4ea82b828","2ab8261125a7","ff5420e6b2a3","43a7d2634ff6","c70495a1f75c","94d8f8ce5043","94ff3ab105b0","985529387678","785511817d4b","24a1adf92f36","497980de1251","d4a6a51f9218","e8715ec8653f","230c942216d2","2580346b1b46","53cd4220eca7","84a096550ac1","f7cc30c8fa5d","965b1dcb97e5","0cc3a8ba2902","e192874cebce","6e22b219cddb","5c1ead6563f0","3f6a7e594eb1","def9c5a77025","592c1a49b8fd","4977b963d228","961f0067b50a","49ef02f10098","eb232ac54032","1fb123a45b62","1742ea63627e","999fe96df3b9","d13ba0024130","732c53902ed5","86c834015bb6","c0a49083b628","23d67e333c19","4998aaf382f9","db0ff5272553","eace43f9e2a7","c918e972e49e","e17e26c07b54","be2fdf7b5cb8","a2621da179ee","39d80041f735","ed738809a953","55a0a021d901","4677fcee02d8","3f11096041b3","c7fe7b1e3b21","5da694119e25","4ac99e0db557","3e1c044af319","5eb1edb8e8cb","de4c9a4f94cb","62d5e1bb884a","edb8f370ef4b","0249965113df","9824d5c65253","7d7ef94c90ae","4eab8c99f9f9","c1f677d7a872","0be7cf52ef50","a2e1bd2b846f","2ff611a1978b","5335c54341ea","d618c0adc4bc","233cae8716e8","9b1d65c1a048","5eb1edb8e8cb","0ac11c8448f1","62d5e1bb884a","1df1c65cecfa","0249965113df","e249e47f294d","7d7ef94c90ae","64e836145a9a","c1f677d7a872","da61859d0441","a2e1bd2b846f","6c31bbcca4e9","5335c54341ea","c7c1203ead25","233cae8716e8","2a08089712f8","5eb1edb8e8cb","5efab0d57ae1","62d5e1bb884a","edb8f370ef4b","0249965113df","9824d5c65253","7d7ef94c90ae","4eab8c99f9f9","c1f677d7a872","6a76a5998f7b","a2e1bd2b846f","e0452bd7acf2","5335c54341ea","d618c0adc4bc","233cae8716e8","9b1d65c1a048","5eb1edb8e8cb","0ac11c8448f1","62d5e1bb884a","53959a713bde","0249965113df","19cf0fc13ee8","7d7ef94c90ae","64e836145a9a","c1f677d7a872","da61859d0441","a2e1bd2b846f","6c31bbcca4e9","5335c54341ea","54a199cd666b","233cae8716e8","99d4c4abd866","5eb1edb8e8cb","5efab0d57ae1","62d5e1bb884a","edb8f370ef4b","0249965113df","9824d5c65253","7d7ef94c90ae","f2b5fed5f55e","d0a50167c18e","afa0c453a61e","8ed5703a72df","35334358a646","a6ad42c9a39b","7cbba9701d31","f2340d5b1d89","46042a7894fc","91b69e35ac22","9fcd52d64375","c960b11deb05","0d3afdcf0f98","b0c86ec07210","953f8d99c11b","055e2b1e57a6","bd7162a41e27","ebdb1ce6da48","c6e9b151d2dd","c5e92885970c","6cd688db5d78","6247d1e10656","79595ccb8a90","de5ce668282b","7ed6d9e93d63","c7413fcd141d","37d48004e4f6","c960b11deb05","758be509caf9","b0c86ec07210","1afc31df434f","055e2b1e57a6","8834e57ce651","ebdb1ce6da48","75166256da4c","c5e92885970c","53437b45d294","6247d1e10656","afa632c5dfb3","de5ce668282b","da7091474299","c7413fcd141d","2a546e633b87","c960b11deb05","0d3afdcf0f98","b0c86ec07210","953f8d99c11b","055e2b1e57a6","bd7162a41e27","ebdb1ce6da48","0cdcfa545df5","1b1f7ca5399c","f0e4c5adf019","704b342045a2","94b9bc32750e","4f4f37bf3e75","22b41badd636","fc8625768c1e","03cdbb12a5f7","de5cd1cb32c3","a017d54b3494","e0e3637cb318","f073804c3321","4cc2adae8c75","d9af783e726e","2ccf635c3253","344d407a11e6","1b1f7ca5399c","82fd4af38f41","704b342045a2","e9a493871c95","4f4f37bf3e75","bd6d9b72795b","fc8625768c1e","2b4a45af0433","de5cd1cb32c3","9c7ddc867135","e0e3637cb318","11db8a3586ad","4cc2adae8c75","23de1e0f7065","2ccf635c3253","0cf1fa008a1d","1b1f7ca5399c","f0e4c5adf019","704b342045a2","94b9bc32750e","4f4f37bf3e75","22b41badd636","fc8625768c1e","28b66b39f9b5","de5cd1cb32c3","e1428cdae4f1","e0e3637cb318","f073804c3321","4cc2adae8c75","d9af783e726e","2ccf635c3253","344d407a11e6","1b1f7ca5399c","0c056fc3f347","704b342045a2","0fd82dee7980","4f4f37bf3e75","bd6d9b72795b","fc8625768c1e","2b4a45af0433","de5cd1cb32c3","9c7ddc867135","e0e3637cb318","de6c8cf36c75","4cc2adae8c75","59000b3bab7d","2ccf635c3253","0cf1fa008a1d","1b1f7ca5399c","f0e4c5adf019","704b342045a2","94b9bc32750e","4f4f37bf3e75","2bba735a9ffd","fc8625768c1e","03cdbb12a5f7","de5cd1cb32c3","e1428cdae4f1","e0e3637cb318","f073804c3321","4cc2adae8c75","d9af783e726e","2ccf635c3253","de8e4e41cdd0","1b1f7ca5399c","82fd4af38f41","704b342045a2","0fd82dee7980","4f4f37bf3e75","bd6d9b72795b","fc8625768c1e","2b4a45af0433","de5cd1cb32c3","0bf7a6bcef7d","e0e3637cb318","11db8a3586ad","4cc2adae8c75","59000b3bab7d","2ccf635c3253","0cf1fa008a1d","1b1f7ca5399c","f0e4c5adf019","704b342045a2","41b56cfb84de","4f4f37bf3e75","22b41badd636","fc8625768c1e","03cdbb12a5f7","de5cd1cb32c3","e1428cdae4f1","e0e3637cb318","f073804c3321","4cc2adae8c75","49566603e624","2ccf635c3253","344d407a11e6","1b1f7ca5399c","82fd4af38f41","704b342045a2","0fd82dee7980","4f4f37bf3e75","bd6d9b72795b","d8e21911dd33","06addb4ed9a1","9e65f4fed7e0","901b831efa56","976d72f7f74c","4d0e53a2e29a","14f67e0afd78","4746694ae0ac","0fbcf59d407a","4fb2da5c726f","c3c83314b6fb","cd9cec69a3d5","49ae7507155d","11307711d1b8","73ff5b65ee8c","3e69ee3a52df","1da308ad9cbd","a358d1070a6d","2705650e6062","a2c1bcde62c9","72f22f03dc6f","b381f1153b82","41340b8ea079","76091aac8583","e615421d8967","1b5d0878e983","62eb6234689b","c6b6ed167ae6","67ffc5bfefac","3508729ddaa5","1414fb7a63c7","eecff076d7db","b20b43b4bab6","2e32ef2453b7","84d3360db656","6f6dd68a708a","fd5316bc94e2","ff872cd7a407","b3469f6e4a7b","6caa0881fac0","01f2ec5a4101","ef064dda2b7a","298d5ca138b9","3fef06d36e69","316c3c263079","d2475c2c8267","c80cacb1d574","b74449f83f38","3e0c3fe67c02","4a641a045387","98fd018d5346","f538049d5f3d","831b913eb232","dd8a73eea92a","e6043a2a7f23","bd5f87ea5ee2","dfc49044a774","31f7e5dca827","5bf6f19a4543","5610be2b897b","a0001f5fa964","b4af02c50151","b9c92c960d9a","30cb71db8744","eb9fb4b2ec6b","988a489504a4","f0493d6f995a","2ca866ae26f2","d9a0aa34f192","0b9d1c6576e7","8bb167755636","3c5bd077b5bf","e1af0e305bfd","c1c6f0792377","b8e1070073f2","70c25b930cbf","bfb66efa0310","aa89469d6fa4","4995e8b884c8","2e043e4077e4","16e9ae4c2d81","5b46700fb129","25c87430f305","493e924665b5","bd60ca910784","7d6516f6996d","17f76a181417","c74c5f6ef3fa","67a8d980b1f0","2b6ce294995e","d8714c666841","10691015bd03","c1d9e6d8b89e","f02d55a4fad2","920bc61e4b5e","364faf3b8c19","ca051554dcd7","eac1a5ef6f61","648e2efc6ad6","28a118155856","e7ec9270c434","8f902995eb10","9afd2130250f","45f056982aea","16fac55de014","f7e478956b9e","90c8db2ab2ee","403872fdb99a","c04356306934","ac4c83600322","0d53139833b5","eebd639c72f1","ca051554dcd7","cd8249d0020b","648e2efc6ad6","a0365eaf5848","e7ec9270c434","737443f5f3e3","9afd2130250f","a241533f579b","16fac55de014","57375842dad6","90c8db2ab2ee","e93b23aa0dd2","c04356306934","cb2b25072e26","0d53139833b5","364faf3b8c19","ca051554dcd7","eac1a5ef6f61","648e2efc6ad6","445d06db03ea","2435f827148c","237eb5f5e163","815f565e7d4d","9288e09c3551","485c76fcb9cf","b7ec686a7417","6b553f635f69","f0e3aac814ca","6c9306dca1d8","2e3a29105c56","8a924ddd3e60","d8e6d0db004e","ad8e79fe4d95","34d2adc9ebb1","b5896758df2d","0a685e6b72ef","2ab15573c8a3","3627e78a7b2e","7b9ebd7f9b56","6f6f3cd73862","4b85284e7538","f27081f7c489","c833e19741f8","d13c0423f20b","a962114b1a85","16b1eee76bc1","2420af897ddf","7af021c80820","4679061e987f","1e7b9b79da4b","92f1cb59faba","665b773c246c","8d6254ac6b96","c3702e0ad428","7b9ebd7f9b56","257fe7e9b79a","4b85284e7538","93c9703df68e","c833e19741f8","af33c2031b98","a962114b1a85","0261eac0ca94","2420af897ddf","4ab5df3d3bcb","4679061e987f","bce4e1471840","92f1cb59faba","8c7411e5fc38","8d6254ac6b96","3ff9d796dbe3","7b9ebd7f9b56","37276f190b08","4b85284e7538","f27081f7c489","c833e19741f8","d13c0423f20b","a962114b1a85","16b1eee76bc1","2420af897ddf","ce04f34f76b2","7e895b6c810f","c34786c581b9","23a07dd0b091","f1a41719a974","be827971ff08","8509b805d74c","0133599f86d3","9124c4367899","d27b29f7ff1e","fb53ac503b01","5a4d4f1ee5a3","10219390b3b4","774254cc9eff","ee72610f16db","a98fbc6526be","db67b29f937c","6a0c353e4dfe","bc1de8bd835b","fdca2183f535","29ad2ed98e0a","35d339bbb781","9df56e1adfa0","e96c43294640","004a1406c1d0","274c2910a098","02aebbcf73ba","c60071b5f03c","aa1e9e218e0e","43332c839f97","9059dbf4df16","3e57e633d8a2","e1c801574296","5d818912fc5d","b0f59238a93b","b5d1bb7b6027","aac75c838455","4838303a77be","079920e09b45","4734783f3581","287a7c08dd63","983de59f948c","1b0bd857cd66","16f435405527","0e012dc158e9","e9d069d91dd6","a13ea55ec35d","b6e96f31c24c","198bf4b608db","cdb9224916d6","f1efef892e03","b27e4d213767","6551fba91a14","800a69340bc6","621aa2a509c9","1412e0f45990","e20efabde236","983de59f948c","106929d20c8b","16f435405527","3de1fd7c67d5","e9d069d91dd6","dc014928b729","b6e96f31c24c","58d1b5876a02","cdb9224916d6","6ecd6519d0c8","b27e4d213767","97707bff65f2","800a69340bc6","4c619c39a15e","1412e0f45990","a0ea70c8ae42","983de59f948c","bc86782bc4b1","16f435405527","0177d5dbd233","e9d069d91dd6","49a231de6e87","b6e96f31c24c","66f53e6016e8","cdb9224916d6","1fb0538d622f","b27e4d213767","59900bba7d50","800a69340bc6","43a4b6dc80f5","1412e0f45990","bf01998b4789","983de59f948c","8b3b39ff0a1e","16f435405527","f72671d59f9c","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","3f126cec61e2","43e1a665f4cc","442eb5b1debf","75bce699cdf4","247e8ff836ed","b5b617a00a4f","57a836d90d4f","6f154339960f","6f299ae701c1","19e5c7c93377","388b3f01d251","e5fd61e7a6ea","9f54337f5c08","ade2773029cc","df1009c4a9a0","46f17ae8375e","d4ea41e5b831","09c97d938de4","f43fddd98996","51cab0a94ae9","3119e3242a6c","02bfd6d98aca","a43eb7dc5acb","714818a8aa0b","aaf8cfaf8c9f","d66e36431185","bab609b3e28a","23e86057df2d","12e6d28f4ed3","85622e1ee618","c05aa2aa715c","2504f21158ef","dd9dacb6b857","84c2c9566126","c2826897f357","a12b2d759351","1b400cec595a","fae9365f0b10","b7656c1647ae","fa32856b342c","cdefc2172b16","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","023a8d498ca9","cdb9224916d6","2ed2f514b6ee","b27e4d213767","003e7724d022","800a69340bc6","18347aa3b5a4","1412e0f45990","f99bb41d0a03","983de59f948c","687d03619cea","16f435405527","f72671d59f9c","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","a8ff3d2a94cb","cdb9224916d6","1e1b117f2825","b27e4d213767","606e16408a63","800a69340bc6","57010dc6149f","1412e0f45990","315164088708","983de59f948c","2a0e76615117","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","023a8d498ca9","cdb9224916d6","2ed2f514b6ee","b27e4d213767","38313e35f020","800a69340bc6","f905fed8392a","1412e0f45990","f99bb41d0a03","983de59f948c","687d03619cea","16f435405527","f72671d59f9c","e9d069d91dd6","e722e88a803c","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","606e16408a63","800a69340bc6","57010dc6149f","1412e0f45990","37120d10fbe6","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","023a8d498ca9","cdb9224916d6","9f499aa88890","b27e4d213767","003e7724d022","800a69340bc6","f905fed8392a","1412e0f45990","f99bb41d0a03","983de59f948c","687d03619cea","16f435405527","caaeded1412a","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","606e16408a63","800a69340bc6","340a645674b2","1412e0f45990","315164088708","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e8419def58aa","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527"],"keyframes":{"0":{"tx":[[1088,0,"0000000000000000"],[579,0,"08000000020000ef"]],"torque_can":0,"accel":0.0},"100":{"tx":[[1892,0,"0210020000000000"],[1088,0,"0000000000000000"],[579,0,"48000000020000eb"]],"torque_can":0,"accel":0.0},"220":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00080"],[866,0,"fff7fefe1fc78c80"],[867,0,"fff7fefe1fc00000"],[868,0,"fff7fefe1fc00000"],[869,0,"fff7fe7ffbff3fc0"],[870,0,"fff7fe7ffbff3fc0"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00080"],[866,2,"fff7fefe1fc78c80"],[867,2,"fff7fefe1fc00000"],[868,2,"fff7fefe1fc00000"],[869,2,"fff7fe7ffbff3fc0"],[870,2,"fff7fe7ffbff3fc0"],[539,0,"01ffe3ffc08000dd"],[540,0,"02010b0000000000"],[539,2,"01ffe3ffc08000dd"],[540,2,"02010b0000000000"],[579,0,"c8000000020000e3"]],"torque_can":0,"accel":0.0},"320":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008a"],[866,0,"fff7fefe1fc78c8a"],[867,0,"fff7fefe1fc0000a"],[868,0,"fff7fefe1fc0000a"],[869,0,"fff7fe7ffbff3fca"],[870,0,"fff7fe7ffbff3fca"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008a"],[866,2,"fff7fefe1fc78c8a"],[867,2,"fff7fefe1fc0000a"],[868,2,"fff7fefe1fc0000a"],[869,2,"fff7fe7ffbff3fca"],[870,2,"fff7fe7ffbff3fca"],[539,0,"01ffe20106800294"],[540,0,"0a010b0000001000"],[539,2,"01ffe20106800294"],[540,2,"0a010b0000001000"],[579,0,"08000000020000ef"]],"torque_can":0,"accel":0.008},"540":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00080"],[866,0,"fff7fefe1fc78c80"],[867,0,"fff7fefe1fc00000"],[868,0,"1e0e00fe1c000000"],[869,0,"fff7fe7ffbff3fc0"],[870,0,"fff7fe7ffbff3fc0"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00080"],[866,2,"fff7fefe1fc78c80"],[867,2,"fff7fefe1fc00000"],[868,2,"1e0e00fe1c000000"],[869,2,"fff7fe7ffbff3fc0"],[870,2,"fff7fe7ffbff3fc0"],[539,0,"01ffe27a8680009d"],[540,0,"0a018b4000001000"],[539,2,"01ffe27a8680009d"],[540,2,"0a018b4000001000"],[579,0,"cc1b0000020000c4"]],"torque_can":1051,"accel":0.98},"710":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00081"],[866,0,"fff7fefe1fc78c81"],[867,0,"fff7fefe1fc00001"],[868,0,"fff7fefe1fc00001"],[869,0,"fff7fe7ffbff3fc1"],[870,0,"fff7fe7ffbff3fc1"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00081"],[866,2,"fff7fefe1fc78c81"],[867,2,"fff7fefe1fc00001"],[868,2,"fff7fefe1fc00001"],[869,2,"fff7fe7ffbff3fc1"],[870,2,"fff7fe7ffbff3fc1"],[539,0,"01ffe20006841582"],[540,0,"0a010b0000001000"],[539,2,"01ffe20006841582"],[540,2,"0a010b0000001000"],[579,0,"65a000000200004c"]],"torque_can":-608,"accel":0.0},"810":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008b"],[866,0,"fff7fefe1fc78c8b"],[867,0,"fff7fefe1fc0000b"],[868,0,"040e00001c00000b"],[869,0,"fff7fe7ffbff3fcb"],[870,0,"fff7fe7ffbff3fcb"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008b"],[866,2,"fff7fefe1fc78c8b"],[867,2,"fff7fefe1fc0000b"],[868,2,"040e00001c00000b"],[869,2,"fff7fe7ffbff3fcb"],[870,2,"fff7fe7ffbff3fcb"],[539,0,"01ffe149868417b8"],[540,0,"0a018b6000001000"],[539,2,"01ffe149868417b8"],[540,2,"0a018b6000001000"],[579,0,"a87800000200006d"]],"torque_can":120,"accel":-1.46},"960":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008a"],[866,0,"fff7fefe1fc78c8a"],[867,0,"fff7fefe1fc0000a"],[868,0,"040e00001c00000a"],[869,0,"fff7fe7ffbff3fca"],[870,0,"fff7fe7ffbff3fca"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008a"],[866,2,"fff7fefe1fc78c8a"],[867,2,"fff7fefe1fc0000a"],[868,2,"040e00001c00000a"],[869,2,"fff7fe7ffbff3fca"],[870,2,"fff7fe7ffbff3fca"],[539,0,"01ffe1ffe68002b7"],[540,0,"0a018b6000000000"],[539,2,"01ffe1ffe68002b7"],[540,2,"0a018b6000000000"],[579,0,"0878000002000077"]],"torque_can":120,"accel":-0.001},"1060":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00084"],[866,0,"fff7fefe1fc78c84"],[867,0,"fff7fefe1fc00004"],[868,0,"040e00001c000004"],[869,0,"fff7fe7ffbff3fc4"],[870,0,"fff7fe7ffbff3fc4"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00084"],[866,2,"fff7fefe1fc78c84"],[867,2,"fff7fefe1fc00004"],[868,2,"040e00001c000004"],[869,2,"fff7fe7ffbff3fc4"],[870,2,"fff7fe7ffbff3fc4"],[539,0,"01ffe1ffe68004b5"],[540,0,"0a018b6000000000"],[539,2,"01ffe1ffe68004b5"],[540,2,"0a018b6000000000"],[579,0,"4878000002000073"]],"torque_can":120,"accel":-0.001},"1180":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00080"],[866,0,"fff7fefe1fc78c80"],[867,0,"fff7fefe1fc00000"],[868,0,"040e00001c000000"],[869,0,"fff7fe7ffbff3fc0"],[870,0,"fff7fe7ffbff3fc0"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00080"],[866,2,"fff7fefe1fc78c80"],[867,2,"fff7fefe1fc00000"],[868,2,"040e00001c000000"],[869,2,"fff7fe7ffbff3fc0"],[870,2,"fff7fe7ffbff3fc0"],[539,0,"01ffe291c6800046"],[540,0,"0a018b4000001000"],[539,2,"01ffe291c6800046"],[540,2,"0a018b4000001000"],[579,0,"c87800000200006b"]],"torque_can":120,"accel":1.1665},"1280":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008a"],[866,0,"fff7fefe1fc78c8a"],[867,0,"fff7fefe1fc0000a"],[868,0,"040e00001c00000a"],[869,0,"fff7fe7ffbff3fca"],[870,0,"fff7fe7ffbff3fca"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008a"],[866,2,"fff7fefe1fc78c8a"],[867,2,"fff7fefe1fc0000a"],[868,2,"040e00001c00000a"],[869,2,"fff7fe7ffbff3fca"],[870,2,"fff7fe7ffbff3fca"],[539,0,"01ffe20006841285"],[540,0,"0a018b6000001000"],[539,2,"01ffe20006841285"],[540,2,"0a018b6000001000"],[579,0,"086c000002000083"]],"torque_can":108,"accel":0.0},"1330":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008f"],[866,0,"fff7fefe1fc78c8f"],[867,0,"fff7fefe1fc0000f"],[868,0,"040e00001c00000f"],[869,0,"fff7fe7ffbff3fcf"],[870,0,"fff7fe7ffbff3fcf"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008f"],[866,2,"fff7fefe1fc78c8f"],[867,2,"fff7fefe1fc0000f"],[868,2,"040e00001c00000f"],[869,2,"fff7fe7ffbff3fcf"],[870,2,"fff7fe7ffbff3fcf"],[539,0,"01ffe18006841bfd"],[540,0,"0a018b6000001000"],[539,2,"01ffe18006841bfd"],[540,2,"0a018b6000001000"],[579,0,"28000000020000ed"]],"torque_can":0,"accel":-1.024},"1430":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00089"],[866,0,"fff7fefe1fc78c89"],[867,0,"fff7fefe1fc00009"],[868,0,"040e00001c000009"],[869,0,"fff7fe7ffbff3fc9"],[870,0,"fff7fe7ffbff3fc9"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00089"],[866,2,"fff7fefe1fc78c89"],[867,2,"fff7fefe1fc00009"],[868,2,"040e00001c000009"],[869,2,"fff7fe7ffbff3fc9"],[870,2,"fff7fe7ffbff3fc9"],[539,0,"01ffe18006841dfb"],[540,0,"0a018b6000001000"],[539,2,"01ffe18006841dfb"],[540,2,"0a018b6000001000"],[579,0,"68000000020000e9"]],"torque_can":0,"accel":-1.024},"1530":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00083"],[866,0,"fff7fefe1fc78c83"],[867,0,"fff7fefe1fc00003"],[868,0,"040e00001c000003"],[869,0,"fff7fe7ffbff3fc3"],[870,0,"fff7fe7ffbff3fc3"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00083"],[866,2,"fff7fefe1fc78c83"],[867,2,"fff7fefe1fc00003"],[868,2,"040e00001c000003"],[869,2,"fff7fe7ffbff3fc3"],[870,2,"fff7fe7ffbff3fc3"],[539,0,"01ffe25a06800f2e"],[540,0,"0a018b4000001000"],[539,2,"01ffe25a06800f2e"],[540,2,"0a018b4000001000"],[579,0,"a8000000020000e5"]],"torque_can":0,"accel":0.72},"1580":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00088"],[866,0,"fff7fefe1fc78c88"],[867,0,"fff7fefe1fc00008"],[868,0,"1e0e00fe1c000008"],[869,0,"fff7fe7ffbff3fc8"],[870,0,"fff7fe7ffbff3fc8"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00088"],[866,2,"fff7fefe1fc78c88"],[867,2,"fff7fefe1fc00008"],[868,2,"1e0e00fe1c000008"],[869,2,"fff7fe7ffbff3fc8"],[870,2,"fff7fe7ffbff3fc8"],[539,0,"01ffe2000680088f"],[540,0,"0a018b4000001000"],[539,2,"01ffe2000680088f"],[540,2,"0a018b4000001000"],[579,0,"c80c0000020000d7"]],"torque_can":12,"accel":0.0},"1640":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008e"],[866,0,"fff7fefe1fc78c8e"],[867,0,"fff7fefe1fc0000e"],[868,0,"1e0e00fe1c00000e"],[869,0,"fff7fe7ffbff3fce"],[870,0,"fff7fe7ffbff3fce"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008e"],[866,2,"fff7fefe1fc78c8e"],[867,2,"fff7fefe1fc0000e"],[868,2,"1e0e00fe1c00000e"],[869,2,"fff7fe7ffbff3fce"],[870,2,"fff7fe7ffbff3fce"],[539,0,"01ffe201a68006f0"],[540,0,"0a018b4000001000"],[539,2,"01ffe201a68006f0"],[540,2,"0a018b4000001000"],[579,0,"88000000020000e7"]],"torque_can":0,"accel":0.0125},"1680":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00082"],[866,0,"fff7fefe1fc78c82"],[867,0,"fff7fefe1fc00002"],[868,0,"1e0e00fe1c000002"],[869,0,"fff7fe7ffbff3fc2"],[870,0,"fff7fe7ffbff3fc2"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00082"],[866,2,"fff7fefe1fc78c82"],[867,2,"fff7fefe1fc00002"],[868,2,"1e0e00fe1c000002"],[869,2,"fff7fe7ffbff3fc2"],[870,2,"fff7fe7ffbff3fc2"],[539,0,"01ffe3ffc0800ad3"],[540,0,"02018b4000000000"],[539,2,"01ffe3ffc0800ad3"],[540,2,"02018b4000000000"],[579,0,"08000000020000ef"]],"torque_can":0,"accel":0.0},"1740":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00088"],[866,0,"fff7fefe1fc78c88"],[867,0,"fff7fefe1fc00008"],[868,0,"fff7fefe1fc00008"],[869,0,"fff7fe7ffbff3fc8"],[870,0,"fff7fe7ffbff3fc8"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00088"],[866,2,"fff7fefe1fc78c88"],[867,2,"fff7fefe1fc00008"],[868,2,"fff7fefe1fc00008"],[869,2,"fff7fe7ffbff3fc8"],[870,2,"fff7fe7ffbff3fc8"],[539,0,"01ffe2010680088e"],[540,0,"0a010b0000001000"],[539,2,"01ffe2010680088e"],[540,2,"0a010b0000001000"],[579,0,"c8000000020000e3"],[157,0,"1001dfc800000000"]],"torque_can":0,"accel":0.008},"1780":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008c"],[866,0,"fff7fefe1fc78c8c"],[867,0,"fff7fefe1fc0000c"],[868,0,"fff7fefe1fc0000c"],[869,0,"fff7fe7ffbff3fcc"],[870,0,"fff7fe7ffbff3fcc"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008c"],[866,2,"fff7fefe1fc78c8c"],[867,2,"fff7fefe1fc0000c"],[868,2,"fff7fefe1fc0000c"],[869,2,"fff7fe7ffbff3fcc"],[870,2,"fff7fe7ffbff3fcc"],[539,0,"01ffe3ffc4800ccd"],[540,0,"02010b0000000000"],[539,2,"01ffe3ffc4800ccd"],[540,2,"02010b0000000000"],[579,0,"48000000020000eb"]],"torque_can":0,"accel":0.0},"1880":{"tx":[[579,0,"88000000020000e7"]],"torque_can":0,"accel":0.0}}} \ No newline at end of file +{"frames":1940,"phases":[{"name":"boot_stock_radar","start":0},{"name":"fsc_settled_silencing","start":100},{"name":"radar_silenced_armed_idle","start":220},{"name":"engage_steer_ramp","start":320},{"name":"highway_rail","start":540},{"name":"approach_stop","start":710},{"name":"hold_on_the_plan","start":810},{"name":"hold_body_latched","start":960},{"name":"latched_release","start":1060},{"name":"drive_off","start":1180},{"name":"second_approach","start":1280},{"name":"hold_never_latched","start":1330},{"name":"never_latched_release_breakaway","start":1430},{"name":"moving_again","start":1530},{"name":"gas_override","start":1580},{"name":"steer_undelivered_latch","start":1640},{"name":"cancel","start":1680},{"name":"icbm_taps","start":1740},{"name":"handback","start":1780},{"name":"stock_radar_back","start":1880}],"hashes":["085196a105f5","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","b49c92fa77fd","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","85c87fc3d570","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","334a1c83b07a","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","c78e4aa1829c","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","2c4eaebea275","800a69340bc6","2b22241e9837","1412e0f45990","90bc334052f2","983de59f948c","7c3880dadf25","16f435405527","d868cf8b9eb3","e9d069d91dd6","5cdd1b431e28","b6e96f31c24c","837be7322dd3","cdb9224916d6","62b9ac3abe51","b27e4d213767","7e6c5e76638b","800a69340bc6","15ec8f9bf8de","1412e0f45990","4828715b0a68","983de59f948c","436ffc21e9f3","16f435405527","89e890e0ad1d","e9d069d91dd6","7e05d4150e4c","b6e96f31c24c","983c37a03a92","cdb9224916d6","b09329e97375","b27e4d213767","60305535aff9","800a69340bc6","c44b0c354cc9","1412e0f45990","19f752850613","983de59f948c","61e7faeb0778","16f435405527","a65e85d59793","e9d069d91dd6","a054d45dfb7b","b6e96f31c24c","ebe73e1d19ce","cdb9224916d6","5ee52971faaa","b27e4d213767","a62a6b18a72a","800a69340bc6","aa34004e15fd","1412e0f45990","d9fe30fbef28","983de59f948c","f6cef6658264","16f435405527","bdf264122fe2","e9d069d91dd6","3a21097be289","b6e96f31c24c","6af99cc1822f","cdb9224916d6","6e3362de015e","b27e4d213767","8511d7c61fac","800a69340bc6","812198a04d5a","1412e0f45990","d0af8905ea8c","983de59f948c","ada8fa74a8e6","16f435405527","1ce667b90fdc","e9d069d91dd6","2146363892ee","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","8e9a0aa2dbf5","800a69340bc6","57010dc6149f","1412e0f45990","315164088708","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","583d17743af2","b6e96f31c24c","023a8d498ca9","cdb9224916d6","2ed2f514b6ee","b27e4d213767","003e7724d022","800a69340bc6","f905fed8392a","1412e0f45990","75d99df61ab2","a99779f4e620","b81134a92f0b","a8b6d0642893","41f20187ee57","3c8efbaec9c7","9937a3019db5","77febe97463e","df3a771bc5f2","3a532f464b1f","c532b5018c60","bd70e96efcf1","6aed5ce397e0","18a9a521e000","af02573a1c4e","15f5f91363b6","32debbec3cb2","fe8a1c534ed5","1ad48408936f","ae6ef2c7bf01","934cd756714e","3b01ab7a5349","f20cc90877fd","d549dc7a1a60","d17a07db074c","08aa16ac1ac7","612b2050b493","4fe29a28fa93","483ce4d55a45","d9bdebe61577","a008339f0511","8f3da26e3c3c","7762cebb4704","39ac666b0494","bf20ee797f2a","0ec135499cbc","e239a6f574f1","135529a3ddfc","7d138855e2d7","e0694d7ea27b","d1e25d3c3aea","a81016ac1298","9be6df67dcca","33d62c6209b4","ccbe24094865","a7cdb4ffd0c2","0fa68e7756b2","f8f3ce5f29cb","d83aef1c3948","23af3b7acc9d","d12c9166a6fa","4bfc4378ef82","e1dd9ab828fb","dfc95ecdbc34","3ca63e2464e1","3dda586b2a29","5ed9a2426071","5c13d572a904","5e424bf08eb7","b88044628052","25a3803e967c","6396d0d3a9e7","7c8be3576c84","23373325f926","82bb93406e86","5d93a7fe7a25","4df7addfb00c","cb00f4c45e23","5ca2e405e818","7cb669afb7d4","0fb2ca50748f","bac5e16b9243","c2629814fba9","58f034b2edab","77afce7a66e2","6fd75f28bd03","e7fa50a53672","7f05ab297129","a1eea159c6f7","34f257fe95d8","7a8eb28c3185","229d7d7b7eb1","6bf5346e2cc3","fd87043334d5","b8d3e21a927e","450f0ecd1703","7fb1239d75f5","60ef1dd3c519","399ea3e32b17","34d26365bcff","878b963cae1b","fd42fc6af137","10823561681c","4904d8cb364e","3e970d188e09","5c418cf23d51","983b3b5033e0","8e6100914ac5","28075a0ca0b8","44573ffa12cf","813b14230948","25eb0dc30e2d","64cf1cff9b53","782510113f7d","c79f5f8843c2","ccc09456c98b","78f5bc9298a6","e1571ed0f21e","fdd5091dfd9f","9013fac20981","9c662361a266","12268a073bc8","38b635a23994","b3a7d5fdaeed","16bbd6377507","e967dd17c83c","7f9a752aa110","a43f96ac9b90","b7e0b76d2c99","297270243b48","e79f0188f26e","0d1e2c5e4f8a","5dc994f62452","d016832d88f6","a4c8dca69e3e","aa666e2e0470","d6d768e77182","9f91cb9ca0f2","944971a0336f","0022a0757d12","8d29b75351cf","63933c0e7c55","76e2ee302084","6d79f03e6dca","aca6020298a7","032282c9d2d7","de1a200bac9a","5b5421c9bc21","5c22ab145bd5","7e802e993e2c","7124d0a3ffde","8173cbb09a28","d816ce6d7590","bad09aa2924c","c7802dddd344","31d97aa342a6","057742d19b12","5e3884cb26c0","00bd4d0cf678","0a407bedef76","6c1b0236cb8f","39818a69f804","0c848cc0193c","29193ade6fac","3fe1f76d80e2","63c01086fe1c","214a1ec5c13f","40a5c491f523","2c0ae7bfabe0","f8db3b77841d","0c7843f7993d","9219c46995bf","444b834d47aa","5f030aac0e33","19726c8f1ae3","396c26d6b95e","5c6f69d074f6","d84c3bfe5892","3eba51327957","cbb6bd25b6c4","42b2cf52efa2","63c01086fe1c","ad5d88bd624c","40a5c491f523","0b0809e4a246","f8db3b77841d","6fbdf599bba4","9219c46995bf","6293fa152ce3","5f030aac0e33","f0a2e5809ee9","396c26d6b95e","ae6efd474d50","d84c3bfe5892","39ace6a3f537","cbb6bd25b6c4","709cc523c25b","63c01086fe1c","214a1ec5c13f","40a5c491f523","17ec14e27120","f8db3b77841d","64d230e601a4","9219c46995bf","444b834d47aa","5f030aac0e33","19726c8f1ae3","396c26d6b95e","5c6f69d074f6","d84c3bfe5892","f568fedfbe7c","cbb6bd25b6c4","e88348839fb9","63c01086fe1c","ad5d88bd624c","40a5c491f523","0b0809e4a246","f8db3b77841d","6fbdf599bba4","9219c46995bf","731bb034e833","5f030aac0e33","252dd0207875","396c26d6b95e","ae6efd474d50","d84c3bfe5892","39ace6a3f537","cbb6bd25b6c4","709cc523c25b","63c01086fe1c","66dbf2fe1c71","2f869fd37679","320c402db2d1","b3e104a2fece","a8bad7bc056d","e5560d70f1f9","d2b5034634a6","69c156ba1ee9","7811c51e7a7b","6d7d2f59de36","4b0588cf1feb","9ec790df5363","e7aa4b203d96","06100db23eb7","ac9e2a88ecc0","abdcc58b6bf7","8cb7467b9474","1e85f0b7ac8b","5a9ba8aa60e9","9dc7adf2be27","1b588aa0c8f4","7ca4ee2d764a","1cc6e36e065a","0f9ed858175b","e5614b117dba","f8be53c332d4","d261bdd2ad3d","273d5ccccb01","6a3e113997da","597b740388ee","5483f32cc52e","2eb4c14b9b49","82a6763fbddd","ae5e74f27430","e77a75973d5f","87bc819afade","1318e6619c6a","2201df670318","48bd69e28f9c","efca2866dde2","1ee3207a9e87","be6b19a86479","5763b0490012","e07e9d90149b","92d1ce56849d","5a0b5f8c948b","73501129acf4","1daae5cb745d","0a94a7d66158","16560a652f13","77433d968a0f","e10bbf4b9340","3e2e167b9444","2dec728a1f90","8c025dab821e","0e610f5fcd29","6e38157db96b","90013f7a8fd9","c5cafebc5860","54aa8630e61b","ad45939e052e","fd1a31ac3637","770f9792f621","ea1021f4a78a","f85a796e9a53","e2add9713e4f","b1e1cc09ffd6","e72a9a28081f","bd020aec8fc4","73975ddd13f0","2edfa8744df7","79294d95e2c1","472534506622","3571a868ed3f","62011cbeab6c","d11cbc762557","7cec67553d47","5b518e086bdf","7f7edae37bbe","11c8d294530f","0b6c0a26fa96","003dd310bac0","8019474c6ed5","4d27a4628ead","8eaf389d6046","a40af7a2e4a8","99d8d04e8be0","df8eebbed457","6c298bdc0bb9","d6d0687a3bdd","0c98454899b6","2e31d57c07ed","7c56640fd325","c7eaa7d82597","82a77e064adf","5528b770c1f0","4dc712115737","159eaa001d6d","d14832c342cd","791568fac70f","ca08213c4594","4875b6a58791","10e36fbb0439","8209a93a2e4f","1a342248e00e","3e50399d339b","90003f4d40e4","981bc420f6e3","f09916dfa76c","4689b6898393","5de3ff16d2e7","ade7984f633f","8046eddeba02","e0f53e8fc61d","e2a9b4430016","4598668ed078","3b816f9313c5","cea22146c9a6","a88730a37ad6","76693af21556","03c086526f55","9cc53095958a","c6b3fa689742","9deefabaa15a","cdd693b95b6a","eed8dccd255e","bfc309bd6506","39409f1c21f6","60be9b1dd7ee","c3ddf6d9e3b9","1670dee63dde","0857dd411570","ae65c125d858","3507bd580555","f10a31e91722","4f1d3a13e493","296b4a9649e7","489233980094","0cc30d9bcc92","b5fc8791dcac","990fd55699a5","01b3533303ea","f98792537442","a93e5ded447c","47512d87945c","214026f73c9b","fe2bb07339cc","08bf61f42cc5","1e921d54741c","0d908f877d86","2878f2c847bc","ec5ceb05b9bd","1ae10787ddfc","de46ebc2a912","67d320741fa7","1e55b1833c5a","e455d2146a21","46dd6ac5aa27","e57d8f3baf76","8841ba8082c0","3305de463a0d","b0d0f618e0f5","acbc2ec8f756","8139c6e91cc3","c4d41fe5910e","c9b7e6b6032d","659af1de44f4","59ca78cd6d3d","6bbeddc7a8c5","de46ebc2a912","127ad8e53313","ca862bbb414a","a5853dc4b78c","e5546f3ae634","e8958e7692ef","e7338f12ba61","880609a33a69","7ecde1bac99c","63e41f367e92","2e2a83c01c8e","4d31dd5610b1","1a1abd3edb23","2ccd01cfb043","9147c93c6fa7","b7f3b90a929e","0cc09293b056","eba1c87c9838","fd7d288b06ca","4d21dd4daeff","ba183330b7b6","0b01181f265e","4e1acf0ca66a","ab2653f1ee3f","abba89abaaf5","29a22772cd30","4a546d41334a","e93f78d0a28d","21f577049555","a597e699195e","1c5092e0a777","b0743ade7a3c","11397af10597","b7803ed106b0","4e5cc5f0d513","2e9f87d2f89d","430722ccc272","4cff92a09f22","f7a609b55aee","838f36dc8710","b3c150e76316","bdfc8f762de6","ee1c5a383fa7","3cbcebbeaa13","11363f628705","ad4e96a70342","0c10ea273813","5e30e0c1ad25","0b4493de711f","44731e8cb20e","6d6faca46649","4a7ed62e2490","0d2ee3197e19","953d4f3c66cf","ed643a902d14","7f8165f06c6f","125b69b22066","9422cd378ece","dde6284aaab1","78722cb00d3a","61b379c49f7c","49283abf67a1","4934895f3132","e8c88c3cb781","0539a3986253","3b1d30064a6d","c0d140c17f1c","cee68c209ad3","f3c6efd90e8b","9b70f54211d4","82ac7baa0246","08eebf7db250","dca357a507a1","39d277e07fce","6281457aeeff","d90432c4aa86","29e4603d57a2","3cb7ea59f73b","4934895f3132","09d52dd557ee","0539a3986253","404c908cbed7","c0d140c17f1c","4621f814d24c","f3c6efd90e8b","87a307aa2c87","82ac7baa0246","5a7b84d874b8","dca357a507a1","1453012b188c","6281457aeeff","36ad2e5bebd7","29e4603d57a2","ecfa805a1fbf","4934895f3132","e8c88c3cb781","0539a3986253","3b1d30064a6d","c0d140c17f1c","cee68c209ad3","f3c6efd90e8b","5c5935f3ee16","3434400ae562","212ebd8bcc24","aa4d1c55776a","5cca57e685de","ce462f88fe00","e11c75d2a789","5551250cef92","5a3f760f3e56","5cd191a8fe4b","08f8a1a6d4ee","6165d889d55f","47fcf9fd6923","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","69c23b53890d","297363a13342","e114f1577c48","3b064f77cb1d","9a7f511fae22","d68b45dd3522","073b8c3b5f33","c05a56bbda83","cf48507d808e","6165d889d55f","14a3c45d48b3","7544fcb0f024","9a8b8880f3dd","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","82bc3453ae39","297363a13342","113106f4b8ad","3b064f77cb1d","96886ba1356d","d68b45dd3522","b25894e659b3","c05a56bbda83","67341198d5fc","6165d889d55f","47fcf9fd6923","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","80b4bcfa9ee4","297363a13342","8f127f73ecce","3b064f77cb1d","9a7f511fae22","d68b45dd3522","073b8c3b5f33","c05a56bbda83","cf48507d808e","6165d889d55f","c05ed52d78a6","7544fcb0f024","596bf151795f","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","82bc3453ae39","297363a13342","113106f4b8ad","3b064f77cb1d","2d3c3c5cad11","d68b45dd3522","7b3df45ae2b0","c05a56bbda83","67341198d5fc","6165d889d55f","47fcf9fd6923","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","781da9b98e7e","4a2c31e9f73c","69c23b53890d","297363a13342","8f127f73ecce","3b064f77cb1d","9a7f511fae22","d68b45dd3522","073b8c3b5f33","c05a56bbda83","2d06027d1744","6165d889d55f","14a3c45d48b3","7544fcb0f024","596bf151795f","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","82bc3453ae39","297363a13342","b6977f6b9b7e","3b064f77cb1d","96886ba1356d","d68b45dd3522","7b3df45ae2b0","c05a56bbda83","67341198d5fc","6165d889d55f","47fcf9fd6923","7544fcb0f024","30b63c4b0425","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","69c23b53890d","297363a13342","8f127f73ecce","3b064f77cb1d","9a7f511fae22","d68b45dd3522","cb533f2d7d71","c05a56bbda83","cf48507d808e","6165d889d55f","14a3c45d48b3","7544fcb0f024","596bf151795f","d21d6e3dde6b","bfb5d5abdd8b","4a2c31e9f73c","f238b34d0ac1","297363a13342","113106f4b8ad","3b064f77cb1d","96886ba1356d","d68b45dd3522","7b3df45ae2b0","c05a56bbda83","67341198d5fc","6165d889d55f","f726d3051dc6","7544fcb0f024","3a5ad68bbc28","d21d6e3dde6b","dd4efbcdd6aa","4a2c31e9f73c","69c23b53890d","297363a13342","8f127f73ecce","3b064f77cb1d","4cc03ba2753c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","12f7efaf7233","1f06d5dba06d","ae30c1906491","708af1b1d9fd","9d65c167e872","2776e024cf3c","2fb29ba6b07e","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","552dac3e39af","0eaa9a479b77","4d7ae51540d1","1833c9fcad7f","01fb3017c243","0b8600ebe131","e47c8b16e7f0","1f06d5dba06d","7387a394dfca","708af1b1d9fd","9ffc9065325a","2776e024cf3c","41da3cd296aa","c2e212de1a30","592ec12ca639","8bfd110c83ee","acee30508ab1","0eaa9a479b77","351acdc0702c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","12f7efaf7233","1f06d5dba06d","ae30c1906491","708af1b1d9fd","6b068e3b2ac3","2776e024cf3c","a087777cde7c","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","552dac3e39af","0eaa9a479b77","4d7ae51540d1","1833c9fcad7f","06a121712779","0b8600ebe131","2ef595110933","1f06d5dba06d","7387a394dfca","708af1b1d9fd","9ffc9065325a","2776e024cf3c","41da3cd296aa","c2e212de1a30","61c708b4c59c","8bfd110c83ee","e2d905a5b527","0eaa9a479b77","351acdc0702c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","12f7efaf7233","1f06d5dba06d","8e78c2bf3fcc","708af1b1d9fd","9d65c167e872","2776e024cf3c","a087777cde7c","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","552dac3e39af","0eaa9a479b77","961898143f48","1833c9fcad7f","01fb3017c243","0b8600ebe131","2ef595110933","1f06d5dba06d","7387a394dfca","708af1b1d9fd","9ffc9065325a","2776e024cf3c","d8278ee25036","c2e212de1a30","592ec12ca639","8bfd110c83ee","e2d905a5b527","0eaa9a479b77","351acdc0702c","1833c9fcad7f","a1ccf452e2dc","0b8600ebe131","b2a4c053822b","1f06d5dba06d","ae30c1906491","708af1b1d9fd","9d65c167e872","2776e024cf3c","a087777cde7c","c2e212de1a30","ddfebe0731a4","8bfd110c83ee","35b76456f03a","0eaa9a479b77","4d7ae51540d1","1833c9fcad7f","01fb3017c243","0b8600ebe131","2ef595110933","1f06d5dba06d","7387a394dfca","708af1b1d9fd","e509c6fe5b46","2776e024cf3c","e78fd3531516","c2e212de1a30","f9a400bff777","59caea36b5e0","5d89f96fa984","2980511df466","4c82cd92e098","c03f04631f7d","eb79ae3f4228","0e31d137f86e","c5aae88821de","5654375101af","5f22b45b8b76","05329d2ded9d","a9edd8bc0486","5364e83ccc61","327d31d487ad","b1b9910c45a0","6b89ef322c5b","301a7c5df884","b8f3d330eba2","6f536f319004","f62c4e64d63d","d2384dd93933","d6c184c4d8ce","ff41f3bf712b","2878ba50f4b2","5ee1dcb46cdf","70bd81d19fda","49fba95bdd53","47c9f27636aa","352ba8311735","28d0b68f6e49","43158ec89a15","631c7547a970","cb744ea0f185","30f8f0018233","90fbca596e60","450f689ef561","7c316fd94854","5bf25780e994","ca68e47c6ae1","5577ba919e6c","e26b79853608","3dff4034bdaf","0042ba943478","7a623f48c7a2","30e1e63f03fd","367032c275bf","0e5c148adbb3","71456ad2bf98","21c055293b7e","646720888364","a5209bdf1f59","bcd15ed35363","19c81c92c2e6","98b8f7801089","e6ba6885ecb5","9b21c1554419","455a6b996708","85f46406dda5","1382a45fef6a","436acd2633b7","3475e37319a8","b396cfd05da1","976df835889a","5ded522e0327","2c017de91b3e","864d898d2702","5687ab8694fd","2eff5cc7dc74","fe3c3e2c13d1","e80d66434ce6","76f4ea82b828","2ab8261125a7","ff5420e6b2a3","43a7d2634ff6","c70495a1f75c","2d690b1c7a71","94ff3ab105b0","985529387678","785511817d4b","24a1adf92f36","497980de1251","d4a6a51f9218","e8715ec8653f","230c942216d2","2580346b1b46","0b38c7edebc1","84a096550ac1","f7cc30c8fa5d","965b1dcb97e5","0cc3a8ba2902","e192874cebce","6e22b219cddb","5c1ead6563f0","3f6a7e594eb1","def9c5a77025","63b0629dfc19","4977b963d228","961f0067b50a","49ef02f10098","eb232ac54032","1fb123a45b62","1742ea63627e","999fe96df3b9","d13ba0024130","732c53902ed5","0a64235d9a0c","c0a49083b628","23d67e333c19","4998aaf382f9","db0ff5272553","eace43f9e2a7","c918e972e49e","e17e26c07b54","be2fdf7b5cb8","a2621da179ee","3ec68b6b7ac5","ed738809a953","55a0a021d901","4677fcee02d8","3f11096041b3","c7fe7b1e3b21","5da694119e25","4ac99e0db557","3e1c044af319","5eb1edb8e8cb","d5f045f410db","62d5e1bb884a","edb8f370ef4b","0249965113df","9824d5c65253","7d7ef94c90ae","4eab8c99f9f9","c1f677d7a872","0be7cf52ef50","a2e1bd2b846f","3928b4a5031e","5335c54341ea","d618c0adc4bc","233cae8716e8","9b1d65c1a048","5eb1edb8e8cb","0ac11c8448f1","62d5e1bb884a","1df1c65cecfa","0249965113df","e31425220d29","7d7ef94c90ae","64e836145a9a","c1f677d7a872","da61859d0441","a2e1bd2b846f","6c31bbcca4e9","5335c54341ea","c7c1203ead25","233cae8716e8","5014310ea8b8","5eb1edb8e8cb","5efab0d57ae1","62d5e1bb884a","edb8f370ef4b","0249965113df","9824d5c65253","7d7ef94c90ae","4eab8c99f9f9","c1f677d7a872","4be946b8d72a","a2e1bd2b846f","e0452bd7acf2","5335c54341ea","d618c0adc4bc","233cae8716e8","9b1d65c1a048","5eb1edb8e8cb","0ac11c8448f1","62d5e1bb884a","fd031b040460","0249965113df","19cf0fc13ee8","7d7ef94c90ae","64e836145a9a","c1f677d7a872","da61859d0441","a2e1bd2b846f","6c31bbcca4e9","5335c54341ea","f86dc7bee7fb","233cae8716e8","99d4c4abd866","5eb1edb8e8cb","5efab0d57ae1","62d5e1bb884a","edb8f370ef4b","0249965113df","9824d5c65253","7d7ef94c90ae","3acd0a1f75cc","d0a50167c18e","afa0c453a61e","8ed5703a72df","35334358a646","a6ad42c9a39b","7cbba9701d31","f2340d5b1d89","46042a7894fc","91b69e35ac22","deb0a110c86c","c960b11deb05","0d3afdcf0f98","b0c86ec07210","953f8d99c11b","055e2b1e57a6","bd7162a41e27","ebdb1ce6da48","c6e9b151d2dd","c5e92885970c","5dc1faf26f9a","6247d1e10656","79595ccb8a90","de5ce668282b","7ed6d9e93d63","c7413fcd141d","37d48004e4f6","c960b11deb05","758be509caf9","b0c86ec07210","5f62b755e28e","055e2b1e57a6","8834e57ce651","ebdb1ce6da48","75166256da4c","c5e92885970c","53437b45d294","6247d1e10656","afa632c5dfb3","de5ce668282b","53c71b73ae90","c7413fcd141d","2a546e633b87","c960b11deb05","0d3afdcf0f98","b0c86ec07210","953f8d99c11b","055e2b1e57a6","bd7162a41e27","ebdb1ce6da48","7904648f744f","1b1f7ca5399c","f0e4c5adf019","704b342045a2","94b9bc32750e","4f4f37bf3e75","22b41badd636","fc8625768c1e","03cdbb12a5f7","de5cd1cb32c3","0f21c989f22f","e0e3637cb318","f073804c3321","4cc2adae8c75","d9af783e726e","2ccf635c3253","344d407a11e6","1b1f7ca5399c","82fd4af38f41","704b342045a2","b9723c2a1250","4f4f37bf3e75","bd6d9b72795b","fc8625768c1e","2b4a45af0433","de5cd1cb32c3","9c7ddc867135","e0e3637cb318","11db8a3586ad","4cc2adae8c75","9ba235a49206","2ccf635c3253","0cf1fa008a1d","1b1f7ca5399c","f0e4c5adf019","704b342045a2","94b9bc32750e","4f4f37bf3e75","22b41badd636","fc8625768c1e","a4fdebeebc44","de5cd1cb32c3","e1428cdae4f1","e0e3637cb318","f073804c3321","4cc2adae8c75","d9af783e726e","2ccf635c3253","344d407a11e6","1b1f7ca5399c","1562a77c505b","704b342045a2","0fd82dee7980","4f4f37bf3e75","bd6d9b72795b","fc8625768c1e","2b4a45af0433","de5cd1cb32c3","9c7ddc867135","e0e3637cb318","6b43a390cf22","4cc2adae8c75","59000b3bab7d","2ccf635c3253","0cf1fa008a1d","1b1f7ca5399c","f0e4c5adf019","704b342045a2","94b9bc32750e","4f4f37bf3e75","f4fd32ec90fb","fc8625768c1e","03cdbb12a5f7","de5cd1cb32c3","e1428cdae4f1","e0e3637cb318","f073804c3321","4cc2adae8c75","d9af783e726e","2ccf635c3253","8466517562c2","1b1f7ca5399c","82fd4af38f41","704b342045a2","0fd82dee7980","4f4f37bf3e75","bd6d9b72795b","fc8625768c1e","2b4a45af0433","de5cd1cb32c3","6e325aa3371d","e0e3637cb318","11db8a3586ad","4cc2adae8c75","59000b3bab7d","2ccf635c3253","0cf1fa008a1d","1b1f7ca5399c","f0e4c5adf019","704b342045a2","a3f0a6eec8af","4f4f37bf3e75","22b41badd636","fc8625768c1e","03cdbb12a5f7","de5cd1cb32c3","e1428cdae4f1","e0e3637cb318","f073804c3321","4cc2adae8c75","71ee09c31af1","2ccf635c3253","344d407a11e6","1b1f7ca5399c","82fd4af38f41","704b342045a2","0fd82dee7980","4f4f37bf3e75","bd6d9b72795b","d8e21911dd33","1d6a5ce3e7c1","9e65f4fed7e0","901b831efa56","976d72f7f74c","4d0e53a2e29a","14f67e0afd78","4746694ae0ac","0fbcf59d407a","4fb2da5c726f","c3c83314b6fb","7a3448a993a4","49ae7507155d","11307711d1b8","73ff5b65ee8c","3e69ee3a52df","1da308ad9cbd","a358d1070a6d","2705650e6062","a2c1bcde62c9","72f22f03dc6f","fe17f4656485","41340b8ea079","76091aac8583","e615421d8967","1b5d0878e983","62eb6234689b","c6b6ed167ae6","67ffc5bfefac","3508729ddaa5","1414fb7a63c7","4706825d2b66","b20b43b4bab6","2e32ef2453b7","84d3360db656","6f6dd68a708a","fd5316bc94e2","ff872cd7a407","b3469f6e4a7b","6caa0881fac0","01f2ec5a4101","a588269b42a3","298d5ca138b9","3fef06d36e69","316c3c263079","d2475c2c8267","c80cacb1d574","b74449f83f38","3e0c3fe67c02","4a641a045387","98fd018d5346","7908d72ff9f6","831b913eb232","dd8a73eea92a","e6043a2a7f23","bd5f87ea5ee2","dfc49044a774","31f7e5dca827","5bf6f19a4543","5610be2b897b","a0001f5fa964","0c9b541b7c09","b9c92c960d9a","30cb71db8744","eb9fb4b2ec6b","988a489504a4","f0493d6f995a","2ca866ae26f2","d9a0aa34f192","0b9d1c6576e7","8bb167755636","d38c9fed853e","e1af0e305bfd","c1c6f0792377","b8e1070073f2","70c25b930cbf","bfb66efa0310","aa89469d6fa4","4995e8b884c8","2e043e4077e4","16e9ae4c2d81","3a8b42f4420d","25c87430f305","493e924665b5","bd60ca910784","7d6516f6996d","17f76a181417","c74c5f6ef3fa","67a8d980b1f0","2b6ce294995e","d8714c666841","93d75f67f35e","c1d9e6d8b89e","f02d55a4fad2","920bc61e4b5e","364faf3b8c19","ca051554dcd7","eac1a5ef6f61","648e2efc6ad6","28a118155856","e7ec9270c434","8eb6cfa958ba","9afd2130250f","45f056982aea","16fac55de014","f7e478956b9e","90c8db2ab2ee","403872fdb99a","c04356306934","ac4c83600322","0d53139833b5","fb0bf985534b","ca051554dcd7","cd8249d0020b","648e2efc6ad6","a0365eaf5848","e7ec9270c434","737443f5f3e3","9afd2130250f","a241533f579b","16fac55de014","3caefe1ad253","90c8db2ab2ee","e93b23aa0dd2","c04356306934","cb2b25072e26","0d53139833b5","364faf3b8c19","ca051554dcd7","eac1a5ef6f61","648e2efc6ad6","dd76105ed9dd","2435f827148c","237eb5f5e163","815f565e7d4d","9288e09c3551","485c76fcb9cf","b7ec686a7417","6b553f635f69","f0e3aac814ca","6c9306dca1d8","4dab8dae3da8","8a924ddd3e60","d8e6d0db004e","ad8e79fe4d95","34d2adc9ebb1","b5896758df2d","0a685e6b72ef","2ab15573c8a3","3627e78a7b2e","7b9ebd7f9b56","578588761d33","4b85284e7538","f27081f7c489","c833e19741f8","d13c0423f20b","a962114b1a85","16b1eee76bc1","2420af897ddf","7af021c80820","4679061e987f","2ea2bd5a0235","92f1cb59faba","665b773c246c","8d6254ac6b96","c3702e0ad428","7b9ebd7f9b56","257fe7e9b79a","4b85284e7538","93c9703df68e","c833e19741f8","aa2be48a9325","a962114b1a85","0261eac0ca94","2420af897ddf","4ab5df3d3bcb","4679061e987f","bce4e1471840","92f1cb59faba","8c7411e5fc38","8d6254ac6b96","4cdd3ed30014","7b9ebd7f9b56","37276f190b08","4b85284e7538","f27081f7c489","c833e19741f8","d13c0423f20b","a962114b1a85","16b1eee76bc1","2420af897ddf","b9035ce75b60","7e895b6c810f","c34786c581b9","23a07dd0b091","f1a41719a974","be827971ff08","8509b805d74c","0133599f86d3","9124c4367899","d27b29f7ff1e","b3be784fdc8d","5a4d4f1ee5a3","10219390b3b4","774254cc9eff","ee72610f16db","a98fbc6526be","db67b29f937c","6a0c353e4dfe","bc1de8bd835b","fdca2183f535","bdae030dfb9a","35d339bbb781","9df56e1adfa0","e96c43294640","004a1406c1d0","274c2910a098","02aebbcf73ba","c60071b5f03c","aa1e9e218e0e","43332c839f97","0b74a3fa1907","3e57e633d8a2","e1c801574296","5d818912fc5d","b0f59238a93b","b5d1bb7b6027","aac75c838455","4838303a77be","079920e09b45","4734783f3581","4069464830b7","983de59f948c","1b0bd857cd66","16f435405527","0e012dc158e9","e9d069d91dd6","a13ea55ec35d","b6e96f31c24c","198bf4b608db","cdb9224916d6","afb4ec59fc1b","b27e4d213767","6551fba91a14","800a69340bc6","621aa2a509c9","1412e0f45990","e20efabde236","983de59f948c","106929d20c8b","16f435405527","76190d0b43b9","e9d069d91dd6","dc014928b729","b6e96f31c24c","58d1b5876a02","cdb9224916d6","6ecd6519d0c8","b27e4d213767","97707bff65f2","800a69340bc6","4fdb4fa230f4","1412e0f45990","a0ea70c8ae42","983de59f948c","bc86782bc4b1","16f435405527","0177d5dbd233","e9d069d91dd6","49a231de6e87","b6e96f31c24c","e8c56d280dc1","cdb9224916d6","1fb0538d622f","b27e4d213767","59900bba7d50","800a69340bc6","43a4b6dc80f5","1412e0f45990","bf01998b4789","983de59f948c","3d3211970964","16f435405527","f72671d59f9c","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","88092a90aef1","43e1a665f4cc","442eb5b1debf","75bce699cdf4","247e8ff836ed","b5b617a00a4f","57a836d90d4f","6f154339960f","6f299ae701c1","19e5c7c93377","3c004fb710ca","e5fd61e7a6ea","9f54337f5c08","ade2773029cc","df1009c4a9a0","46f17ae8375e","d4ea41e5b831","09c97d938de4","f43fddd98996","51cab0a94ae9","2b5bc8bf69de","02bfd6d98aca","a43eb7dc5acb","714818a8aa0b","aaf8cfaf8c9f","d66e36431185","bab609b3e28a","23e86057df2d","12e6d28f4ed3","85622e1ee618","3fffa72a7c4c","2504f21158ef","dd9dacb6b857","84c2c9566126","c2826897f357","a12b2d759351","1b400cec595a","fae9365f0b10","b7656c1647ae","fa32856b342c","21fdf4f5cfad","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","023a8d498ca9","cdb9224916d6","2ed2f514b6ee","b27e4d213767","003e7724d022","800a69340bc6","bfb7ad3bfcbd","1412e0f45990","f99bb41d0a03","983de59f948c","687d03619cea","16f435405527","f72671d59f9c","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","dc25cbda89cd","cdb9224916d6","1e1b117f2825","b27e4d213767","606e16408a63","800a69340bc6","57010dc6149f","1412e0f45990","315164088708","983de59f948c","a89bcedacfcf","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","023a8d498ca9","cdb9224916d6","2ed2f514b6ee","b27e4d213767","29c4266e51b1","800a69340bc6","f905fed8392a","1412e0f45990","f99bb41d0a03","983de59f948c","687d03619cea","16f435405527","f72671d59f9c","e9d069d91dd6","5b2f3478d29d","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","606e16408a63","800a69340bc6","57010dc6149f","1412e0f45990","4103b8025deb","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","023a8d498ca9","cdb9224916d6","ff504e16f8f6","b27e4d213767","003e7724d022","800a69340bc6","f905fed8392a","1412e0f45990","f99bb41d0a03","983de59f948c","687d03619cea","16f435405527","7480a95d9d5e","e9d069d91dd6","6a3b03feb040","b6e96f31c24c","b258188e0725","cdb9224916d6","1e1b117f2825","b27e4d213767","606e16408a63","800a69340bc6","b3008eaa473b","1412e0f45990","315164088708","983de59f948c","b2f8f7290479","16f435405527","11afb02d1292","e9d069d91dd6","e464ef8a63aa","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e8419def58aa","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527","098cb992a4a4","e9d069d91dd6","64903a741182","b6e96f31c24c","bb84721b279b","cdb9224916d6","5bfaccc41820","b27e4d213767","e824bea11e2d","800a69340bc6","a6212f50ab2e","1412e0f45990","0e22492631d3","983de59f948c","fe25cade12e4","16f435405527"],"keyframes":{"0":{"tx":[[1088,0,"0000000000000000"],[579,0,"08000000020000ef"]],"torque_can":0,"accel":0.0},"100":{"tx":[[1892,0,"0210020000000000"],[1088,0,"0000000000000000"],[579,0,"48000000020000eb"]],"torque_can":0,"accel":0.0},"220":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00080"],[866,0,"fff7fefe1fc00080"],[867,0,"fff7fefe1fc00000"],[868,0,"fff7fefe1fc00000"],[869,0,"fff7fe7ffbff3fc0"],[870,0,"fff7fe7ffbff3fc0"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00080"],[866,2,"fff7fefe1fc00080"],[867,2,"fff7fefe1fc00000"],[868,2,"fff7fefe1fc00000"],[869,2,"af00a4001bff37c0"],[870,2,"fff7fe7ffbff3fc0"],[539,0,"01ffe3ffc08000dd"],[540,0,"02010b0000000000"],[539,2,"01ffe3ffc08000dd"],[540,2,"02010b0000000000"],[579,0,"c8000000020000e3"]],"torque_can":0,"accel":0.0},"320":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008a"],[866,0,"fff7fefe1fc0008a"],[867,0,"fff7fefe1fc0000a"],[868,0,"fff7fefe1fc0000a"],[869,0,"fff7fe7ffbff3fca"],[870,0,"fff7fe7ffbff3fca"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008a"],[866,2,"fff7fefe1fc0008a"],[867,2,"fff7fefe1fc0000a"],[868,2,"fff7fefe1fc0000a"],[869,2,"af00a4001bff37ca"],[870,2,"fff7fe7ffbff3fca"],[539,0,"01ffe20106800294"],[540,0,"0a010b0000001000"],[539,2,"01ffe20106800294"],[540,2,"0a010b0000001000"],[579,0,"08000000020000ef"]],"torque_can":0,"accel":0.008},"540":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00080"],[866,0,"fff7fefe1fc00080"],[867,0,"fff7fefe1fc00000"],[868,0,"1e0e00fe1c000000"],[869,0,"fff7fe7ffbff3fc0"],[870,0,"fff7fe7ffbff3fc0"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00080"],[866,2,"fff7fefe1fc00080"],[867,2,"fff7fefe1fc00000"],[868,2,"1e0e00fe1c000000"],[869,2,"af00a4001bff37c0"],[870,2,"fff7fe7ffbff3fc0"],[539,0,"01ffe27a8680009d"],[540,0,"0a218b4000001000"],[539,2,"01ffe27a8680009d"],[540,2,"0a218b4000001000"],[579,0,"cc1b0000020000c4"]],"torque_can":1051,"accel":0.98},"710":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00081"],[866,0,"fff7fefe1fc00081"],[867,0,"fff7fefe1fc00001"],[868,0,"fff7fefe1fc00001"],[869,0,"fff7fe7ffbff3fc1"],[870,0,"fff7fe7ffbff3fc1"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00081"],[866,2,"fff7fefe1fc00081"],[867,2,"fff7fefe1fc00001"],[868,2,"fff7fefe1fc00001"],[869,2,"af00a4001bff37c1"],[870,2,"fff7fe7ffbff3fc1"],[539,0,"01ffe20006841582"],[540,0,"0a010b0000001000"],[539,2,"01ffe20006841582"],[540,2,"0a010b0000001000"],[579,0,"65a000000200004c"]],"torque_can":-608,"accel":0.0},"810":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008b"],[866,0,"fff7fefe1fc0008b"],[867,0,"fff7fefe1fc0000b"],[868,0,"040e00001c00000b"],[869,0,"fff7fe7ffbff3fcb"],[870,0,"fff7fe7ffbff3fcb"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008b"],[866,2,"fff7fefe1fc0008b"],[867,2,"fff7fefe1fc0000b"],[868,2,"040e00001c00000b"],[869,2,"af00a4001bff37cb"],[870,2,"fff7fe7ffbff3fcb"],[539,0,"01ffe149868417b8"],[540,0,"0a018b6000001000"],[539,2,"01ffe149868417b8"],[540,2,"0a018b6000001000"],[579,0,"a87800000200006d"]],"torque_can":120,"accel":-1.46},"960":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008a"],[866,0,"fff7fefe1fc0008a"],[867,0,"fff7fefe1fc0000a"],[868,0,"040e00001c00000a"],[869,0,"fff7fe7ffbff3fca"],[870,0,"fff7fe7ffbff3fca"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008a"],[866,2,"fff7fefe1fc0008a"],[867,2,"fff7fefe1fc0000a"],[868,2,"040e00001c00000a"],[869,2,"af00a4001bff37ca"],[870,2,"fff7fe7ffbff3fca"],[539,0,"01ffe1ffe68002b7"],[540,0,"0a018b6000000000"],[539,2,"01ffe1ffe68002b7"],[540,2,"0a018b6000000000"],[579,0,"0878000002000077"]],"torque_can":120,"accel":-0.001},"1060":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00084"],[866,0,"fff7fefe1fc00084"],[867,0,"fff7fefe1fc00004"],[868,0,"040e00001c000004"],[869,0,"fff7fe7ffbff3fc4"],[870,0,"fff7fe7ffbff3fc4"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00084"],[866,2,"fff7fefe1fc00084"],[867,2,"fff7fefe1fc00004"],[868,2,"040e00001c000004"],[869,2,"af00a4001bff37c4"],[870,2,"fff7fe7ffbff3fc4"],[539,0,"01ffe1ffe68004b5"],[540,0,"0a018b6000000000"],[539,2,"01ffe1ffe68004b5"],[540,2,"0a018b6000000000"],[579,0,"4878000002000073"]],"torque_can":120,"accel":-0.001},"1180":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00080"],[866,0,"fff7fefe1fc00080"],[867,0,"fff7fefe1fc00000"],[868,0,"040e00001c000000"],[869,0,"fff7fe7ffbff3fc0"],[870,0,"fff7fe7ffbff3fc0"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00080"],[866,2,"fff7fefe1fc00080"],[867,2,"fff7fefe1fc00000"],[868,2,"040e00001c000000"],[869,2,"af00a4001bff37c0"],[870,2,"fff7fe7ffbff3fc0"],[539,0,"01ffe291c6800046"],[540,0,"0a018b4000001000"],[539,2,"01ffe291c6800046"],[540,2,"0a018b4000001000"],[579,0,"c87800000200006b"]],"torque_can":120,"accel":1.1665},"1280":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008a"],[866,0,"fff7fefe1fc0008a"],[867,0,"fff7fefe1fc0000a"],[868,0,"040e00001c00000a"],[869,0,"fff7fe7ffbff3fca"],[870,0,"fff7fe7ffbff3fca"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008a"],[866,2,"fff7fefe1fc0008a"],[867,2,"fff7fefe1fc0000a"],[868,2,"040e00001c00000a"],[869,2,"af00a4001bff37ca"],[870,2,"fff7fe7ffbff3fca"],[539,0,"01ffe20006841285"],[540,0,"0a018b6000001000"],[539,2,"01ffe20006841285"],[540,2,"0a018b6000001000"],[579,0,"086c000002000083"]],"torque_can":108,"accel":0.0},"1330":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008f"],[866,0,"fff7fefe1fc0008f"],[867,0,"fff7fefe1fc0000f"],[868,0,"040e00001c00000f"],[869,0,"fff7fe7ffbff3fcf"],[870,0,"fff7fe7ffbff3fcf"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008f"],[866,2,"fff7fefe1fc0008f"],[867,2,"fff7fefe1fc0000f"],[868,2,"040e00001c00000f"],[869,2,"af00a4001bff37cf"],[870,2,"fff7fe7ffbff3fcf"],[539,0,"01ffe18006841bfd"],[540,0,"0a018b6000001000"],[539,2,"01ffe18006841bfd"],[540,2,"0a018b6000001000"],[579,0,"28000000020000ed"]],"torque_can":0,"accel":-1.024},"1430":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00089"],[866,0,"fff7fefe1fc00089"],[867,0,"fff7fefe1fc00009"],[868,0,"040e00001c000009"],[869,0,"fff7fe7ffbff3fc9"],[870,0,"fff7fe7ffbff3fc9"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00089"],[866,2,"fff7fefe1fc00089"],[867,2,"fff7fefe1fc00009"],[868,2,"040e00001c000009"],[869,2,"af00a4001bff37c9"],[870,2,"fff7fe7ffbff3fc9"],[539,0,"01ffe18006841dfb"],[540,0,"0a018b6000001000"],[539,2,"01ffe18006841dfb"],[540,2,"0a018b6000001000"],[579,0,"68000000020000e9"]],"torque_can":0,"accel":-1.024},"1530":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00083"],[866,0,"fff7fefe1fc00083"],[867,0,"fff7fefe1fc00003"],[868,0,"040e00001c000003"],[869,0,"fff7fe7ffbff3fc3"],[870,0,"fff7fe7ffbff3fc3"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00083"],[866,2,"fff7fefe1fc00083"],[867,2,"fff7fefe1fc00003"],[868,2,"040e00001c000003"],[869,2,"af00a4001bff37c3"],[870,2,"fff7fe7ffbff3fc3"],[539,0,"01ffe25a06800f2e"],[540,0,"0a018b4000001000"],[539,2,"01ffe25a06800f2e"],[540,2,"0a018b4000001000"],[579,0,"a8000000020000e5"]],"torque_can":0,"accel":0.72},"1580":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00088"],[866,0,"fff7fefe1fc00088"],[867,0,"fff7fefe1fc00008"],[868,0,"1e0e00fe1c000008"],[869,0,"fff7fe7ffbff3fc8"],[870,0,"fff7fe7ffbff3fc8"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00088"],[866,2,"fff7fefe1fc00088"],[867,2,"fff7fefe1fc00008"],[868,2,"1e0e00fe1c000008"],[869,2,"af00a4001bff37c8"],[870,2,"fff7fe7ffbff3fc8"],[539,0,"01ffe2000680088f"],[540,0,"0a018b4000001000"],[539,2,"01ffe2000680088f"],[540,2,"0a018b4000001000"],[579,0,"c80c0000020000d7"]],"torque_can":12,"accel":0.0},"1640":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008e"],[866,0,"fff7fefe1fc0008e"],[867,0,"fff7fefe1fc0000e"],[868,0,"1e0e00fe1c00000e"],[869,0,"fff7fe7ffbff3fce"],[870,0,"fff7fe7ffbff3fce"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008e"],[866,2,"fff7fefe1fc0008e"],[867,2,"fff7fefe1fc0000e"],[868,2,"1e0e00fe1c00000e"],[869,2,"af00a4001bff37ce"],[870,2,"fff7fe7ffbff3fce"],[539,0,"01ffe201a68006f0"],[540,0,"0a018b4000001000"],[539,2,"01ffe201a68006f0"],[540,2,"0a018b4000001000"],[579,0,"88000000020000e7"]],"torque_can":0,"accel":0.0125},"1680":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00082"],[866,0,"fff7fefe1fc00082"],[867,0,"fff7fefe1fc00002"],[868,0,"1e0e00fe1c000002"],[869,0,"fff7fe7ffbff3fc2"],[870,0,"fff7fe7ffbff3fc2"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00082"],[866,2,"fff7fefe1fc00082"],[867,2,"fff7fefe1fc00002"],[868,2,"1e0e00fe1c000002"],[869,2,"af00a4001bff37c2"],[870,2,"fff7fe7ffbff3fc2"],[539,0,"01ffe3ffc0800ad3"],[540,0,"02018b4000000000"],[539,2,"01ffe3ffc0800ad3"],[540,2,"02018b4000000000"],[579,0,"08000000020000ef"]],"torque_can":0,"accel":0.0},"1740":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc00088"],[866,0,"fff7fefe1fc00088"],[867,0,"fff7fefe1fc00008"],[868,0,"fff7fefe1fc00008"],[869,0,"fff7fe7ffbff3fc8"],[870,0,"fff7fe7ffbff3fc8"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc00088"],[866,2,"fff7fefe1fc00088"],[867,2,"fff7fefe1fc00008"],[868,2,"fff7fefe1fc00008"],[869,2,"af00a4001bff37c8"],[870,2,"fff7fe7ffbff3fc8"],[539,0,"01ffe2010680088e"],[540,0,"0a010b0000001000"],[539,2,"01ffe2010680088e"],[540,2,"0a010b0000001000"],[579,0,"c8000000020000e3"],[157,0,"1001dfc800000000"]],"torque_can":0,"accel":0.008},"1780":{"tx":[[1177,0,"0008c00000000000"],[865,0,"fff7fefe1fc0008c"],[866,0,"fff7fefe1fc0008c"],[867,0,"fff7fefe1fc0000c"],[868,0,"fff7fefe1fc0000c"],[869,0,"fff7fe7ffbff3fcc"],[870,0,"fff7fe7ffbff3fcc"],[1177,2,"0008c00000000000"],[865,2,"fff7fefe1fc0008c"],[866,2,"fff7fefe1fc0008c"],[867,2,"fff7fefe1fc0000c"],[868,2,"fff7fefe1fc0000c"],[869,2,"af00a4001bff37cc"],[870,2,"fff7fe7ffbff3fcc"],[539,0,"01ffe3ffc4800ccd"],[540,0,"02010b0000000000"],[539,2,"01ffe3ffc4800ccd"],[540,2,"02010b0000000000"],[579,0,"48000000020000eb"]],"torque_can":0,"accel":0.0},"1880":{"tx":[[579,0,"88000000020000e7"]],"torque_can":0,"accel":0.0}}} \ No newline at end of file diff --git a/opendbc/car/mazda/tests/test_mazda_carstate.py b/opendbc/car/mazda/tests/test_mazda_carstate.py index 0d13dfe641a..4d4a97cf774 100644 --- a/opendbc/car/mazda/tests/test_mazda_carstate.py +++ b/opendbc/car/mazda/tests/test_mazda_carstate.py @@ -30,7 +30,7 @@ # (GSH7-67XK2-U). Only byte 1 differs: bit 5 is BIT2, bit 6 is NO_ERR_BIT. BOOTING = bytes([0x42, 0b01000001, 0, 0, 0, 0, 0, 0]) # NO_ERR_BIT set: still booting SETTLED = bytes([0x42, 0b00000001, 0, 0, 0, 0, 0, 0]) # markers clear: settled -BIT2_LATCHED = bytes([0x41, 0b00100001, 0, 0, 0, 0, 0, 0]) # BIT2 stuck high for a whole cycle +BIT2_LATCHED = bytes([0x41, 0b00100001, 0, 0, 0, 0, 0, 0]) # BIT2 (HBC armed) high for a whole cycle FAULTED = bytes([0x42, 0b00000001, 0, 0, 0, 0x01, 0, 0]) # ERR_BIT (bit 40) set # Exercise CAM_LANEINFO at its longest measured period so freshness tests match the bus cadence. @@ -103,6 +103,18 @@ def test_camera_dropout_resets_the_settle_timer(self): assert not feed_laneinfo(CI, SETTLED, SETTLE_T * 0.5) assert feed_laneinfo(CI, SETTLED, SETTLE_T * 0.6) + def test_hbc_arming_follows_bit2_while_fresh(self): + # BIT2 is the camera's auto high-beam arming, relayed to the cluster through CRZ_CTRL + CI = car_interface(alpha_long=True) + feed_laneinfo(CI, BIT2_LATCHED, 1.0) + assert CI.CS.hbc_armed + feed_laneinfo(CI, SETTLED, 1.0) + assert not CI.CS.hbc_armed + # a silent camera relays nothing + feed_laneinfo(CI, BIT2_LATCHED, 1.0) + feed_laneinfo(CI, None, CarControllerParams.CAM_LANEINFO_FRESH_T + 0.5) + assert not CI.CS.hbc_armed + def test_gate_starts_closed_before_any_camera_frame(self): # the parser reads all-zero before the first frame, which would otherwise look settled CI = car_interface() @@ -311,9 +323,7 @@ class TestSpeedSignLimit: 1-bit SPEED_SIGN_ON at bit 12 is its low bit): 1 = limit displayed in mph, 2 = displayed in km/h, 0 = none. Which value an FSC emits tracks its market, not the cluster's unit setting. Payloads are real captures: mph frames from a US CX-5 2022 (drive_1x local set), km/h - frames from a NZ CX-5 (route - ded445e51c0e1830|00000007--4b5a89a1ce) where the old 1-bit decode at bit 12 read 0 and SLA - never saw a limit.""" + frames from a NZ CX-5, where the old 1-bit decode at bit 12 read 0 and SLA never saw a limit.""" @pytest.mark.parametrize("payload, expected_ms", [ ("0000000002005300", 0.0), # no limit displayed diff --git a/opendbc/car/mazda/tests/test_mazda_golden_tx.py b/opendbc/car/mazda/tests/test_mazda_golden_tx.py index 2e6fac98d34..9ae6b0d5730 100644 --- a/opendbc/car/mazda/tests/test_mazda_golden_tx.py +++ b/opendbc/car/mazda/tests/test_mazda_golden_tx.py @@ -96,9 +96,10 @@ def _cancel(i, _): SCENARIO = [ _phase("boot_stock_radar", 100, BOOT), _phase("fsc_settled_silencing", 120, dict(BOOT, fsc_settled=True)), - _phase("radar_silenced_armed_idle", 100, dict(BOOT, **SILENCED, available=True), lambda i, _: {"brake_pressed": i < 50}), + _phase("radar_silenced_armed_idle", 100, dict(BOOT, **SILENCED, available=True), + lambda i, _: {"brake_pressed": i < 50, "hbc_armed": 25 <= i < 75}), _phase("engage_steer_ramp", 220, dict(ENGAGED, **LEAD_30, v_ego=10.0, accel=1.0), _driver_fight), - _phase("highway_rail", 170, dict(ENGAGED, **NO_LEAD, v_ego=20.0, accel=0.2), _highway), + _phase("highway_rail", 170, dict(ENGAGED, **NO_LEAD, v_ego=20.0, accel=0.2, hbc_armed=True), _highway), _phase("approach_stop", 100, dict(ENGAGED, lead_visible=True, lead_d_rel=6.0, lead_v_rel=-1.0, long_state=LongCtrlState.stopping, accel=-1.5, torque=0.1), _approach), _phase("hold_on_the_plan", 150, dict(ENGAGED, **LEAD_4, long_state=LongCtrlState.stopping, accel=-1.024, diff --git a/opendbc/car/mazda/tests/test_mazda_longitudinal.py b/opendbc/car/mazda/tests/test_mazda_longitudinal.py index 840a670d191..7f6062d1a98 100644 --- a/opendbc/car/mazda/tests/test_mazda_longitudinal.py +++ b/opendbc/car/mazda/tests/test_mazda_longitudinal.py @@ -68,6 +68,17 @@ def test_engaged_frame_rates_and_counters(cc, cs): assert cc.long_counter == 50 and cc.radar_counter == 10 +@pytest.mark.parametrize("engaged", [False, True]) +def test_crz_ctrl_relays_hbc_arming_on_both_buses(cc, cs, engaged): + # Stock radar relays camera's HBC arming into CRZ_CTRL; synthetic radar must also carry the state. + kwargs = dict(accel=0.5) if engaged else dict(enabled=False, long_active=False, accel=0., long_state=OFF) + for armed in (False, True, True, False): + cc.frame = 0 # force emission + sends = step_long(cc, cs, hbc_armed=armed, available=True, **kwargs) + for bus in (0, 2): + assert parse_frame(CRZ_CTRL, frame(sends, CRZ_CTRL, bus), bus)["NEW_SIGNAL_3"] == armed + + @pytest.mark.parametrize("gap", [1, 2, 3]) def test_gap_setting_mirrors_driver(cc, cs, gap): cc.frame = 0 # force emission on the first step diff --git a/opendbc/car/mazda/tests/test_mazda_mazdacan.py b/opendbc/car/mazda/tests/test_mazda_mazdacan.py index 514d1777b89..52c72926629 100644 --- a/opendbc/car/mazda/tests/test_mazda_mazdacan.py +++ b/opendbc/car/mazda/tests/test_mazda_mazdacan.py @@ -11,7 +11,7 @@ from opendbc.car.mazda import mazdacan from opendbc.car.mazda.values import Buttons -from opendbc.car.mazda.tests.conftest import CAM_LANEINFO, LEAD_TRACK, parse_frame +from opendbc.car.mazda.tests.conftest import CAM_LANEINFO, LEAD_TRACK, SYNTHETIC_TRACK, parse_frame def crz_info_reference_checksum(dat): @@ -123,18 +123,54 @@ def test_crz_ctrl_golden_bytes(packer, long_active, acc_available, gap, has_lead assert dat.hex() == expected +@pytest.mark.parametrize("long_active, acc_available, gap, has_lead, phase, acc_active_2, expected", [ + (False, False, 0, False, 0, False, "0221010000000000"), # standby: the stock radar's frame + (False, True, 2, False, 0, False, "02210b0000000000"), # MRCC armed + (True, True, 2, True, 1, True, "0a218b2000001000"), # engaged +]) +def test_crz_ctrl_relays_hbc_arming(packer, long_active, acc_available, gap, has_lead, phase, acc_active_2, expected): + dat = mazdacan.create_crz_ctrl(packer, 0, long_active, acc_available, gap, has_lead, phase, acc_active_2, + hbc_armed=True)[1] + assert dat.hex() == expected + bare = mazdacan.create_crz_ctrl(packer, 0, long_active, acc_available, gap, has_lead, phase, acc_active_2)[1] + assert bytes(a ^ b for a, b in zip(dat, bare, strict=True)) == bytes([0, 0x20, 0, 0, 0, 0, 0, 0]) + + def test_radar_frames_match_stock(): expected = [ (0x499, "0008c00000000000"), (0x361, "fff7fefe1fc00080"), - (0x362, "fff7fefe1fc78c80"), + (0x362, "fff7fefe1fc00080"), (0x363, "fff7fefe1fc00000"), (0x364, "fff7fefe1fc00000"), - (0x365, "fff7fe7ffbff3fc0"), - (0x366, "fff7fe7ffbff3fc0"), ] frames = mazdacan.create_radar_frames(0, 0, None) - assert [(f.address, f.dat.hex()) for f in frames] == expected + # the static frame and the empty 1-4 tracks stay the stock capture; 5/6 open the cycle + assert [(f.address, f.dat.hex()) for f in frames[:5]] == expected + assert [f.address for f in frames[5:]] == [0x365, 0x366] + + +def test_radar_frames_send_the_synthetic_object_on_the_camera_bus(): + # Slot 5 holds the synthetic far object and slot 6 the empty template, with only the + # counter nibble moving; the body bus carries the empty templates for both slots. + for k in (0, 1, 7, 15, 16, 100): + for bus, cycle in ((2, mazdacan.SYNTHETIC_TRACK_CYCLE), (0, None)): + frames = {f.address: f.dat for f in mazdacan.create_radar_frames(bus, k, None)} + for addr in mazdacan.SYNTHETIC_TRACK_ADDRS: + want = cycle[addr] if cycle else mazdacan.RADAR_TRACK_56_EMPTY + assert frames[addr] == want[:7] + bytes([(want[7] & 0xf0) | (k % 16)]) + assert mazdacan.SYNTHETIC_TRACK_CYCLE[0x365] == bytes.fromhex("af00a4001bff37c1") + assert mazdacan.SYNTHETIC_TRACK_CYCLE[0x366] == mazdacan.RADAR_TRACK_56_EMPTY + + +def test_synthetic_track_decodes_to_a_far_static_object(): + # The never-suppress claim is about the decoded fields, not the bytes: 175 m nominal + # (the 2x-uncalibrated scale puts the true range in 87-350 m), zero closing speed, + # 2.6 deg off bore. + vl = parse_frame(SYNTHETIC_TRACK, mazdacan.SYNTHETIC_TRACK_CYCLE[SYNTHETIC_TRACK]) + assert vl["DIST_OBJ"] == pytest.approx(175.0) + assert vl["RELV_OBJ"] == 0. + assert vl["ANG_OBJ"] == pytest.approx(2.5625) def test_radar_frames_counter_and_lead_track(): diff --git a/opendbc/safety/modes/mazda.h b/opendbc/safety/modes/mazda.h index b8c861fcf58..95ef31b0d05 100644 --- a/opendbc/safety/modes/mazda.h +++ b/opendbc/safety/modes/mazda.h @@ -74,10 +74,7 @@ static bool mazda_empty_radar_track_msg_valid(const CANPacket_t *msg) { (msg->data[2] == 0xfeU) && (msg->data[3] == 0xfeU) && (msg->data[4] == 0x1fU); - if (msg->addr == MAZDA_RADAR_TRACK_2) { - valid = valid && (msg->data[5] == 0xc7U) && (msg->data[6] == 0x8cU) && - ((msg->data[7] & 0xf0U) == 0x80U); - } else if ((msg->addr == MAZDA_RADAR_TRACK_3) || (msg->addr == MAZDA_RADAR_TRACK_4)) { + if ((msg->addr == MAZDA_RADAR_TRACK_3) || (msg->addr == MAZDA_RADAR_TRACK_4)) { valid = valid && (msg->data[5] == 0xc0U) && (msg->data[6] == 0x00U) && ((msg->data[7] & 0xf0U) == 0x00U); } else { @@ -95,6 +92,48 @@ static bool mazda_empty_radar_track_msg_valid(const CANPacket_t *msg) { return valid; } +// The only occupied 5/6 pattern is the synthetic far object in slot 5 (mazdacan.py +// SYNTHETIC_TRACK_CYCLE); slot 6 sends the empty template. Occupied frames are camera-facing +// only; the body bus carries the empty templates through the empty pattern below. +#define MAZDA_SYNTHETIC_TRACK_FRAMES 1 + +static bool mazda_synthetic_track_frame_match(uint64_t capture, const CANPacket_t *msg) { + // byte 7's low nibble carries the live counter; every other bit must be exact + uint64_t dat = 0U; + for (int i = 0; i < 8; i++) { + dat = (dat << 8) | msg->data[i]; + } + return ((dat ^ capture) & 0xFFFFFFFFFFFFFFF0ULL) == 0U; +} + +static bool mazda_synthetic_track_msg_valid(const CANPacket_t *msg) { + // The occupied replay is camera-facing only; the body bus carries the empty templates + // through the empty pattern above. + bool valid = false; + if (msg->bus == (unsigned char)MAZDA_CAM) { + // block scope: the tables have a single consumer (misra-c2012-8.9) + static const uint64_t mazda_synthetic_track_5[MAZDA_SYNTHETIC_TRACK_FRAMES] = { + 0xaf00a4001bff37c1ULL, + }; + static const uint64_t mazda_synthetic_track_6[MAZDA_SYNTHETIC_TRACK_FRAMES] = { + 0xfff7fe7ffbff3fc0ULL, + }; + const uint64_t *table = NULL; + if (msg->addr == MAZDA_RADAR_TRACK_5) { + table = mazda_synthetic_track_5; + } else if (msg->addr == MAZDA_RADAR_TRACK_6) { + table = mazda_synthetic_track_6; + } else { + } + if (table != NULL) { + for (int i = 0; i < MAZDA_SYNTHETIC_TRACK_FRAMES; i++) { + valid = valid || mazda_synthetic_track_frame_match(table[i], msg); + } + } + } + return valid; +} + static bool mazda_synthetic_lead_radar_track_msg_valid(const CANPacket_t *msg) { // Permit only the distance and relative-velocity fields in the occupied-track template. return (msg->addr == MAZDA_RADAR_TRACK_4) && @@ -106,7 +145,8 @@ static bool mazda_synthetic_lead_radar_track_msg_valid(const CANPacket_t *msg) { static bool mazda_radar_track_msg_valid(const CANPacket_t *msg) { // Occupied tracks represent perception and remain valid while controls are disengaged. return mazda_empty_radar_track_msg_valid(msg) || - mazda_synthetic_lead_radar_track_msg_valid(msg); + mazda_synthetic_lead_radar_track_msg_valid(msg) || + mazda_synthetic_track_msg_valid(msg); } // track msgs coming from OP so that we know what CAM msgs to drop and what to forward diff --git a/opendbc/safety/tests/test_mazda.py b/opendbc/safety/tests/test_mazda.py index 66fb4395b8c..0dee3209692 100755 --- a/opendbc/safety/tests/test_mazda.py +++ b/opendbc/safety/tests/test_mazda.py @@ -3,6 +3,7 @@ from collections import deque from opendbc.car.lateral import apply_driver_steer_torque_limits +from opendbc.car.mazda import mazdacan from opendbc.car.mazda.values import CAR, CarControllerParams, MazdaFlags, MazdaSafetyFlags from opendbc.car.structs import CarParams from opendbc.sunnypilot.car.mazda.values import MazdaSafetyFlagsSP @@ -495,7 +496,7 @@ def test_empty_radar_tracks_allowed(self): radar_messages = { 0x499: bytes.fromhex("0008c00000000000"), 0x361: bytes.fromhex("fff7fefe1fc00080"), - 0x362: bytes.fromhex("fff7fefe1fc78c80"), + 0x362: bytes.fromhex("fff7fefe1fc00080"), 0x363: bytes.fromhex("fff7fefe1fc00000"), 0x364: bytes.fromhex("fff7fefe1fc00000"), 0x365: bytes.fromhex("fff7fe7ffbff3fc0"), @@ -554,10 +555,12 @@ def test_malformed_lead_radar_track_blocked(self): self.assertFalse(self._tx(common.make_msg(bus, 0x364, 8, bytes.fromhex(hexdat)))) def test_unexpected_radar_tracks_blocked(self): + # 0x362 carries the retired phantom-track capture (c7 8c): a frozen non-empty + # slot that stock never sends idle bad_messages = { 0x499: bytes.fromhex("0008c00100000000"), 0x361: bytes.fromhex("fff7fefe1fc00180"), - 0x362: bytes.fromhex("fff7fefe1fc00080"), + 0x362: bytes.fromhex("fff7fefe1fc78c80"), 0x363: bytes.fromhex("fff7fefe1fc00080"), 0x364: bytes.fromhex("fff7fefe1fc00080"), 0x365: bytes.fromhex("fff7fe7ffbff3f80"), @@ -569,6 +572,31 @@ def test_unexpected_radar_tracks_blocked(self): for addr, dat in bad_messages.items(): self.assertFalse(self._tx(common.make_msg(bus, addr, 8, dat))) + def test_synthetic_track_cycle_allowed(self): + # the occupied 5/6 frame must pass on the camera bus; the counter nibble is stamped per + # send, so any of its values must be accepted. Occupied frames are camera-facing: the + # body bus rejects them and carries the empty templates, which stay valid on both buses. + for addr, dat in mazdacan.SYNTHETIC_TRACK_CYCLE.items(): + for ctr in (0, 7, 15): + stamped = dat[:7] + bytes([(dat[7] & 0xf0) | ctr]) + for controls_allowed in (False, True): + self.safety.set_controls_allowed(controls_allowed) + self.assertTrue(self._tx(common.make_msg(2, addr, 8, stamped))) + dat = mazdacan.SYNTHETIC_TRACK_CYCLE[0x365] + self.assertFalse(self._tx(common.make_msg(0, 0x365, 8, dat[:7] + bytes([(dat[7] & 0xf0) | 7])))) + for ctr in (0, 15): + stamped = mazdacan.RADAR_TRACK_56_EMPTY[:7] + bytes([0xc0 | ctr]) + for bus in (0, 2): + self.assertTrue(self._tx(common.make_msg(bus, 0x365, 8, stamped))) + + def test_synthetic_track_corruption_blocked(self): + # any flipped body byte is a different frame and must fail; byte 7's low nibble is the + # live counter and stays exempt + dat = mazdacan.SYNTHETIC_TRACK_CYCLE[0x365] + for i in range(7): + self.assertFalse(self._tx(common.make_msg(2, 0x365, 8, dat[:i] + bytes([dat[i] ^ 0x01]) + dat[i + 1:]))) + self.assertFalse(self._tx(common.make_msg(2, 0x365, 8, dat[:7] + bytes([(dat[7] & 0x0f) | 0x40])))) + def test_radar_uds_allowlist(self): # tester present and session control only, main bus only self.assertTrue(self._tx(common.make_msg(0, 0x764, 8, bytes.fromhex("023e800000000000"))))