UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

1,389 lines 48.5 kB
import { SERVICE_CALLS } from './service-calls'; import { AbstractService } from '@iotize/tap'; export class TargetService extends AbstractService { constructor() { super(...arguments); this.resources = SERVICE_CALLS; } /** * Get target protocol * * LWM2M path: /1027//1 * * @tapVersion(">=1.0") * @return */ getProtocol() { return this.serviceCallRunner.execute(this.getProtocolCall()); } /** * * * LWM2M path: /1027//1 * * @tapVersion(">=1.0") * @return call options */ getProtocolCall() { const callOptions = Object.assign({}, this.resources.getProtocol); return callOptions; } /** * Temporarily change target protocol * * LWM2M path: /1027//1 * * @tapVersion(">=1.0") * @param targetProtocol input * @return */ setProtocol( /* * TargetProtocol object to set */ targetProtocol) { return this.serviceCallRunner.execute(this.setProtocolCall(targetProtocol)); } /** * * * LWM2M path: /1027//1 * * @tapVersion(">=1.0") * @param targetProtocol input * @return call options */ setProtocolCall( /* * TargetProtocol object to set */ targetProtocol) { const callOptions = Object.assign({}, this.resources.setProtocol); callOptions.body = targetProtocol; return callOptions; } /** * Write target protocol in configuration * * LWM2M path: /1027//1 * * @tapVersion(">=1.0") * @param targetProtocol input * @return */ putProtocol( /* * TargetProtocol object to set */ targetProtocol) { return this.serviceCallRunner.execute(this.putProtocolCall(targetProtocol)); } /** * * * LWM2M path: /1027//1 * * @tapVersion(">=1.0") * @param targetProtocol input * @return call options */ putProtocolCall( /* * TargetProtocol object to set */ targetProtocol) { const callOptions = Object.assign({}, this.resources.putProtocol); callOptions.body = targetProtocol; return callOptions; } /** * Get core type * * LWM2M path: /1027//2 * * @tapVersion(">=1.0") * @return */ getCoreType() { return this.serviceCallRunner.execute(this.getCoreTypeCall()); } /** * * * LWM2M path: /1027//2 * * @tapVersion(">=1.0") * @return call options */ getCoreTypeCall() { const callOptions = Object.assign({}, this.resources.getCoreType); return callOptions; } /** * Write core type * * LWM2M path: /1027//2 * * @tapVersion(">=1.0") * @param value input * @return */ putCoreType( /* * Write core type */ value) { return this.serviceCallRunner.execute(this.putCoreTypeCall(value)); } /** * * * LWM2M path: /1027//2 * * @tapVersion(">=1.0") * @param value input * @return call options */ putCoreTypeCall( /* * Write core type */ value) { const callOptions = Object.assign({}, this.resources.putCoreType); callOptions.body = value; return callOptions; } /** * Read target protocol connection status * * LWM2M path: /1027//3 * * @tapVersion(">=1.63") * @return */ isConnected() { return this.serviceCallRunner.execute(this.isConnectedCall()); } /** * * * LWM2M path: /1027//3 * * @tapVersion(">=1.63") * @return call options */ isConnectedCall() { const callOptions = Object.assign({}, this.resources.isConnected); return callOptions; } /** * Connect to target * * LWM2M path: /1027//3 * * @tapVersion(">=1.0") * @return */ connect() { return this.serviceCallRunner.execute(this.connectCall()); } /** * * * LWM2M path: /1027//3 * * @tapVersion(">=1.0") * @return call options */ connectCall() { const callOptions = Object.assign({}, this.resources.connect); return callOptions; } /** * Disconnect from target * * LWM2M path: /1027//4 * * @tapVersion(">=1.0") * @return */ disconnect() { return this.serviceCallRunner.execute(this.disconnectCall()); } /** * * * LWM2M path: /1027//4 * * @tapVersion(">=1.0") * @return call options */ disconnectCall() { const callOptions = Object.assign({}, this.resources.disconnect); return callOptions; } /** * Reset target * * LWM2M path: /1027//5 * * @tapVersion(">=1.0") * @return */ reset() { return this.serviceCallRunner.execute(this.resetCall()); } /** * * * LWM2M path: /1027//5 * * @tapVersion(">=1.0") * @return call options */ resetCall() { const callOptions = Object.assign({}, this.resources.reset); return callOptions; } /** * Get target firmware version * * LWM2M path: /1027//6 * * @tapVersion(">=1.0") * @return */ getFirmwareVersion() { return this.serviceCallRunner.execute(this.getFirmwareVersionCall()); } /** * * * LWM2M path: /1027//6 * * @tapVersion(">=1.0") * @return call options */ getFirmwareVersionCall() { const callOptions = Object.assign({}, this.resources.getFirmwareVersion); return callOptions; } /** * Write target firmware version * * LWM2M path: /1027//6 * * @tapVersion(">=1.0") * @param value input * @return */ putFirmwareVersion( /* * */ value) { return this.serviceCallRunner.execute(this.putFirmwareVersionCall(value)); } /** * * * LWM2M path: /1027//6 * * @tapVersion(">=1.0") * @param value input * @return call options */ putFirmwareVersionCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putFirmwareVersion); callOptions.body = value; return callOptions; } /** * Get vcc * * LWM2M path: /1027//7 * * @tapVersion(">=1.0") * @return */ getVcc() { return this.serviceCallRunner.execute(this.getVccCall()); } /** * * * LWM2M path: /1027//7 * * @tapVersion(">=1.0") * @return call options */ getVccCall() { const callOptions = Object.assign({}, this.resources.getVcc); return callOptions; } /** * Get min target voltage * * LWM2M path: /1027//8 * * @tapVersion(">=1.0") * @return */ getMinVoltage() { return this.serviceCallRunner.execute(this.getMinVoltageCall()); } /** * * * LWM2M path: /1027//8 * * @tapVersion(">=1.0") * @return call options */ getMinVoltageCall() { const callOptions = Object.assign({}, this.resources.getMinVoltage); return callOptions; } /** * Write min target voltage value * * LWM2M path: /1027//8 * * @tapVersion(">=1.0") * @param value input * @return */ putMinVoltage( /* * */ value) { return this.serviceCallRunner.execute(this.putMinVoltageCall(value)); } /** * * * LWM2M path: /1027//8 * * @tapVersion(">=1.0") * @param value input * @return call options */ putMinVoltageCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putMinVoltage); callOptions.body = value; return callOptions; } /** * Get max target voltage * * LWM2M path: /1027//9 * * @tapVersion(">=1.0") * @return */ getMaxVoltage() { return this.serviceCallRunner.execute(this.getMaxVoltageCall()); } /** * * * LWM2M path: /1027//9 * * @tapVersion(">=1.0") * @return call options */ getMaxVoltageCall() { const callOptions = Object.assign({}, this.resources.getMaxVoltage); return callOptions; } /** * Write max target voltage value * * LWM2M path: /1027//9 * * @tapVersion(">=1.0") * @param value input * @return */ putMaxVoltage( /* * */ value) { return this.serviceCallRunner.execute(this.putMaxVoltageCall(value)); } /** * * * LWM2M path: /1027//9 * * @tapVersion(">=1.0") * @param value input * @return call options */ putMaxVoltageCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putMaxVoltage); callOptions.body = value; return callOptions; } /** * Get target page size * * LWM2M path: /1027//10 * * @tapVersion(">=1.0") * @return */ getPageSize() { return this.serviceCallRunner.execute(this.getPageSizeCall()); } /** * * * LWM2M path: /1027//10 * * @tapVersion(">=1.0") * @return call options */ getPageSizeCall() { const callOptions = Object.assign({}, this.resources.getPageSize); return callOptions; } /** * Write target page size * * LWM2M path: /1027//10 * * @tapVersion(">=1.0") * @param value input * @return */ putPageSize( /* * */ value) { return this.serviceCallRunner.execute(this.putPageSizeCall(value)); } /** * * * LWM2M path: /1027//10 * * @tapVersion(">=1.0") * @param value input * @return call options */ putPageSizeCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putPageSize); callOptions.body = value; return callOptions; } /** * Get communication stats * * LWM2M path: /1027//11 * * @tapVersion(">=1.0") * @return */ getComStats() { return this.serviceCallRunner.execute(this.getComStatsCall()); } /** * * * LWM2M path: /1027//11 * * @tapVersion(">=1.0") * @return call options */ getComStatsCall() { const callOptions = Object.assign({}, this.resources.getComStats); return callOptions; } /** * Clear communication stats * * LWM2M path: /1027//11 * * @tapVersion(">=1.0") * @return */ clearComStats() { return this.serviceCallRunner.execute(this.clearComStatsCall()); } /** * * * LWM2M path: /1027//11 * * @tapVersion(">=1.0") * @return call options */ clearComStatsCall() { const callOptions = Object.assign({}, this.resources.clearComStats); return callOptions; } /** * List available target protocols * * LWM2M path: /1027//20 * * @tapVersion(">=1.0") * @return */ getAvailableProtocols() { return this.serviceCallRunner.execute(this.getAvailableProtocolsCall()); } /** * * * LWM2M path: /1027//20 * * @tapVersion(">=1.0") * @return call options */ getAvailableProtocolsCall() { const callOptions = Object.assign({}, this.resources.getAvailableProtocols); return callOptions; } /** * Get Serial/Modbus protocol configuration options * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @return */ getSerialModbusConfiguration() { return this.serviceCallRunner.execute(this.getSerialModbusConfigurationCall()); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @return call options */ getSerialModbusConfigurationCall() { const callOptions = Object.assign({}, this.resources.getSerialModbusConfiguration); return callOptions; } /** * Temporary update configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return */ setSerialModbusConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.setSerialModbusConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return call options */ setSerialModbusConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.setSerialModbusConfiguration); callOptions.body = value; return callOptions; } /** * Write protocol options in Tap configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return */ putSerialModbusConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.putSerialModbusConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return call options */ putSerialModbusConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putSerialModbusConfiguration); callOptions.body = value; return callOptions; } /** * Get modbus default slave address * * LWM2M path: /1027//22 * * @tapVersion(">=1.0") * @return */ getModbusDefaultSlaveAddress() { return this.serviceCallRunner.execute(this.getModbusDefaultSlaveAddressCall()); } /** * * * LWM2M path: /1027//22 * * @tapVersion(">=1.0") * @return call options */ getModbusDefaultSlaveAddressCall() { const callOptions = Object.assign({}, this.resources.getModbusDefaultSlaveAddress); return callOptions; } /** * Write modbus default slave address * * LWM2M path: /1027//22 * * @tapVersion(">=1.0") * @param address input * @return */ putModbusDefaultSlaveAddress( /* * New default modbus slave address */ address) { return this.serviceCallRunner.execute(this.putModbusDefaultSlaveAddressCall(address)); } /** * * * LWM2M path: /1027//22 * * @tapVersion(">=1.0") * @param address input * @return call options */ putModbusDefaultSlaveAddressCall( /* * New default modbus slave address */ address) { const callOptions = Object.assign({}, this.resources.putModbusDefaultSlaveAddress); callOptions.body = address; return callOptions; } /** * Get S3P protocol configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @return */ getS3PConfiguration() { return this.serviceCallRunner.execute(this.getS3PConfigurationCall()); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @return call options */ getS3PConfigurationCall() { const callOptions = Object.assign({}, this.resources.getS3PConfiguration); return callOptions; } /** * Temporary update S3P configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return */ setS3PConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.setS3PConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return call options */ setS3PConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.setS3PConfiguration); callOptions.body = value; return callOptions; } /** * Update protocol configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return */ putS3PConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.putS3PConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return call options */ putS3PConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putS3PConfiguration); callOptions.body = value; return callOptions; } /** * Get Modbus TCP protocol configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @return */ getModbusTcpConfiguration() { return this.serviceCallRunner.execute(this.getModbusTcpConfigurationCall()); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @return call options */ getModbusTcpConfigurationCall() { const callOptions = Object.assign({}, this.resources.getModbusTcpConfiguration); return callOptions; } /** * Temporary update Modbus TCP configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return */ setModbusTcpConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.setModbusTcpConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return call options */ setModbusTcpConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.setModbusTcpConfiguration); callOptions.body = value; return callOptions; } /** * Update Modbus TCP configuration * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return */ putModbusTcpConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.putModbusTcpConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=1.0") * @param value input * @return call options */ putModbusTcpConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putModbusTcpConfiguration); callOptions.body = value; return callOptions; } /** * Get CAN protocol configuration * * LWM2M path: /1027//21 * * @tapVersion(">=2.6") * @return */ getCanConfiguration() { return this.serviceCallRunner.execute(this.getCanConfigurationCall()); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=2.6") * @return call options */ getCanConfigurationCall() { const callOptions = Object.assign({}, this.resources.getCanConfiguration); return callOptions; } /** * Temporary update CAN configuration * * LWM2M path: /1027//21 * * @tapVersion(">=2.6") * @param value input * @return */ setCanConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.setCanConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=2.6") * @param value input * @return call options */ setCanConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.setCanConfiguration); callOptions.body = value; return callOptions; } /** * Update CAN protocol configuration * * LWM2M path: /1027//21 * * @tapVersion(">=2.6") * @param value input * @return */ putCanConfiguration( /* * */ value) { return this.serviceCallRunner.execute(this.putCanConfigurationCall(value)); } /** * * * LWM2M path: /1027//21 * * @tapVersion(">=2.6") * @param value input * @return call options */ putCanConfigurationCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.putCanConfiguration); callOptions.body = value; return callOptions; } /** * Put and keep target in Reset state * * LWM2M path: /1027//30 * * @tapVersion(">=1.0") * @return */ postResetKeep() { return this.serviceCallRunner.execute(this.postResetKeepCall()); } /** * * * LWM2M path: /1027//30 * * @tapVersion(">=1.0") * @return call options */ postResetKeepCall() { const callOptions = Object.assign({}, this.resources.postResetKeep); return callOptions; } /** * Debug access * * LWM2M path: /1027//31 * * @tapVersion(">=1.0") * @param address input * @return */ readDebug( /* * */ address) { return this.serviceCallRunner.execute(this.readDebugCall(address)); } /** * * * LWM2M path: /1027//31 * * @tapVersion(">=1.0") * @param address input * @return call options */ readDebugCall( /* * */ address) { const callOptions = Object.assign({}, this.resources.readDebug); callOptions.body = address; return callOptions; } /** * Write address * * LWM2M path: /1027//31 * * @tapVersion(">=1.0") * @return */ writeDebug() { return this.serviceCallRunner.execute(this.writeDebugCall()); } /** * * * LWM2M path: /1027//31 * * @tapVersion(">=1.0") * @return call options */ writeDebugCall() { const callOptions = Object.assign({}, this.resources.writeDebug); return callOptions; } /** * Register access * * LWM2M path: /1027//32 * * @tapVersion(">=1.0") * @return */ getRegisterAccess() { return this.serviceCallRunner.execute(this.getRegisterAccessCall()); } /** * * * LWM2M path: /1027//32 * * @tapVersion(">=1.0") * @return call options */ getRegisterAccessCall() { const callOptions = Object.assign({}, this.resources.getRegisterAccess); return callOptions; } /** * Write register value * * LWM2M path: /1027//32 * * @tapVersion(">=1.0") * @return */ postRegisterAccess() { return this.serviceCallRunner.execute(this.postRegisterAccessCall()); } /** * * * LWM2M path: /1027//32 * * @tapVersion(">=1.0") * @return call options */ postRegisterAccessCall() { const callOptions = Object.assign({}, this.resources.postRegisterAccess); return callOptions; } /** * Transparent send and receive * * LWM2M path: /1027//34 * * @tapVersion(">=1.0") * @param data input * @return */ sendReceive( /* * */ data) { return this.serviceCallRunner.execute(this.sendReceiveCall(data)); } /** * * * LWM2M path: /1027//34 * * @tapVersion(">=1.0") * @param data input * @return call options */ sendReceiveCall( /* * */ data) { const callOptions = Object.assign({}, this.resources.sendReceive); callOptions.body = data; return callOptions; } /** * Transparent send * * LWM2M path: /1027//34 * * @tapVersion(">=1.0") * @param data input * @return */ send( /* * */ data) { return this.serviceCallRunner.execute(this.sendCall(data)); } /** * * * LWM2M path: /1027//34 * * @tapVersion(">=1.0") * @param data input * @return call options */ sendCall( /* * */ data) { const callOptions = Object.assign({}, this.resources.send); callOptions.body = data; return callOptions; } /** * Read data transparent mode with limit * * LWM2M path: /1027//35 * * @tapVersion(">=1.0") * @return */ readBytes() { return this.serviceCallRunner.execute(this.readBytesCall()); } /** * * * LWM2M path: /1027//35 * * @tapVersion(">=1.0") * @return call options */ readBytesCall() { const callOptions = Object.assign({}, this.resources.readBytes); return callOptions; } /** * Direct modbus write * * LWM2M path: /1027//37 * * @tapVersion(">=1.0") * @param data input * @return */ modbusWrite( /* * */ data) { return this.serviceCallRunner.execute(this.modbusWriteCall(data)); } /** * * * LWM2M path: /1027//37 * * @tapVersion(">=1.0") * @param data input * @return call options */ modbusWriteCall( /* * */ data) { const callOptions = Object.assign({}, this.resources.modbusWrite); callOptions.body = data; return callOptions; } /** * Direct modbus read * * LWM2M path: /1027//38 * * @tapVersion(">=1.0") * @param data input * @return */ modbusRead( /* * */ data) { return this.serviceCallRunner.execute(this.modbusReadCall(data)); } /** * * * LWM2M path: /1027//38 * * @tapVersion(">=1.0") * @param data input * @return call options */ modbusReadCall( /* * */ data) { const callOptions = Object.assign({}, this.resources.modbusRead); callOptions.body = data; return callOptions; } /** * Get current sub protocol * * LWM2M path: /1027//40 * * @tapVersion(">=1.0") * @return */ getSubProtocol() { return this.serviceCallRunner.execute(this.getSubProtocolCall()); } /** * * * LWM2M path: /1027//40 * * @tapVersion(">=1.0") * @return call options */ getSubProtocolCall() { const callOptions = Object.assign({}, this.resources.getSubProtocol); return callOptions; } /** * Get byte length received in buffer * * LWM2M path: /1027//43 * * @tapVersion(">=1.57") * @return */ getReceivedCount() { return this.serviceCallRunner.execute(this.getReceivedCountCall()); } /** * * * LWM2M path: /1027//43 * * @tapVersion(">=1.57") * @return call options */ getReceivedCountCall() { const callOptions = Object.assign({}, this.resources.getReceivedCount); return callOptions; } /** * SWD direct Read * * LWM2M path: /1027//33 * * @tapVersion(">=1.0") * @param value input * @return */ readAddress( /* * */ value) { return this.serviceCallRunner.execute(this.readAddressCall(value)); } /** * * * LWM2M path: /1027//33 * * @tapVersion(">=1.0") * @param value input * @return call options */ readAddressCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.readAddress); callOptions.body = value; return callOptions; } /** * SWD direct Write * * LWM2M path: /1027//33 * * @tapVersion(">=1.0") * @param value input * @return */ writeAddress( /* * */ value) { return this.serviceCallRunner.execute(this.writeAddressCall(value)); } /** * * * LWM2M path: /1027//33 * * @tapVersion(">=1.0") * @param value input * @return call options */ writeAddressCall( /* * */ value) { const callOptions = Object.assign({}, this.resources.writeAddress); callOptions.body = value; return callOptions; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NlcnZpY2UvaW1wbC90YXJnZXQvc3JjL2xpYi9nZW5lcmF0ZWQvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFjaEQsT0FBTyxFQUFFLGVBQWUsRUFBbUIsTUFBTSxhQUFhLENBQUM7QUFFL0QsTUFBTSxPQUFPLGFBQWMsU0FBUSxlQUFlO0lBQWxEOztRQUNTLGNBQVMsR0FBRyxhQUFhLENBQUM7SUEra0RuQyxDQUFDO0lBN2tEQzs7Ozs7OztPQU9HO0lBQ0gsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGVBQWU7UUFDYixNQUFNLFdBQVcscUJBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUUsQ0FBQztRQUV0RCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxXQUFXO0lBQ1Q7O09BRUc7SUFDSCxjQUE4QjtRQUU5QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGVBQWU7SUFDYjs7T0FFRztJQUNILGNBQThCO1FBRTlCLE1BQU0sV0FBVyxxQkFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBRSxDQUFDO1FBRXRELFdBQVcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBRWxDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFdBQVc7SUFDVDs7T0FF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