autoverse-cli 0.4.0__py3-none-any.whl → 0.5.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,155 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+ from argparse import RawDescriptionHelpFormatter
3
+ from argparse import RawTextHelpFormatter
4
+
5
+ class AvrsFaultInjectionRequests():
6
+ def __init__(self, parser, cfg):
7
+ psr = parser.add_parser('inject-fault', help='utilty to inject faults into components (sensors, actuators, etc)')
8
+ sps = psr.add_subparsers(required= True, help='sub-command inject-fault')
9
+ AvrsGnssFaultRequest(sps, cfg)
10
+ AvrsLidarFaultRequest(sps, cfg)
11
+ AvrsImuFaultRequest(sps, cfg)
12
+
13
+ def add_base_injection_args(psr):
14
+
15
+ psr.add_argument(
16
+ '--target',
17
+ default='ego',
18
+ help='the simulated object to apply the fault to')
19
+
20
+ psr.add_argument(
21
+ '--duration',
22
+ type=float,
23
+ default=1.0,
24
+ help='how long to apply the fault (0.0 is infinite)')
25
+
26
+ psr.add_argument(
27
+ '--dropout',
28
+ action='store_true',
29
+ help='if specified, will apply a complete dropout fault')
30
+
31
+ psr.add_argument(
32
+ '--freeze',
33
+ action='store_true',
34
+ help='if specified, will freeze the data (values will not change)')
35
+
36
+ class AvrsGnssFaultRequest(AvrsApiRequest):
37
+ def __init__(self, parser, cfg):
38
+ AvrsApiRequest.__init__(self, parser, cfg, 'FaultInjection', '')
39
+
40
+ psr = parser.add_parser(
41
+ 'gnss',
42
+ help='inject a gnss fault',
43
+ formatter_class=RawTextHelpFormatter)
44
+
45
+ psr.add_argument(
46
+ '--horizontal-bias',
47
+ type=float,
48
+ default=0.0,
49
+ help='horizontal bias to apply to the sensor as a fault')
50
+
51
+ psr.add_argument(
52
+ '--vertical-bias',
53
+ type=float,
54
+ default=0.0,
55
+ help='vertical bias to apply to the sensor as a fault')
56
+
57
+ psr.add_argument(
58
+ '--horizontal-stdev',
59
+ type=float,
60
+ default=0.0,
61
+ help='horizontal standard deviation to apply to the sensor')
62
+
63
+ psr.add_argument(
64
+ '--vertical-stdev',
65
+ type=float,
66
+ default=0.0,
67
+ help='vertical standard deviation to apply to the sensor')
68
+
69
+ add_base_injection_args(psr)
70
+ psr.set_defaults(func=self.send_request)
71
+
72
+ def get_request_body(self, args):
73
+ self.target_object_id = args.target
74
+ self.verbose = args.verbose
75
+ return {
76
+ 'faultType': 'GnssFault',
77
+ 'duration': args.duration,
78
+ 'bIsDropout': args.dropout,
79
+ 'bIsFreeze': args.freeze,
80
+ 'JsonBody': {
81
+ 'verticalBias': args.vertical_bias,
82
+ 'verticalStdev': args.vertical_stdev,
83
+ 'horizontalBias': args.horizontal_bias,
84
+ 'horizontalStdev': args.horizontal_stdev
85
+ }
86
+ }
87
+
88
+ class AvrsImuFaultRequest(AvrsApiRequest):
89
+ def __init__(self, parser, cfg):
90
+ AvrsApiRequest.__init__(self, parser, cfg, 'FaultInjection', '')
91
+
92
+ psr = parser.add_parser(
93
+ 'imu',
94
+ help='inject an imu fault',
95
+ formatter_class=RawTextHelpFormatter)
96
+
97
+ psr.add_argument(
98
+ '--bias',
99
+ type=float,
100
+ default=0.0,
101
+ help='horizontal bias to apply to the sensor as a fault')
102
+
103
+ psr.add_argument(
104
+ '--stdev',
105
+ type=float,
106
+ default=0.0,
107
+ help='horizontal standard deviation to apply to the sensor')
108
+
109
+ add_base_injection_args(psr)
110
+ psr.set_defaults(func=self.send_request)
111
+
112
+ def get_request_body(self, args):
113
+ self.target_object_id = args.target
114
+ self.verbose = args.verbose
115
+ return {
116
+ 'faultType': 'ImuFault',
117
+ 'duration': args.duration,
118
+ 'bIsDropout': args.dropout,
119
+ 'bIsFreeze': args.freeze,
120
+ 'JsonBody': {
121
+ 'bias': args.bias,
122
+ 'stdev': args.stdev
123
+ }
124
+ }
125
+
126
+ class AvrsLidarFaultRequest(AvrsApiRequest):
127
+ def __init__(self, parser, cfg):
128
+ AvrsApiRequest.__init__(self, parser, cfg, 'FaultInjection', '')
129
+
130
+ psr = parser.add_parser(
131
+ 'lidar',
132
+ help='inject a lidar fault',
133
+ formatter_class=RawTextHelpFormatter)
134
+
135
+ psr.add_argument(
136
+ '--point-density-reduction',
137
+ type=float,
138
+ default=0.5,
139
+ help='the percent of point density reduction, where 1.0 drops all points')
140
+
141
+ add_base_injection_args(psr)
142
+ psr.set_defaults(func=self.send_request)
143
+
144
+ def get_request_body(self, args):
145
+ self.target_object_id = args.target
146
+ self.verbose = args.verbose
147
+ return {
148
+ 'faultType': 'LidarFault',
149
+ 'duration': args.duration,
150
+ 'bIsDropout': args.dropout,
151
+ 'bIsFreeze': args.freeze,
152
+ 'JsonBody': {
153
+ 'pointDensityReduction': args.point_density_reduction
154
+ }
155
+ }
@@ -0,0 +1,26 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+
3
+ class AvrsListSimObjectsRequest(AvrsApiRequest):
4
+ def __init__(self, parser, cfg):
5
+ AvrsApiRequest.__init__(self, parser, cfg, 'ListSimObjects', 0)
6
+ psr = parser.add_parser('list-sim-objects', help='list all the sim objects that currently exist in the simulator')
7
+ psr.add_argument(
8
+ '-v',
9
+ action='store_true',
10
+ help='request verbose output')
11
+ psr.add_argument(
12
+ '--components',
13
+ action='store_true',
14
+ help='also print information about the object components')
15
+ psr.add_argument(
16
+ '--isolate',
17
+ default='',
18
+ help='indicate a specific object of interest')
19
+ psr.set_defaults(func=self.send_request)
20
+
21
+ def get_request_body(self, args):
22
+ return {
23
+ "bVerbose": args.v,
24
+ 'bListComponents': args.components,
25
+ 'isolate': args.isolate
26
+ }
avrs/requests/request.py CHANGED
@@ -11,12 +11,15 @@ class AvrsApiRequest:
11
11
  def __init__(self, parser, cfg, request_type, target_id):
