Compare commits

...

3 Commits

18 changed files with 305 additions and 243 deletions

332
dist/r3.js vendored
View File

@ -1,8 +1,14 @@
class R3 {
static version = '2.0.128';
static compileDate = '2021 Sep 06 - 07:58:41 am';
static version = '2.0.136';
static compileDate = '2021 Sep 06 - 09:13:00 am';
}
/**
Started=false
**/
class System {
constructor(options) {
@ -13,6 +19,10 @@ class System {
options = {};
}
if (typeof options.started === 'undefined') {
options.started = false;
}
Object.assign(this, options);
Event.Emit(Event.OBJECT_INITIALIZED, this);
@ -63,14 +73,12 @@ class System {
*/
static Stop() {
console.log('Stopped System');
if ('System' !== 'System') {
System.Stop();
}
System.Started = false;
console.log('Stopped System');
}
}
@ -1614,7 +1622,7 @@ class Utils {
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -1640,19 +1648,19 @@ class Utils {
Methods:
- start(options = {})
Just calls System.Start(options)
- start()
Overrides for R3.System.start()
- stop(options = {})
Just calls System.Stop(options)
- stop()
Overrides for R3.System.stop()
Static Methods:
- Start(options = {})
Starts the system by registering subscriptions to events
- Start()
Overrides for R3.System.Start()
- Stop(options = {})
Stops the system by removing these subscriptions to events
- Stop()
Overrides for R3.System.Stop()
**/
@ -1676,10 +1684,9 @@ class SystemInput extends System {
/**
* start()
* - Just calls System.Start(options)
* @param options = {}
* - Just calls System.Start()
*/
start(options = {}) {
start() {
SystemInput.Start();
this.started = true;
@ -1688,10 +1695,9 @@ class SystemInput extends System {
/**
* stop()
* - Just calls System.Stop(options)
* @param options = {}
* - Just calls System.Stop()
*/
stop(options = {}) {
stop() {
SystemInput.Stop();
this.started = false;
@ -1700,10 +1706,9 @@ class SystemInput extends System {
/**
* Start()
* - Starts the system by registering subscriptions to events
* @param options = {}
* - Starts the system by registering subscriptions to events
*/
static Start(options = {}) {
static Start() {
if ('System' !== 'SystemInput') {
System.Start();
@ -1778,119 +1783,116 @@ class SystemInput extends System {
/**
* Stop()
* - Stops the system by removing these subscriptions to events
* @param options = {}
* - Stops the system by removing these subscriptions to events
*/
static Stop(options = {}) {
static Stop() {
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
console.log('Stopped SystemInput');
if ('System' !== 'SystemInput') {
System.Stop();
}
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemInput.Started = false;
console.log('Stopped SystemInput');
}
/**
@ -2002,7 +2004,7 @@ class SystemInput extends System {
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -2123,34 +2125,32 @@ class SystemLinking extends System {
*/
static Stop(options) {
SystemLinking.Subscriptions = SystemLinking.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemLinking.Subscriptions = SystemLinking.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
console.log('Stopped SystemLinking');
if ('System' !== 'SystemLinking') {
System.Stop();
}
SystemLinking.Subscriptions = SystemLinking.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemLinking.Subscriptions = SystemLinking.Subscriptions.reduce(
(result, subscription) => {
if (subscription.remove() !== true) {
result.push(subscription);
}
return result;
},
[]
);
SystemLinking.Started = false;
console.log('Stopped SystemLinking');
}
/**
@ -2182,7 +2182,7 @@ class SystemLinking extends System {
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -2294,14 +2294,12 @@ class SystemSocket extends System {
*/
static Stop(options) {
console.log('Stopped SystemSocket');
if ('System' !== 'SystemSocket') {
System.Stop();
}
SystemSocket.Started = false;
console.log('Stopped SystemSocket');
}
}
@ -2313,7 +2311,7 @@ class SystemSocket extends System {
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -2421,14 +2419,12 @@ class SystemTest extends System {
*/
static Stop(options) {
console.log('Stopped SystemTest');
if ('System' !== 'SystemTest') {
System.Stop();
}
SystemTest.Started = false;
console.log('Stopped SystemTest');
}
}
@ -2500,7 +2496,7 @@ class R3Object extends Event {
this.emit(Event.OBJECT_CREATED, this);
if (typeof options.register === 'undefined')) {
if (typeof options.register === 'undefined') {
options.register = true;
}
@ -2681,7 +2677,7 @@ class Component extends R3Object {
this.emit(Event.OBJECT_CREATED, this);
if (typeof options.runtime === 'undefined')) {
if (typeof options.runtime === 'undefined') {
options.runtime = R3.Runtime.DEFAULT;
}

View File

@ -1,6 +1,6 @@
{
"name": "r3",
"version" : "2.0.128",
"version" : "2.0.136",
"description": "",
"private": true,
"dependencies": {

35
r3.php
View File

@ -437,6 +437,37 @@ function generateInitOptions($file, $tokens)
updateSection($file, 'GENERATED_OPTIONS_INIT' , $updates);
}
function generateInitStaticOptions($file, $tokens)
{
$token = 'CUSTOM_STATIC_OPTIONS';
$store = getTokenStore($token, $tokens);
if (sizeof($store) <= 0) {
return;
}
echo "Will be building static options for $token\n";
$template = file_get_contents('src/templates/generated_custom_static_options_init.template');
$updates = '';
foreach ($store as $item) {
$item = trim($item);
$key_value = preg_split('/=/', $item);
if ($key_value === false) {
continue;
}
$key = $key_value[0];
$value = $key_value[1];
$updated = str_replace('KEY', $key, $template);
$updated = str_replace('VALUE', $value, $updated);
$updates .= $updated;
}
updateSection($file, 'GENERATED_STATIC_OPTIONS_INIT' , $updates);
}
function getTokenStore($tokenName, $tokens)
{
if (is_array($tokens) && array_key_exists($tokenName, $tokens)) {
@ -1348,8 +1379,6 @@ $nodeList = [];
/**
* @throws ErrorException
*/
foreach ($files as $file) {
$saveFile = null;
@ -1418,6 +1447,8 @@ foreach ($files as $file) {
generateInitOptions($file, $tokens);
generateInitStaticOptions($file, $tokens);
generateCreateInstanceOptions($file, $tokens);
generateUpdateInstanceOptions($file, $tokens);

View File

@ -120,7 +120,7 @@ class Component extends R3Object {
this.emit(Event.OBJECT_CREATED, this);
//GENERATED_OPTIONS_INIT_START
if (typeof options.runtime === 'undefined')) {
if (typeof options.runtime === 'undefined') {
options.runtime = R3.Runtime.DEFAULT;
}
//GENERATED_OPTIONS_INIT_END

View File

@ -91,7 +91,7 @@ class R3Object extends Event {
this.emit(Event.OBJECT_CREATED, this);
//GENERATED_OPTIONS_INIT_START
if (typeof options.register === 'undefined')) {
if (typeof options.register === 'undefined') {
options.register = true;
}
//GENERATED_OPTIONS_INIT_END

View File

@ -1,6 +1,6 @@
class R3 {
static version = '2.0.128';
static compileDate = '2021 Sep 06 - 07:58:41 am';
static version = '2.0.136';
static compileDate = '2021 Sep 06 - 09:13:00 am';
}
//GENERATED_IMPORTS_START

View File

@ -11,7 +11,7 @@ const System = require('./r3-system.js');
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -37,25 +37,28 @@ const System = require('./r3-system.js');
Methods:
- start(options = {})
Just calls System.Start(options)
- start()
Overrides for R3.System.start()
- stop(options = {})
Just calls System.Stop(options)
- stop()
Overrides for R3.System.stop()
Static Methods:
- Start(options = {})
Starts the system by registering subscriptions to events
- Start()
Overrides for R3.System.Start()
- Stop(options = {})
Stops the system by removing these subscriptions to events
- Stop()
Overrides for R3.System.Stop()
GENERATED_INHERITED_END
CUSTOM_OPTIONS_START
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
CUSTOM_STATIC_OPTIONS_END
CUSTOM_EVENT_LISTENERS_START
Event.TOUCH_START
Event.TOUCH_END
@ -70,13 +73,13 @@ const System = require('./r3-system.js');
CUSTOM_EVENT_LISTENERS_END
CUSTOM_METHODS_START
start(options = {}) - Just calls System.Start(options)
stop(options = {}) - Just calls System.Stop(options)
start() - Just calls System.Start()
stop() - Just calls System.Stop()
CUSTOM_METHODS_END
CUSTOM_STATIC_METHODS_START
Start(options = {}) - Starts the system by registering subscriptions to events
Stop(options = {}) - Stops the system by removing these subscriptions to events
Start() - Starts the system by registering subscriptions to events
Stop() - Stops the system by removing these subscriptions to events
CUSTOM_STATIC_METHODS_END
**/
@ -116,10 +119,9 @@ class SystemInput extends System {
/**
* start()
* - Just calls System.Start(options)
* @param options = {}
* - Just calls System.Start()
*/
start(options = {}) {
start() {
//GENERATED_START_METHOD_START
SystemInput.Start();
@ -133,10 +135,9 @@ class SystemInput extends System {
/**
* stop()
* - Just calls System.Stop(options)
* @param options = {}
* - Just calls System.Stop()
*/
stop(options = {}) {
stop() {
//GENERATED_STOP_METHOD_START
SystemInput.Stop();
@ -153,10 +154,9 @@ class SystemInput extends System {
/**
* Start()
* - Starts the system by registering subscriptions to events
* @param options = {}
* - Starts the system by registering subscriptions to events
*/
static Start(options = {}) {
static Start() {
//GENERATED_STATIC_START_METHOD_START
@ -240,17 +240,12 @@ class SystemInput extends System {
/**
* Stop()
* - Stops the system by removing these subscriptions to events
* @param options = {}
* - Stops the system by removing these subscriptions to events
*/
static Stop(options = {}) {
static Stop() {
//GENERATED_STATIC_STOP_METHOD_START
if ('System' !== 'SystemInput') {
System.Stop();
}
//GENERATED_EVENT_LISTENERS_STOP_START
SystemInput.Subscriptions = SystemInput.Subscriptions.reduce(
@ -354,10 +349,12 @@ class SystemInput extends System {
);
//GENERATED_EVENT_LISTENERS_STOP_END
SystemInput.Started = false;
console.log('Stopped SystemInput');
if ('System' !== 'SystemInput') {
System.Stop();
}
//GENERATED_STATIC_STOP_METHOD_END
//CUSTOM_STATIC_STOP_METHOD_START
@ -534,6 +531,9 @@ class SystemInput extends System {
}
//GENERATED_STATIC_OPTIONS_INIT_START
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END

View File

@ -11,7 +11,7 @@ const System = require('./r3-system.js');
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -56,6 +56,9 @@ const System = require('./r3-system.js');
CUSTOM_OPTIONS_START
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
CUSTOM_STATIC_OPTIONS_END
CUSTOM_EVENT_LISTENERS_START
Event.OBJECT_CREATED
Event.INSTANCE_CREATED
@ -191,10 +194,6 @@ class SystemLinking extends System {
//GENERATED_STATIC_STOP_METHOD_START
if ('System' !== 'SystemLinking') {
System.Stop();
}
//GENERATED_EVENT_LISTENERS_STOP_START
SystemLinking.Subscriptions = SystemLinking.Subscriptions.reduce(
@ -218,10 +217,12 @@ class SystemLinking extends System {
);
//GENERATED_EVENT_LISTENERS_STOP_END
SystemLinking.Started = false;
console.log('Stopped SystemLinking');
if ('System' !== 'SystemLinking') {
System.Stop();
}
//GENERATED_STATIC_STOP_METHOD_END
//CUSTOM_STATIC_STOP_METHOD_START
@ -270,6 +271,9 @@ class SystemLinking extends System {
}
//GENERATED_STATIC_OPTIONS_INIT_START
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END

View File

@ -11,7 +11,7 @@ const System = require('./r3-system.js');
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -56,6 +56,9 @@ const System = require('./r3-system.js');
CUSTOM_OPTIONS_START
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
CUSTOM_STATIC_OPTIONS_END
CUSTOM_EVENT_LISTENERS_START
CUSTOM_EVENT_LISTENERS_END
@ -179,17 +182,15 @@ class SystemSocket extends System {
//GENERATED_STATIC_STOP_METHOD_START
if ('System' !== 'SystemSocket') {
System.Stop();
}
//GENERATED_EVENT_LISTENERS_STOP_START
//GENERATED_EVENT_LISTENERS_STOP_END
SystemSocket.Started = false;
console.log('Stopped SystemSocket');
if ('System' !== 'SystemSocket') {
System.Stop();
}
//GENERATED_STATIC_STOP_METHOD_END
//CUSTOM_STATIC_STOP_METHOD_START
@ -206,6 +207,9 @@ class SystemSocket extends System {
}
//GENERATED_STATIC_OPTIONS_INIT_START
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END

View File

@ -11,7 +11,7 @@ const System = require('./r3-system.js');
Properties:
<no inherited properties>
- started (Default value false)
Methods:
@ -56,6 +56,9 @@ const System = require('./r3-system.js');
CUSTOM_OPTIONS_START
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
CUSTOM_STATIC_OPTIONS_END
CUSTOM_EVENT_LISTENERS_START
CUSTOM_EVENT_LISTENERS_END
@ -177,17 +180,15 @@ class SystemTest extends System {
//GENERATED_STATIC_STOP_METHOD_START
if ('System' !== 'SystemTest') {
System.Stop();
}
//GENERATED_EVENT_LISTENERS_STOP_START
//GENERATED_EVENT_LISTENERS_STOP_END
SystemTest.Started = false;
console.log('Stopped SystemTest');
if ('System' !== 'SystemTest') {
System.Stop();
}
//GENERATED_STATIC_STOP_METHOD_END
//CUSTOM_STATIC_STOP_METHOD_START
@ -204,6 +205,9 @@ class SystemTest extends System {
}
//GENERATED_STATIC_OPTIONS_INIT_START
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END

View File

@ -4,8 +4,13 @@ const Utils = require('.././r3-utils');
/**
CUSTOM_OPTIONS_START
started=false
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
Started=false
CUSTOM_STATIC_OPTIONS_END
CUSTOM_METHODS_START
start() - Just calls System.Start()
stop() - Just calls System.Stop()
@ -30,6 +35,9 @@ class System {
}
//GENERATED_OPTIONS_INIT_START
if (typeof options.started === 'undefined') {
options.started = false;
}
//GENERATED_OPTIONS_INIT_END
//CUSTOM_OPTIONS_INIT_START
@ -118,17 +126,15 @@ class System {
//GENERATED_STATIC_STOP_METHOD_START
if ('System' !== 'System') {
System.Stop();
}
//GENERATED_EVENT_LISTENERS_STOP_START
//GENERATED_EVENT_LISTENERS_STOP_END
System.Started = false;
console.log('Stopped System');
if ('System' !== 'System') {
System.Stop();
}
//GENERATED_STATIC_STOP_METHOD_END
//CUSTOM_STATIC_STOP_METHOD_START
@ -142,8 +148,11 @@ class System {
}
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//GENERATED_STATIC_OPTIONS_INIT_START
System.Started = false;
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
module.exports = System;

View File

@ -1,3 +1,3 @@
if (typeof options.KEY === 'undefined')) {
if (typeof options.KEY === 'undefined') {
options.KEY = VALUE;
}

View File

@ -0,0 +1 @@
CLASS_NAME.KEY = VALUE;

View File

@ -1,11 +1,9 @@
if ('PARENT_SYSTEM' !== 'CLASS_NAME') {
PARENT_SYSTEM.Stop();
}
//GENERATED_EVENT_LISTENERS_STOP_START
//GENERATED_EVENT_LISTENERS_STOP_END
CLASS_NAME.Started = false;
console.log('Stopped CLASS_NAME');
if ('PARENT_SYSTEM' !== 'CLASS_NAME') {
PARENT_SYSTEM.Stop();
}

View File

@ -4,8 +4,13 @@ const Utils = require('INCLUDE_PATH/r3-utils');
/**
CUSTOM_OPTIONS_START
started=false
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
Started=false
CUSTOM_STATIC_OPTIONS_END
CUSTOM_METHODS_START
start() - Just calls System.Start()
stop() - Just calls System.Stop()
@ -34,8 +39,10 @@ class CLASS_NAME {
}
//GENERATED_STATIC_OPTIONS_INIT_START
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
CLASS_NAME.Started = false;
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
module.exports = CLASS_NAME;

View File

@ -11,6 +11,9 @@ const EXTEND_CLASS = require('./EXTEND_CLASS_FILE_NAME');
CUSTOM_OPTIONS_START
CUSTOM_OPTIONS_END
CUSTOM_STATIC_OPTIONS_START
CUSTOM_STATIC_OPTIONS_END
CUSTOM_EVENT_LISTENERS_START
CUSTOM_EVENT_LISTENERS_END
@ -45,6 +48,9 @@ class CLASS_NAME extends EXTEND_CLASS {
}
//GENERATED_STATIC_OPTIONS_INIT_START
//GENERATED_STATIC_OPTIONS_INIT_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END

View File

@ -37,6 +37,7 @@ GENERATED_STATIC_ON_TOUCH_CANCEL_METHOD
GENERATED_STATIC_ON_TOUCH_END_METHOD
GENERATED_STATIC_ON_TOUCH_MOVE_METHOD
GENERATED_STATIC_ON_TOUCH_START_METHOD
GENERATED_STATIC_OPTIONS_INIT
GENERATED_STATIC_START_METHOD
GENERATED_STATIC_STOP_METHOD
GENERATED_STATIC_SUBSCRIBE_METHOD
@ -80,6 +81,7 @@ CUSTOM_STATIC_ON_TOUCH_CANCEL_METHOD
CUSTOM_STATIC_ON_TOUCH_END_METHOD
CUSTOM_STATIC_ON_TOUCH_MOVE_METHOD
CUSTOM_STATIC_ON_TOUCH_START_METHOD
CUSTOM_STATIC_OPTIONS
CUSTOM_STATIC_START_METHOD
CUSTOM_STATIC_STOP_METHOD
CUSTOM_STATIC_SUBSCRIBE_METHOD

View File

@ -1 +1 @@
2.0.128
2.0.136