12
12
  self.target_object_id = target_id
13
13
  self.request_type = request_type
14
+ self.verbose = False
14
15
 
15
16
  def get_request(self, args):
17
+ body = json.dumps(self.get_request_body(args))
16
18
  return {
17
19
  'TargetObjectId': self.target_object_id,
18
20
  'RequestType': self.request_type,
19
- 'RequestBody': json.dumps(self.get_request_body(args))
21
+ 'bVerboseResponse': self.verbose,
22
+ 'RequestBody': body
20
23
  }
21
24
 
22
25
  def get_request_body(self, args):
@@ -0,0 +1,43 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+ from argparse import RawDescriptionHelpFormatter
3
+ from argparse import RawTextHelpFormatter
4
+
5
+ class AvrsScenarioRequests():
6
+ def __init__(self, parser, cfg):
7
+ psr = parser.add_parser('scenario', help='commands related to scenarios in the simulator')
8
+ sps = psr.add_subparsers(required= True, help='sub-command scenario')
9
+ StartScenarioRequest(sps, cfg)
10
+ StopScenarioRequest(sps, cfg)
11
+
12
+ class StartScenarioRequest(AvrsApiRequest):
13
+ def __init__(self, parser, cfg):
14
+ AvrsApiRequest.__init__(self, parser, cfg, 'ScenarioControl', '')
15
+ psr = parser.add_parser(
16
+ 'start', help='start a scenario', formatter_class=RawTextHelpFormatter)
17
+
18
+ psr.add_argument(
19
+ 'scenario_name',
20
+ default='',
21
+ help='the name of the scenario to start')
22
+
23
+ psr.set_defaults(func=self.send_request)
24
+
25
+
26
+ def get_request_body(self, args):
27
+ return {
28
+ 'scenarioName': args.scenario_name,
29
+ 'action': 'start'
30
+ }
31
+
32
+ class StopScenarioRequest(AvrsApiRequest):
33
+ def __init__(self, parser, cfg):
34
+ AvrsApiRequest.__init__(self, parser, cfg, 'ScenarioControl', '')
35
+ psr = parser.add_parser(
36
+ 'stop', help='stop any active scenarios', formatter_class=RawTextHelpFormatter)
37
+
38
+ psr.set_defaults(func=self.send_request)
39
+
40
+ def get_request_body(self, args):
41
+ return {
42
+ 'action': 'stop'
43
+ }
@@ -0,0 +1,21 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+
3
+ class AvrsConfigureVehicleInputRequest(AvrsApiRequest):
4
+ def __init__(self, parser, cfg):
5
+ AvrsApiRequest.__init__(self, parser, cfg, 'ConfigureVehicleInput', 'Ego')
6
+ psr = parser.add_parser(
7
+ 'configure-vehicle-input',
8
+ help='Allows different input modes to be set for a vehicle')
9
+
10
+ psr.add_argument(
11
+ 'input_mode',
12
+ default='None',
13
+ choices=['None', 'Keyboard', 'WheelAndPedals', 'CAN'],
14
+ help='the type of input mode to set')
15
+
16
+ psr.set_defaults(func=self.send_request)
17
+
18
+ def get_request_body(self, args):
19
+ return {
20
+ "InputMode": args.input_mode
21
+ }
@@ -0,0 +1,191 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+ from argparse import RawDescriptionHelpFormatter
3
+ from argparse import RawTextHelpFormatter
4
+
5
+ class AvrsVehicleReplayRequests():
6
+ def __init__(self, parser, cfg):
7
+ psr = parser.add_parser('vehicle-replay', help='utilty for recording and replaying vehicle motion')
8
+ sps = psr.add_subparsers(required= True, help='sub-command vehicle-replay')
9
+ SpawnReplayVehicle(sps, cfg)
10
+ StartVehicleReplayRecording(sps, cfg)
11
+ StopVehicleReplayRecording(sps, cfg)
12
+
13
+ class SpawnReplayVehicle(AvrsApiRequest):
14
+ def __init__(self, parser, cfg):
15
+ AvrsApiRequest.__init__(self, parser, cfg, 'SpawnObject', '')
16
+ psr = parser.add_parser(
17
+ 'spawn', help='spawn a vehicle intended to replay motion', formatter_class=RawTextHelpFormatter)
18
+
19
+ psr.add_argument(
20
+ 'replay_file',
21
+ default='',
22
+ help='the replay file to use ("random" for a random profile)')
23
+
24
+ psr.add_argument(
25
+ '--name',
26
+ default='npc0',
27
+ help='name of the replay vehicle to spawn')
28
+
29
+ psr.add_argument(
30
+ '--vehicle-type',
31
+ default='EAV24',
32
+ help='what type of vehicle to spawn for replay')
33
+
34
+ # psr.add_argument(
35
+ # '--position',
36
+ # choices=('relative', 'absolute'),
37
+ # default='absolute',
38
+ # help=NPC_SPAWN_POSITION_HELP)
39
+
40
+
41
+ # psr.add_argument(
42
+ # '--velocity-type',
43
+ # default='constant',
44
+ # help='the path the NPC follows is a constant velocity or speed')
45
+
46
+ # psr.add_argument(
47
+ # '--speed',
48
+ # type=float,
49
+ # default=20,
50
+ # help='the speed of the npc is m/s')
51
+
52
+ psr.add_argument(
53
+ '--rate',
54
+ type=float,
55
+ default=1.0,
56
+ help='the playback rate, 1.0 is normal')
57
+
58
+ psr.add_argument(
59
+ '--random-start',
60
+ action='store_true',
61
+ help='if set, will start at a random point in the replay')
62
+
63
+ psr.add_argument(
64
+ '--relative-dist',
65
+ type=float,
66
+ default=40.0,
67
+ help='the distance relative to ego to start the playback (-1 to start at playback start)')
68
+
69
+ psr.add_argument(
70
+ '--auto-start',
71
+ action='store_true',
72
+ help='if set, the npc will begin moving immediately')
73
+
74
+ # psr.add_argument(
75
+ # '--enable-sensors',
76
+ # type=bool,
77
+ # default=False,
78
+ # help='whether to enable sensors on the replay vehicle')
79
+
80
+ psr.add_argument(
81
+ '--with-view-cameras',
82
+ action='store_true',
83
+ help='if set, will attach viewing cameras to the replay vehicle')
84
+
85
+ psr.set_defaults(func=self.send_request)
86
+
87
+
88
+ def get_request_body(self, args):
89
+
90
+ replay_ipd = {
91
+ 'bEnableRecording': False,
92
+ 'bRecordOnPhysicsTick': False,
93
+ 'recordMotionMinSpeedThreshold': 0.01,
94
+ 'bEnableReplay': True,
95
+ 'bApplyInitialConfig': True,
96
+ 'initialConfig': {
97
+ 'playRate': args.rate,
98
+ 'profile': args.replay_file,
99
+ 'bUseRandomProfile': args.replay_file == 'random',
100
+ 'replayAction': 'start' if args.auto_start else '',
101
+ 'bStartReplayAtRandomTime': args.random_start,
102
+ 'relativeDistance': args.relative_dist
103
+ }
104
+ }
105
+
106
+ eav_init_pld = {
107
+ "bEnableBsuCan": False,
108
+ "bEnableKistlerCan": False,
109
+ "bEnableBadeniaCan": False,
110
+ "bHudEnabled": False,
111
+ "bLidarEnabled": False,
112
+ "bCameraEnabled": False,
113
+ "bPublishInputs": False,
114
+ "bPublishGroundTruth": False
115
+ }
116
+
117
+ plds = [
118
+ {
119
+ 'TypeName': 'WheeledVehicleReplayIpd',
120
+ 'Body': replay_ipd
121
+ },
122
+ {
123
+ 'TypeName': 'Eav24Initializer',
124
+ 'Body': eav_init_pld
125
+ }
126
+ ]
127
+
128
+ if args.with_view_cameras:
129
+ plds.append(
130
+ {
131
+ 'TypeName': 'InitializerTemplates',
132
+ 'Body': {
133
+ 'Templates': [
134
+ {
135
+ 'PayloadType': 'SimViewTargetIpd',
136
+ 'PayloadSpec': 'DefaultCarCams'
137
+ }
138
+ ]
139
+ }
140
+ })
141
+
142
+ return {
143
+ 'Name': args.name,
144
+ 'Type': args.vehicle_type,
145
+ 'Location': {},
146
+ 'Rotation': {},
147
+ 'Payloads': plds
148
+ }
149
+
150
+ class StartVehicleReplayRecording(AvrsApiRequest):
151
+ def __init__(self, parser, cfg):
152
+ AvrsApiRequest.__init__(self, parser, cfg, 'ConfigureVehicleReplay', 'Ego')
153
+ psr = parser.add_parser(
154
+ 'start-recording', help='begin recording vehicle motion', formatter_class=RawTextHelpFormatter)
155
+
156
+ psr.add_argument(
157
+ 'out_file',
158
+ help='the file name to use for the saved recording')
159
+
160
+ psr.add_argument(
161
+ '--rate-hz',
162
+ type=float,
163
+ default=100.0,
164
+ help='the rate to record vehicle motion. high rates will produce large files')
165
+
166
+ psr.set_defaults(func=self.send_request)
167
+
168
+
169
+ def get_request_body(self, args):
170
+ return {
171
+ 'PlayRate': -1.0,
172
+ 'profile': '',
173
+ 'replayAction': '',
174
+ #'teleportLocation': '',
175
+ 'recordAction': 'start',
176
+ 'recordFileName': args.out_file,
177
+ 'recordRateHz': args.rate_hz
178
+ }
179
+
180
+ class StopVehicleReplayRecording(AvrsApiRequest):
181
+ def __init__(self, parser, cfg):
182
+ AvrsApiRequest.__init__(self, parser, cfg, 'ConfigureVehicleReplay', 'Ego')
183
+ psr = parser.add_parser(
184
+ 'stop-recording', help='begin recording vehicle motion', formatter_class=RawTextHelpFormatter)
185
+ psr.set_defaults(func=self.send_request)
186
+
187
+
188
+ def get_request_body(self, args):
189
+ return {
190
+ 'recordAction': 'stop',
191
+ }
avrs/simconfig.py ADDED
@@ -0,0 +1,61 @@
1
+ import os
2
+ import stat
3
+ import json
4
+ import http.client
5
+ from avrs.cfg import *
6
+ from avrs.launcher_util import *
7
+ from avrs.simconfig_util import *
8
+
9
+ class AvrsSimConfig:
10
+ def __init__(self, parent_parser, cfg):
11
+ self.cfg = cfg
12
+ sim_config_parser = parent_parser.add_parser(
13
+ 'sim-config',
14
+ help='utilities for easily configuring the simulator\n\n')
15
+
16
+ sps = sim_config_parser.add_subparsers(required=True, help='sim-config options')
17
+
18
+ apply_preset_parser = sps.add_parser(
19
+ 'apply-preset',
20
+ help='apply a preset configuration for a certain use-case')
21
+ apply_preset_parser.add_argument(
22
+ 'preset_name',
23
+ choices=['default', 'lightweight', 'a2rl'],
24
+ help='the name of the preset to apply')
25
+ apply_preset_parser.add_argument(
26
+ '--sim-path',
27
+ default='',
28
+ help='''
29
+ the path to the simulator installation having the intended config to modify, or the
30
+ index of a known installation. if there is only one known installation, it will be used as
31
+ the target
32
+ ''')
33
+ apply_preset_parser.set_defaults(func=self.apply_preset)
34
+
35
+
36
+ def apply_preset(self, args):
37
+ sim_path = args.sim_path
38
+ if sim_path == '':
39
+ if 'installs' in self.cfg and len(self.cfg['installs']) > 0:
40
+ if len(self.cfg['installs']) > 1:
41
+ print('multiple known installs. specify path or index')
42
+ for i in range(len(self.cfg['installs'])):
43
+ print('({}) {}'.format(i, self.cfg['installs'][i]))
44
+ return
45
+ else:
46
+ sim_path = self.cfg['installs'][0]
47
+ else:
48
+ print('sim_path not specified and no known existing installations')
49
+ return
50
+ try:
51
+ sim_path_index = int(sim_path)
52
+ if 'installs' in self.cfg and len(self.cfg['installs']) > sim_path_index:
53
+ sim_path = self.cfg['installs'][sim_path_index]
54
+ except Exception as e:
55
+ pass
56
+ if not is_installed_sim(sim_path):
57
+ print('{} is not a valid sim installation'.format(sim_path))
58
+ return
59
+
60
+ print('applying preset {} to sim install at {}'.format(args.preset_name, sim_path))
61
+ apply_simconfig_preset(get_sim_saved_dir(sim_path), args.preset_name)
avrs/simconfig_util.py ADDED
@@ -0,0 +1,70 @@
1
+ import os
2
+ import json
3
+
4
+ class SimConfigFiles():
5
+ def __init__(self, saved_dir):
6
+
7
+ self.required_files = {
8
+ 'main': os.path.join(saved_dir, 'simconfig.json'),
9
+ 'eav24': os.path.join(saved_dir, 'Objects', 'Eav24_default.json'),
10
+ 'yas': os.path.join(saved_dir, 'Environments', 'yasmarina_env.json')
11
+ }
12
+ self.files = {}
13
+
14
+ ok, status = self.valdiate()
15
+ if ok:
16
+ for name, path in self.required_files.items():
17
+ with open(path, 'r', encoding='utf-8') as f:
18
+ self.files[name] = json.load(f)
19
+
20
+ def valdiate(self):
21
+ for name, path in self.required_files.items():
22
+ if not os.path.exists(path):
23
+ return (False, '{} not found'.format(path))
24
+ return (True, '')
25
+
26
+ def save(self):
27
+ for name, path in self.required_files.items():
28
+ with open(path, 'w', encoding='utf-8') as f:
29
+ json.dump(self.files[name], f, ensure_ascii=False, indent=4)
30
+
31
+ def apply_simconfig_preset(sim_saved_dir, preset_name):
32
+ cfg_files = SimConfigFiles(sim_saved_dir)
33
+ ok, status = cfg_files.valdiate()
34
+ if not ok:
35
+ print(status)
36
+ return
37
+
38
+ presets = {
39
+ 'default': apply_default_simconfig_preset,
40
+ 'lightweight': apply_lightweight_simconfig_preset,
41
+ 'a2rl': apply_a2rl_simconfig_preset
42
+ }
43
+ presets[preset_name](cfg_files)
44
+
45
+ def apply_default_simconfig_preset(cfg_files):
46
+ files = cfg_files.files
47
+
48
+ print('globally enabling ROS2 and CAN')
49
+ files['main']['interfaces']['bEnableRos2'] = True
50
+ files['main']['interfaces']['bEnableCan'] = True
51
+
52
+ print('ensuring default eav24 and yasmarina are reference in main config')
53
+ if not 'Environments/yasmarina_env.json' in files['main']['environmentPaths']:
54
+ print('missing yas environment. adding')
55
+ print('{}'.format(files['main']['environmentPaths']))
56
+ if not 'Objects/Eav24_default.json' in files['main']['objectTemplatePaths']:
57
+ print('missing eav24. adding')
58
+
59
+ cfg_files.save()
60
+
61
+
62
+ def apply_lightweight_simconfig_preset(cfg_files):
63
+ files = cfg_files.files
64
+
65
+ cfg_files.save()
66
+
67
+ def apply_a2rl_simconfig_preset(cfg_files):
68
+ files = cfg_files.files
69
+
70
+ cfg_files.save()
@@ -1,28 +0,0 @@
1
- avrs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- avrs/app_version.py,sha256=U9S11DYP1oLycncpvTmnWvqUunUHaEDl_O6Elho4iEw,855
3
- avrs/argparse_help.py,sha256=EoEaohGXZXqJvs1dFEzbo9vh47CYdHdSY2Im2Ps2iFo,945
4
- avrs/avrs.py,sha256=3dP6YE8aB2IGN0wu_FUcRW4fch6h-b97sFcUeF0vfC0,1953
5
- avrs/cfg.py,sha256=9NBtPrJjVN7gj_vxlvO4wOEx3OFw4d2qQgLIVLiccD0,701
6
- avrs/launcher.py,sha256=OWwIQDgeIwGLgmLnCxv7RbzVfRNLxSbg3eaZLJ2K64s,7467
7
- avrs/launcher_util.py,sha256=X60Jd2JUXr1MmdEF0lwjUBC5gHZte9uLlSgLWOLofXc,5121
8
- avrs/tests.py,sha256=3JeYBjn0tRqHXERDROfzmYuW1KXeCcKur5Bw-EIegto,153
9
- avrs/requests/can.py,sha256=iL2Dsk-V4tm37D-F1QoauaxeQtLAbg5br7zJcoR9h0o,5295
10
- avrs/requests/code_booz.py,sha256=5bzT8Ra6EIwI19TqXMxkHG_llnyFgqSzTSo7yLNV9Vc,2274
11
- avrs/requests/demo.py,sha256=TksvKX5YmL8-FQ4h7MWwjyIwcaZQrF9vCQ20PdfgS3Q,1138
12
- avrs/requests/edit_environment.py,sha256=iITvLHJ4N6m-RE8dC_KnFxoTNKSjQu7ydERfQvVtb58,828
13
- avrs/requests/input.py,sha256=SkfVjk3LsOhYNXEwn0rcSS6kZK3g8DXoMPX8Zc9LnCo,1855
14
- avrs/requests/log_path.py,sha256=Ur24C9VqPVx78MfpicgQu2uOEe-0dXbGoWF_7dzMtZE,1326
15
- avrs/requests/move_to_landmark.py,sha256=cLRBKu9XEDsmCoftBJ8JwoBLqzb0IZsxFMBnus4T-kc,702
16
- avrs/requests/npc.py,sha256=Y_WovbcLomCCcOLAMMO_DHZtc1crAzWo97qEIGS3SvU,9691
17
- avrs/requests/request.py,sha256=3hbBAt_Kd9n-HuggIbziJ3xs-VcRfLBc2GEFSOQ-LJ4,1512
18
- avrs/requests/reserve_mv_slot.py,sha256=p_jiTV7rcoyJU6u3UR9sqPBpSaq8-PWMEs0Ckm2Hf8w,3843
19
- avrs/requests/reset_to_track.py,sha256=lSd2YavBxDV_hQMhVoi08_TpTFEq7G2MA18xosFYa1g,450
20
- avrs/requests/restart.py,sha256=ih5mnWiU34q3-xhOth45CtOUXxKI0PoMDCnFJV0JbwE,415
21
- avrs/requests/teleport.py,sha256=WpnB2-Ii0FGI11EXTAHlaF5zqZIsgEyJnJ2j_w4rDFY,824
22
- avrs/requests/vd.py,sha256=at6oUAGY2h0OxYU6MLOi1gnxyUn6i24vL9DUAj0L880,1600
23
- autoverse_cli-0.4.0.dist-info/LICENSE,sha256=d4eWXho-u18HkBsX4K21uHX_bBb2UXZSrJdsb7Z_JlM,2647
24
- autoverse_cli-0.4.0.dist-info/METADATA,sha256=1ekzIvDf6Hwm5gthZcMYVCzcjFKRC7DIETN7cOCD4ng,3296
25
- autoverse_cli-0.4.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
26
- autoverse_cli-0.4.0.dist-info/entry_points.txt,sha256=Cb9qsUyU5AKkklehCcvtfT0-N3SXbUEqvjze4iEU5kE,40
27
- autoverse_cli-0.4.0.dist-info/top_level.txt,sha256=-AJO2e4MCVej6hY0U84pu5NfMeMW5qaAPSMisDT5rmA,5
28
- autoverse_cli-0.4.0.dist-info/RECORD,,