diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..a5350d0
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:jni+resolve=off",
+ "java.configuration.updateBuildConfiguration": "interactive"
+}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..fbb6dd0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+Siddhi Store ${typeOfIOinCamelCase}
+======================================
+
+The **siddhi-io-live extension** is an extension to Siddhi that receives and publishes events via
+
+For information on Siddhi and it's features refer Siddhi Documentation .
+
+## Download
+
+Versions with group id `io.siddhi.extension.io.*` from here .
+
+## Latest API Docs
+
+## Features
+
+## Dependencies
+
+## Installation
+
+For installing this extension on various Siddhi execution environments refer Siddhi documentation section on adding extensions .
+
+## Support and Contribution
+
+* We encourage users to ask questions and get support via StackOverflow , make sure to add the `siddhi` tag to the issue for better response.
+
+* If you find any issues related to the extension please report them on the issue tracker .
+
+* For production support and other contribution related information refer Siddhi Community documentation.
\ No newline at end of file
diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml
new file mode 100644
index 0000000..dc0042a
--- /dev/null
+++ b/checkstyle-suppressions.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/component/pom.xml b/component/pom.xml
new file mode 100644
index 0000000..a6aa9ce
--- /dev/null
+++ b/component/pom.xml
@@ -0,0 +1,156 @@
+
+
+
+ io.siddhi.extension.io.live
+ siddhi-io-live-parent
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+ siddhi-io-live
+ bundle
+ Siddhi IO Live extension
+
+
+
+ com.arangodb
+ arangodb-java-driver
+ 6.18.0
+
+
+
+ io.siddhi
+ siddhi-core
+
+
+ io.siddhi
+ siddhi-annotations
+
+
+ io.siddhi
+ siddhi-query-compiler
+
+
+ io.siddhi
+ siddhi-query-api
+
+
+ log4j
+ log4j
+
+
+ org.testng
+ testng
+
+
+ io.siddhi.extension.map.xml
+ siddhi-map-xml
+ test
+
+
+ io.siddhi.extension.map.json
+ siddhi-map-json
+ test
+
+
+
+
+
+ default
+
+ true
+
+
+
+ documentation-deploy
+
+
+
+ io.siddhi
+ siddhi-doc-gen
+ ${siddhi.version}
+
+
+ compile
+
+ deploy-mkdocs-github-pages
+
+
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ src/test/resources/testng.xml
+
+ ${surefireArgLine} -ea -Xmx512m
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ ${jacoco.plugin.version}
+
+
+ jacoco-initialize
+
+ prepare-agent
+
+
+ ${basedir}/target/coverage-reports/jacoco.exec
+ surefireArgLine
+
+
+
+ jacoco-site
+ post-integration-test
+
+ report
+
+
+ ${basedir}/target/coverage-reports/jacoco.exec
+ ${basedir}/target/coverage-reports/
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+
+ io.siddhi.extension.io.live.*,
+ io.siddhi.extension.io.live.*
+
+
+ *;resolution:=optional
+
+ *
+
+ META-INF=target/classes/META-INF,
+ {maven-resources}
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+
+
diff --git a/component/src/main/java/io/siddhi/extension/io/live/sink/LiveSink.java b/component/src/main/java/io/siddhi/extension/io/live/sink/LiveSink.java
new file mode 100644
index 0000000..14efc59
--- /dev/null
+++ b/component/src/main/java/io/siddhi/extension/io/live/sink/LiveSink.java
@@ -0,0 +1,162 @@
+package io.siddhi.extension.io.live.sink;
+
+import io.siddhi.annotation.Example;
+import io.siddhi.annotation.Extension;
+import io.siddhi.core.config.SiddhiAppContext;
+import io.siddhi.core.exception.ConnectionUnavailableException;
+import io.siddhi.core.stream.ServiceDeploymentInfo;
+import io.siddhi.core.stream.output.sink.Sink;
+import io.siddhi.core.util.config.ConfigReader;
+import io.siddhi.core.util.snapshot.state.State;
+import io.siddhi.core.util.snapshot.state.StateFactory;
+import io.siddhi.core.util.transport.DynamicOptions;
+import io.siddhi.core.util.transport.OptionHolder;
+import io.siddhi.query.api.definition.StreamDefinition;
+
+/**
+ * This is a sample class-level comment, explaining what the extension class does.
+ */
+
+/**
+ * Annotation of Siddhi Extension.
+ *
+ * eg:-
+ * {@literal @}Extension(
+ * name = "The name of the extension",
+ * namespace = "The namespace of the extension",
+ * description = "The description of the extension (optional).",
+ * //Sink configurations
+ * parameters = {
+ * {@literal @}Parameter(name = "The name of the first parameter", type = "Supprted parameter types.
+ * eg:{DataType.STRING,DataType.INT, DataType.LONG etc},dynamic=false ,optinal=true/false ,
+ * if optional =true then assign default value according the type")
+ * System parameter is used to define common extension wide
+ * },
+ * examples = {
+ * {@literal @}Example({"Example of the first CustomExtension contain syntax and description.Here,
+ * Syntax describe default mapping for SourceMapper and description describes
+ * the output of according this syntax},
+ * }
+ *
+ */
+
+@Extension(
+ name = "live",
+ namespace = "sink",
+ description = " ",
+ parameters = {
+ /*@Parameter(name = " ",
+ description = " " ,
+ dynamic = false/true,
+ optional = true/false, defaultValue = " ",
+ type = {DataType.INT, DataType.BOOL, DataType.STRING, DataType.DOUBLE,etc }),
+ type = {DataType.INT, DataType.BOOL, DataType.STRING, DataType.DOUBLE, }),*/
+ },
+ examples = {
+ @Example(
+ syntax = " ",
+ description = " "
+ )
+ }
+)
+// For more information refer https://siddhi.io/en/v5.0/docs/query-guide/#sink
+public class LiveSink extends Sink {
+
+ /**
+ * The initialization method for {@link Sink}, will be called before other methods. It used to validate
+ * all configurations and to get initial values.
+ *
+ * @param streamDefinition containing stream definition bind to the {@link Sink}
+ * @param optionHolder Option holder containing static and dynamic configuration related
+ * to the {@link Sink}
+ * @param configReader to read the sink related system configuration.
+ * @param siddhiAppContext the context of the {@link io.siddhi.query.api.SiddhiApp} used to
+ * get siddhi related utility functions.
+ * @return StateFactory for the Function which contains logic for the updated state based on arrived events.
+ */
+ @Override
+ protected StateFactory init(StreamDefinition streamDefinition, OptionHolder optionHolder, ConfigReader configReader,
+ SiddhiAppContext siddhiAppContext) {
+ return null;
+ }
+
+ /**
+ * Returns the list of classes which this sink can consume.
+ * Based on the type of the sink, it may be limited to being able to publish specific type of classes.
+ * For example, a sink of type file can only write objects of type String .
+ *
+ * @return array of supported classes , if extension can support of any types of classes
+ * then return empty array .
+ */
+ @Override
+ public Class[] getSupportedInputEventClasses() {
+ return new Class[0];
+ }
+
+ /**
+ * Returns a list of supported dynamic options (that means for each event value of the option can change) by
+ * the transport.
+ *
+ * @return the list of supported dynamic option keys
+ */
+ @Override
+ public String[] getSupportedDynamicOptions() {
+ return new String[0];
+ }
+
+ /**
+ * Give information to the deployment about the service exposed by the sink.
+ *
+ * @return ServiceDeploymentInfo Service related information to the deployment
+ */
+ @Override
+ protected ServiceDeploymentInfo exposeServiceDeploymentInfo() {
+ return null;
+ }
+
+ /**
+ * This method will be called before the processing method.
+ * Intention to establish connection to publish event.
+ *
+ * @throws ConnectionUnavailableException if end point is unavailable the ConnectionUnavailableException thrown
+ * such that the system will take care retrying for connection
+ */
+ @Override
+ public void connect() throws ConnectionUnavailableException {
+
+ }
+
+ /**
+ * This method will be called when events need to be published via this sink.
+ *
+ * @param payload payload of the event based on the supported event class exported by the extensions
+ * @param dynamicOptions holds the dynamic options of this sink and Use this object to obtain dynamic options.
+ * @param state current state of the sink
+ * @throws ConnectionUnavailableException if end point is unavailable the ConnectionUnavailableException thrown
+ * such that the system will take care retrying for connection
+ */
+ @Override
+ public void publish(Object payload, DynamicOptions dynamicOptions, State state)
+ throws ConnectionUnavailableException {
+
+ }
+
+ /**
+ * Called after all publishing is done, or when {@link ConnectionUnavailableException} is thrown
+ * Implementation of this method should contain the steps needed to disconnect from the sink.
+ */
+ @Override
+ public void disconnect() {
+
+ }
+
+ /**
+ * The method can be called when removing an event receiver.
+ * The cleanups that have to be done after removing the receiver could be done here.
+ */
+ @Override
+ public void destroy() {
+
+ }
+
+}
diff --git a/component/src/main/java/io/siddhi/extension/io/live/source/LiveSource.java b/component/src/main/java/io/siddhi/extension/io/live/source/LiveSource.java
new file mode 100644
index 0000000..0d28ac6
--- /dev/null
+++ b/component/src/main/java/io/siddhi/extension/io/live/source/LiveSource.java
@@ -0,0 +1,233 @@
+package io.siddhi.extension.io.live.source;
+
+import io.siddhi.annotation.Example;
+import io.siddhi.annotation.Extension;
+import io.siddhi.annotation.Parameter;
+import io.siddhi.annotation.util.DataType;
+import io.siddhi.core.config.SiddhiAppContext;
+import io.siddhi.core.exception.ConnectionUnavailableException;
+import io.siddhi.core.stream.ServiceDeploymentInfo;
+import io.siddhi.core.stream.input.source.Source;
+import io.siddhi.core.stream.input.source.SourceEventListener;
+import io.siddhi.core.util.config.ConfigReader;
+import io.siddhi.core.util.snapshot.state.State;
+import io.siddhi.core.util.snapshot.state.StateFactory;
+import io.siddhi.core.util.transport.OptionHolder;
+import io.siddhi.extension.io.live.utils.LiveSourceConstants;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.arangodb.ArangoDBException;
+import com.arangodb.DbName;
+import com.arangodb.internal.http.HttpConnection;
+import com.arangodb.internal.net.HostDescription;
+import com.arangodb.mapping.ArangoJack;
+import com.arangodb.velocystream.Request;
+import com.arangodb.velocystream.RequestType;
+import com.arangodb.velocystream.Response;
+
+/**
+ * This is a sample class-level comment, explaining what the extension class does.
+ */
+
+/**
+ * Annotation of Siddhi Extension.
+ *
+ * eg:-
+ * {@literal @}Extension(
+ * name = "The name of the extension",
+ * namespace = "The namespace of the extension",
+ * description = "The description of the extension (optional).",
+ * //Source configurations
+ * parameters = {
+ * {@literal @}Parameter(name = "The name of the first parameter",
+ * description= "The description of the first parameter",
+ * type = "Supported parameter types.
+ * eg:{DataType.STRING, DataType.INT, DataType.LONG etc}",
+ * dynamic= "false
+ * (if parameter doesn't depend on each event then dynamic parameter is false.
+ * In Source, only use static parameter)",
+ * optional= "true/false, defaultValue= if it is optional then assign a default value
+ * according to the type."),
+ * {@literal @}Parameter(name = "The name of the second parameter",
+ * description= "The description of the second parameter",
+ * type = "Supported parameter types.
+ * eg:{DataType.STRING, DataType.INT, DataType.LONG etc}",
+ * dynamic= "false
+ * (if parameter doesn't depend on each event then dynamic parameter is false.
+ * In Source, only use static parameter)",
+ * optional= "true/false, defaultValue= if it is optional then assign a default value
+ * according to the type."),
+ * },
+ * //If Source system configurations will need then
+ * systemParameters = {
+ * {@literal @}SystemParameter(name = "The name of the first system parameter",
+ * description="The description of the first system parameter." ,
+ * defaultValue = "the default value of the system parameter.",
+ * possibleParameter="the possible value of the system parameter.",
+ * ),
+ * },
+ * examples = {
+ * {@literal @}Example(syntax = "sample query with Source annotation that explain how extension use in Siddhi."
+ * description =" The description of the given example's query."
+ * ),
+ * }
+ * )
+ *
+ */
+
+@Extension(
+ name = "live",
+ namespace = "source",
+ description = " ",
+ parameters = {
+ /*@Parameter(name = " ",
+ description = " " ,
+ dynamic = false/true,
+ optional = true/false, defaultValue = " ",
+ type = {DataType.INT, DataType.BOOL, DataType.STRING, DataType.DOUBLE, }),
+ type = {DataType.INT, DataType.BOOL, DataType.STRING, DataType.DOUBLE, }),*/
+ @Parameter(
+ name = "sql",
+ description = "The SQL select query",
+ type = DataType.STRING,
+ dynamic = true
+ )
+ },
+ examples = {
+ @Example(
+ syntax = "@source(type = 'live', sql='Select * from table', " +
+ "\n@map(type='keyvalue'), @attributes(id = 'id', name = 'name'))" +
+ "\ndefine stream inputStream (id int, name string)",
+ description = "In this example, the Live source executes the select query. The" +
+ "events consumed by the source are sent to the inputStream"
+ )
+ }
+)
+// for more information refer https://siddhi.io/en/v5.0/docs/query-guide/#source
+public class LiveSource extends Source {
+ private String siddhiAppName;
+ /**
+ * The initialization method for {@link Source}, will be called before other methods. It used to validate
+ * all configurations and to get initial values.
+ *
+ * @param sourceEventListener The listener to pass the events for processing which are consumed
+ * by the source
+ * @param optionHolder Contains static options of the source
+ * @param requestedTransportPropertyNames Requested transport properties that should be passed to
+ * SourceEventListener
+ * @param configReader System configuration reader for source
+ * @param siddhiAppContext Siddhi application context
+ * @return StateFactory for the Function which contains logic for the updated state based on arrived events.
+ */
+ @Override
+ public StateFactory init(SourceEventListener sourceEventListener, OptionHolder optionHolder,
+ String[] requestedTransportPropertyNames, ConfigReader configReader,
+ SiddhiAppContext siddhiAppContext) {
+ String streamName = sourceEventListener.getStreamDefinition().getId();
+ String selectQuery;
+ Map deploymentConfigMap = new HashMap();
+ deploymentConfigMap.putAll(configReader.getAllConfigs());
+ siddhiAppName = siddhiAppContext.getName();
+ selectQuery = deploymentConfigMap.get(LiveSourceConstants.SQLQUERY);
+ return null;
+ }
+
+ /**
+ * Returns the list of classes which this source can output.
+ *
+ * @return Array of classes that will be output by the source.
+ * Null or empty array if it can produce any type of class.
+ */
+ @Override
+ public Class[] getOutputEventClasses() {
+ return new Class[0];
+ }
+
+ /**
+ * Give information to the deployment about the service exposed by the sink.
+ *
+ * @return ServiceDeploymentInfo Service related information to the deployment
+ */
+ @Override
+ protected ServiceDeploymentInfo exposeServiceDeploymentInfo() {
+ return null;
+ }
+
+ /**
+ * Initially Called to connect to the end point for start retrieving the messages asynchronously.
+ *
+ * @param connectionCallback Callback to pass the ConnectionUnavailableException in case of connection failure after
+ * initial successful connection. (can be used when events are receiving asynchronously)
+ * @param state current state of the source
+ * @throws ConnectionUnavailableException if it cannot connect to the source backend immediately.
+ */
+ @Override
+ public void connect(ConnectionCallback connectionCallback, State state) throws ConnectionUnavailableException {
+ HttpConnection arangoHttpConnection = new HttpConnection.Builder()
+ .useSsl(true)
+ .host(new HostDescription("api-varden-4f0f3c4f.paas.macrometa.io", 443))
+ .serializationUtil(new ArangoJack())
+ .build();
+ arangoHttpConnection.setJwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjEuNjYxOTI2NjY5MjU4OTYxNWUrNiwiZXhwIjoxNjYxOTY5ODY5LCJpc3MiOiJtYWNyb21ldGEiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJyb290Iiwic3ViIjoibWFkdTE0MF9nbWFpbC5jb20iLCJ0ZW5hbnQiOiJtYWR1MTQwX2dtYWlsLmNvbSJ9.dVQccQomvpT2VktQJtvvuLKrdeART38Ek4Y6V5tzrB4=");
+ System.out.println(arangoHttpConnection.toString());
+ Request req = new Request(DbName.SYSTEM, RequestType.GET,"/_db/_system/_api/database");
+
+ while(true) {
+ Response res;
+ try {
+ res = arangoHttpConnection.execute(req);
+ System.out.println(res.getBody().toString());
+
+ } catch (ArangoDBException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (IOException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ try {
+// res.wait();
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * Called to pause event consumption.
+ */
+ @Override
+ public void pause() {
+
+ }
+
+ /**
+ * Called to resume event consumption.
+ */
+ @Override
+ public void resume() {
+
+ }
+
+ /**
+ * This method can be called when it is needed to disconnect from the end point.
+ */
+ @Override
+ public void disconnect() {
+
+ }
+
+ /**
+ * Called at the end to clean all the resources consumed by the {@link Source}.
+ */
+ @Override
+ public void destroy() {
+
+ }
+
+}
diff --git a/component/src/main/java/io/siddhi/extension/io/live/utils/LiveSourceConstants.java b/component/src/main/java/io/siddhi/extension/io/live/utils/LiveSourceConstants.java
new file mode 100644
index 0000000..ab2a479
--- /dev/null
+++ b/component/src/main/java/io/siddhi/extension/io/live/utils/LiveSourceConstants.java
@@ -0,0 +1,5 @@
+package io.siddhi.extension.io.live.utils;
+
+public class LiveSourceConstants {
+ public static final String SQLQUERY = "sql";
+}
diff --git a/component/src/main/resources/log4j.properties b/component/src/main/resources/log4j.properties
new file mode 100644
index 0000000..6ec02cb
--- /dev/null
+++ b/component/src/main/resources/log4j.properties
@@ -0,0 +1,16 @@
+# For the general syntax of property based configuration files see the
+# documenation of org.apache.log4j.PropertyConfigurator.
+
+# The root category uses the appender called A1. Since no priority is
+# specified, the root category assumes the default priority for root
+# which is DEBUG in log4j. The root category is the only category that
+# has a default priority. All other categories need not be assigned a
+# priority in which case they inherit their priority from the
+# hierarchy.
+
+#log4j.rootLogger=DEBUG, stdout
+log4j.rootLogger=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%m%n
diff --git a/component/src/test/java/io/siddhi/extension/io/live/sink/TestCaseOfLiveSink.java b/component/src/test/java/io/siddhi/extension/io/live/sink/TestCaseOfLiveSink.java
new file mode 100644
index 0000000..9053db7
--- /dev/null
+++ b/component/src/test/java/io/siddhi/extension/io/live/sink/TestCaseOfLiveSink.java
@@ -0,0 +1,9 @@
+package io.siddhi.extension.io.live.sink;
+
+/**
+ * Testcase of LiveSink.
+ */
+public class TestCaseOfLiveSink {
+ // If you will know about this related testcase,
+ //refer https://github.com/siddhi-io/siddhi-io-file/blob/master/component/src/test
+}
diff --git a/component/src/test/java/io/siddhi/extension/io/live/source/TestCaseOfLiveSource.java b/component/src/test/java/io/siddhi/extension/io/live/source/TestCaseOfLiveSource.java
new file mode 100644
index 0000000..162fcb6
--- /dev/null
+++ b/component/src/test/java/io/siddhi/extension/io/live/source/TestCaseOfLiveSource.java
@@ -0,0 +1,9 @@
+package io.siddhi.extension.io.live.source;
+
+/**
+ * Testcase of LiveSource.
+ */
+public class TestCaseOfLiveSource {
+ // If you will know about this related testcase,
+ //refer https://github.com/siddhi-io/siddhi-io-file/blob/master/component/src/test
+}
diff --git a/component/src/test/resources/log4j.properties b/component/src/test/resources/log4j.properties
new file mode 100644
index 0000000..b52a2f1
--- /dev/null
+++ b/component/src/test/resources/log4j.properties
@@ -0,0 +1,13 @@
+# For the general syntax of property based configuration files see the
+# documenation of org.apache.log4j.PropertyConfigurator.
+# The root category uses the appender called A1. Since no priority is
+# specified, the root category assumes the default priority for root
+# which is DEBUG in log4j. The root category is the only category that
+# has a default priority. All other categories need not be assigned a
+# priority in which case they inherit their priority from the
+# hierarchy.
+#log4j.rootLogger=DEBUG, stdout
+log4j.rootLogger=INFO, stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%m%n
diff --git a/component/src/test/resources/testng.xml b/component/src/test/resources/testng.xml
new file mode 100644
index 0000000..a04f603
--- /dev/null
+++ b/component/src/test/resources/testng.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/component/target/classes/io/siddhi/extension/io/live/sink/LiveSink.class b/component/target/classes/io/siddhi/extension/io/live/sink/LiveSink.class
new file mode 100644
index 0000000..7c86f81
Binary files /dev/null and b/component/target/classes/io/siddhi/extension/io/live/sink/LiveSink.class differ
diff --git a/component/target/classes/io/siddhi/extension/io/live/source/LiveSource.class b/component/target/classes/io/siddhi/extension/io/live/source/LiveSource.class
new file mode 100644
index 0000000..5b1c8b0
Binary files /dev/null and b/component/target/classes/io/siddhi/extension/io/live/source/LiveSource.class differ
diff --git a/component/target/classes/io/siddhi/extension/io/live/utils/LiveSourceConstants.class b/component/target/classes/io/siddhi/extension/io/live/utils/LiveSourceConstants.class
new file mode 100644
index 0000000..a5ce89a
Binary files /dev/null and b/component/target/classes/io/siddhi/extension/io/live/utils/LiveSourceConstants.class differ
diff --git a/component/target/classes/log4j.properties b/component/target/classes/log4j.properties
new file mode 100644
index 0000000..6ec02cb
--- /dev/null
+++ b/component/target/classes/log4j.properties
@@ -0,0 +1,16 @@
+# For the general syntax of property based configuration files see the
+# documenation of org.apache.log4j.PropertyConfigurator.
+
+# The root category uses the appender called A1. Since no priority is
+# specified, the root category assumes the default priority for root
+# which is DEBUG in log4j. The root category is the only category that
+# has a default priority. All other categories need not be assigned a
+# priority in which case they inherit their priority from the
+# hierarchy.
+
+#log4j.rootLogger=DEBUG, stdout
+log4j.rootLogger=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%m%n
diff --git a/component/target/test-classes/io/siddhi/extension/io/live/sink/TestCaseOfLiveSink.class b/component/target/test-classes/io/siddhi/extension/io/live/sink/TestCaseOfLiveSink.class
new file mode 100644
index 0000000..930ecaa
Binary files /dev/null and b/component/target/test-classes/io/siddhi/extension/io/live/sink/TestCaseOfLiveSink.class differ
diff --git a/component/target/test-classes/io/siddhi/extension/io/live/source/TestCaseOfLiveSource.class b/component/target/test-classes/io/siddhi/extension/io/live/source/TestCaseOfLiveSource.class
new file mode 100644
index 0000000..83535dc
Binary files /dev/null and b/component/target/test-classes/io/siddhi/extension/io/live/source/TestCaseOfLiveSource.class differ
diff --git a/component/target/test-classes/log4j.properties b/component/target/test-classes/log4j.properties
new file mode 100644
index 0000000..b52a2f1
--- /dev/null
+++ b/component/target/test-classes/log4j.properties
@@ -0,0 +1,13 @@
+# For the general syntax of property based configuration files see the
+# documenation of org.apache.log4j.PropertyConfigurator.
+# The root category uses the appender called A1. Since no priority is
+# specified, the root category assumes the default priority for root
+# which is DEBUG in log4j. The root category is the only category that
+# has a default priority. All other categories need not be assigned a
+# priority in which case they inherit their priority from the
+# hierarchy.
+#log4j.rootLogger=DEBUG, stdout
+log4j.rootLogger=INFO, stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%m%n
diff --git a/component/target/test-classes/testng.xml b/component/target/test-classes/testng.xml
new file mode 100644
index 0000000..a04f603
--- /dev/null
+++ b/component/target/test-classes/testng.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/latest.md b/docs/api/latest.md
new file mode 100644
index 0000000..e69de29
diff --git a/docs/assets/javascripts/extra.js b/docs/assets/javascripts/extra.js
new file mode 100644
index 0000000..38b83bd
--- /dev/null
+++ b/docs/assets/javascripts/extra.js
@@ -0,0 +1,101 @@
+/*
+~ Copyright (c) WSO2 Inc. (http://wso2.com) All Rights Reserved.
+~
+~ Licensed under the Apache License, Version 2.0 (the "License");
+~ you may not use this file except in compliance with the License.
+~ You may obtain a copy of the License at
+~
+~ http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+*/
+
+var logo = document.querySelector('.md-logo');
+var logoTitle = logo.title;
+logo.setAttribute('href', 'https://siddhi.io/')
+
+var header = document.querySelector('.md-header-nav__title');
+var headerContent = document.querySelectorAll('.md-header-nav__title span')[1].textContent;
+var url = document.querySelector('.md-nav__item a.md-nav__link').href
+header.innerHTML = '' + logoTitle + ' ' +
+ '' + headerContent + ' '
+
+
+/*
+ * TOC position highlight on scroll
+ */
+
+var observeeList = document.querySelectorAll(".md-sidebar__inner > .md-nav--secondary .md-nav__link");
+var listElems = document.querySelectorAll(".md-sidebar__inner > .md-nav--secondary > ul li");
+var config = {attributes: true, childList: true, subtree: true};
+
+var callback = function (mutationsList, observer) {
+ for (var mutation of mutationsList) {
+ if (mutation.type == 'attributes') {
+ mutation.target.parentNode.setAttribute(mutation.attributeName,
+ mutation.target.getAttribute(mutation.attributeName));
+ scrollerPosition(mutation);
+ }
+ }
+};
+var observer = new MutationObserver(callback);
+
+listElems[0].classList.add('active');
+
+for (var i = 0; i < observeeList.length; i++) {
+ var el = observeeList[i];
+
+ observer.observe(el, config);
+
+ el.onclick = function (e) {
+ listElems.forEach(function (elm) {
+ if (elm.classList) {
+ elm.classList.remove('active');
+ }
+ });
+
+ e.target.parentNode.classList.add('active');
+ }
+}
+
+function scrollerPosition(mutation) {
+ var blurList = document.querySelectorAll(".md-sidebar__inner > .md-nav--secondary > ul li > .md-nav__link[data-md-state='blur']");
+
+ listElems.forEach(function (el) {
+ if (el.classList) {
+ el.classList.remove('active');
+ }
+ });
+
+ if (blurList.length > 0) {
+ if (mutation.target.getAttribute('data-md-state') === 'blur') {
+ if (mutation.target.parentNode.querySelector('ul li')) {
+ mutation.target.parentNode.querySelector('ul li').classList.add('active');
+ } else {
+ setActive(mutation.target.parentNode);
+ }
+ } else {
+ mutation.target.parentNode.classList.add('active');
+ }
+ } else {
+ if (listElems.length > 0) {
+ listElems[0].classList.add('active');
+ }
+ }
+}
+
+function setActive(parentNode, i) {
+ i = i || 0;
+ if (i === 5) {
+ return;
+ }
+ if (parentNode.nextElementSibling) {
+ parentNode.nextElementSibling.classList.add('active');
+ return;
+ }
+ setActive(parentNode.parentNode.parentNode.parentNode, ++i);
+}
diff --git a/docs/assets/lib/backtotop/img/cd-top-arrow.svg b/docs/assets/lib/backtotop/img/cd-top-arrow.svg
new file mode 100644
index 0000000..e80e102
--- /dev/null
+++ b/docs/assets/lib/backtotop/img/cd-top-arrow.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/docs/assets/lib/backtotop/js/main.js b/docs/assets/lib/backtotop/js/main.js
new file mode 100644
index 0000000..5fd253f
--- /dev/null
+++ b/docs/assets/lib/backtotop/js/main.js
@@ -0,0 +1,31 @@
+(function(){
+ // Back to Top - by CodyHouse.co
+ var backTop = document.getElementsByClassName('js-cd-top')[0],
+ offset = 300, // browser window scroll (in pixels) after which the "back to top" link is shown
+ offsetOpacity = 1200, //browser window scroll (in pixels) after which the "back to top" link opacity is reduced
+ scrollDuration = 700,
+ scrolling = false;
+
+ if( backTop ) {
+ //update back to top visibility on scrolling
+ window.addEventListener("scroll", function(event) {
+ if( !scrolling ) {
+ scrolling = true;
+ (!window.requestAnimationFrame) ? setTimeout(checkBackToTop, 250) : window.requestAnimationFrame(checkBackToTop);
+ }
+ });
+
+ //smooth scroll to top
+ backTop.addEventListener('click', function(event) {
+ event.preventDefault();
+ (!window.requestAnimationFrame) ? window.scrollTo(0, 0) : Util.scrollTo(0, scrollDuration);
+ });
+ }
+
+ function checkBackToTop() {
+ var windowTop = window.scrollY || document.documentElement.scrollTop;
+ ( windowTop > offset ) ? Util.addClass(backTop, 'cd-top--is-visible') : Util.removeClass(backTop, 'cd-top--is-visible cd-top--fade-out');
+ ( windowTop > offsetOpacity ) && Util.addClass(backTop, 'cd-top--fade-out');
+ scrolling = false;
+ }
+})();
\ No newline at end of file
diff --git a/docs/assets/lib/backtotop/js/util.js b/docs/assets/lib/backtotop/js/util.js
new file mode 100644
index 0000000..60d96fc
--- /dev/null
+++ b/docs/assets/lib/backtotop/js/util.js
@@ -0,0 +1,174 @@
+// Utility function
+function Util () {};
+
+/*
+ class manipulation functions
+*/
+Util.hasClass = function(el, className) {
+ if (el.classList) return el.classList.contains(className);
+ else return !!el.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)'));
+};
+
+Util.addClass = function(el, className) {
+ var classList = className.split(' ');
+ if (el.classList) el.classList.add(classList[0]);
+ else if (!Util.hasClass(el, classList[0])) el.className += " " + classList[0];
+ if (classList.length > 1) Util.addClass(el, classList.slice(1).join(' '));
+};
+
+Util.removeClass = function(el, className) {
+ var classList = className.split(' ');
+ if (el.classList) el.classList.remove(classList[0]);
+ else if(Util.hasClass(el, classList[0])) {
+ var reg = new RegExp('(\\s|^)' + classList[0] + '(\\s|$)');
+ el.className=el.className.replace(reg, ' ');
+ }
+ if (classList.length > 1) Util.removeClass(el, classList.slice(1).join(' '));
+};
+
+Util.toggleClass = function(el, className, bool) {
+ if(bool) Util.addClass(el, className);
+ else Util.removeClass(el, className);
+};
+
+Util.setAttributes = function(el, attrs) {
+ for(var key in attrs) {
+ el.setAttribute(key, attrs[key]);
+ }
+};
+
+/*
+ DOM manipulation
+*/
+Util.getChildrenByClassName = function(el, className) {
+ var children = el.children,
+ childrenByClass = [];
+ for (var i = 0; i < el.children.length; i++) {
+ if (Util.hasClass(el.children[i], className)) childrenByClass.push(el.children[i]);
+ }
+ return childrenByClass;
+};
+
+/*
+ Animate height of an element
+*/
+Util.setHeight = function(start, to, element, duration, cb) {
+ var change = to - start,
+ currentTime = null;
+
+ var animateHeight = function(timestamp){
+ if (!currentTime) currentTime = timestamp;
+ var progress = timestamp - currentTime;
+ var val = parseInt((progress/duration)*change + start);
+ element.setAttribute("style", "height:"+val+"px;");
+ if(progress < duration) {
+ window.requestAnimationFrame(animateHeight);
+ } else {
+ cb();
+ }
+ };
+
+ //set the height of the element before starting animation -> fix bug on Safari
+ element.setAttribute("style", "height:"+start+"px;");
+ window.requestAnimationFrame(animateHeight);
+};
+
+/*
+ Smooth Scroll
+*/
+
+Util.scrollTo = function(final, duration, cb) {
+ var start = window.scrollY || document.documentElement.scrollTop,
+ currentTime = null;
+
+ var animateScroll = function(timestamp){
+ if (!currentTime) currentTime = timestamp;
+ var progress = timestamp - currentTime;
+ if(progress > duration) progress = duration;
+ var val = Math.easeInOutQuad(progress, start, final-start, duration);
+ window.scrollTo(0, val);
+ if(progress < duration) {
+ window.requestAnimationFrame(animateScroll);
+ } else {
+ cb && cb();
+ }
+ };
+
+ window.requestAnimationFrame(animateScroll);
+};
+
+/*
+ Focus utility classes
+*/
+
+//Move focus to an element
+Util.moveFocus = function (element) {
+ if( !element ) element = document.getElementsByTagName("body")[0];
+ element.focus();
+ if (document.activeElement !== element) {
+ element.setAttribute('tabindex','-1');
+ element.focus();
+ }
+};
+
+/*
+ Misc
+*/
+
+Util.getIndexInArray = function(array, el) {
+ return Array.prototype.indexOf.call(array, el);
+};
+
+Util.cssSupports = function(property, value) {
+ if('CSS' in window) {
+ return CSS.supports(property, value);
+ } else {
+ var jsProperty = property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase();});
+ return jsProperty in document.body.style;
+ }
+};
+
+/*
+ Polyfills
+*/
+//Closest() method
+if (!Element.prototype.matches) {
+ Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
+}
+
+if (!Element.prototype.closest) {
+ Element.prototype.closest = function(s) {
+ var el = this;
+ if (!document.documentElement.contains(el)) return null;
+ do {
+ if (el.matches(s)) return el;
+ el = el.parentElement || el.parentNode;
+ } while (el !== null && el.nodeType === 1);
+ return null;
+ };
+}
+
+//Custom Event() constructor
+if ( typeof window.CustomEvent !== "function" ) {
+
+ function CustomEvent ( event, params ) {
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
+ var evt = document.createEvent( 'CustomEvent' );
+ evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
+ return evt;
+ }
+
+ CustomEvent.prototype = window.Event.prototype;
+
+ window.CustomEvent = CustomEvent;
+}
+
+/*
+ Animation curves
+*/
+Math.easeInOutQuad = function (t, b, c, d) {
+ t /= d/2;
+ if (t < 1) return c/2*t*t + b;
+ t--;
+ return -c/2 * (t*(t-2) - 1) + b;
+};
\ No newline at end of file
diff --git a/docs/assets/lib/highlightjs/default.min.css b/docs/assets/lib/highlightjs/default.min.css
new file mode 100644
index 0000000..2b8ac2c
--- /dev/null
+++ b/docs/assets/lib/highlightjs/default.min.css
@@ -0,0 +1 @@
+.hljs{display:block;overflow-x:auto;padding:.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}
\ No newline at end of file
diff --git a/docs/assets/lib/highlightjs/highlight.min.js b/docs/assets/lib/highlightjs/highlight.min.js
new file mode 100644
index 0000000..1f06ffc
--- /dev/null
+++ b/docs/assets/lib/highlightjs/highlight.min.js
@@ -0,0 +1,2 @@
+/*! highlight.js v9.15.6 | BSD3 License | git.io/hljslicense */
+!function(e){var t="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):t&&(t.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return t.hljs}))}(function(n){var b=[],o=Object.keys,h={},p={},t=/^(no-?highlight|plain|text)$/i,m=/\blang(?:uage)?-([\w-]+)\b/i,r=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,a={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",relevance:"r",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},N="",v={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function y(e){return e.replace(/&/g,"&").replace(//g,">")}function f(e){return e.nodeName.toLowerCase()}function w(e,t){var r=e&&e.exec(t);return r&&0===r.index}function g(e){return t.test(e)}function u(e){var t,r={},a=Array.prototype.slice.call(arguments,1);for(t in e)r[t]=e[t];return a.forEach(function(e){for(t in e)r[t]=e[t]}),r}function _(e){var n=[];return function e(t,r){for(var a=t.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(n.push({event:"start",offset:r,node:a}),r=e(a,r),f(a).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:a}));return r}(e,0),n}function i(e){if(a&&!e.langApiRestored){for(var t in e.langApiRestored=!0,a)e[t]&&(e[a[t]]=e[t]);(e.c||[]).concat(e.v||[]).forEach(i)}}function E(s){function l(e){return e&&e.source||e}function c(e,t){return new RegExp(l(e),"m"+(s.cI?"i":"")+(t?"g":""))}!function t(r,e){if(!r.compiled){if(r.compiled=!0,r.k=r.k||r.bK,r.k){var a={},n=function(r,e){s.cI&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var t=e.split("|");a[t[0]]=[r,t[1]?Number(t[1]):1]})};"string"==typeof r.k?n("keyword",r.k):o(r.k).forEach(function(e){n(e,r.k[e])}),r.k=a}r.lR=c(r.l||/\w+/,!0),e&&(r.bK&&(r.b="\\b("+r.bK.split(" ").join("|")+")\\b"),r.b||(r.b=/\B|\b/),r.bR=c(r.b),r.endSameAsBegin&&(r.e=r.b),r.e||r.eW||(r.e=/\B|\b/),r.e&&(r.eR=c(r.e)),r.tE=l(r.e)||"",r.eW&&e.tE&&(r.tE+=(r.e?"|":"")+e.tE)),r.i&&(r.iR=c(r.i)),null==r.r&&(r.r=1),r.c||(r.c=[]),r.c=Array.prototype.concat.apply([],r.c.map(function(e){return(t="self"===e?r:e).v&&!t.cached_variants&&(t.cached_variants=t.v.map(function(e){return u(t,{v:null},e)})),t.cached_variants||t.eW&&[u(t)]||[t];var t})),r.c.forEach(function(e){t(e,r)}),r.starts&&t(r.starts,e);var i=r.c.map(function(e){return e.bK?"\\.?(?:"+e.b+")\\.?":e.b}).concat([r.tE,r.i]).map(l).filter(Boolean);r.t=i.length?c(function(e,t){for(var r=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,a=0,n="",i=0;i')+t+(r?"":N)}function l(){p+=null!=b.sL?function(){var e="string"==typeof b.sL;if(e&&!h[b.sL])return y(m);var t=e?k(b.sL,m,!0,i[b.sL]):x(m,b.sL.length?b.sL:void 0);return 0")+'"');return m+=t,t.length||1}var d=C(e);if(!d)throw new Error('Unknown language: "'+e+'"');E(d);var n,b=r||d,i={},p="";for(n=b;n!==d;n=n.parent)n.cN&&(p=o(n.cN,"",!0)+p);var m="",f=0;try{for(var s,g,_=0;b.t.lastIndex=_,s=b.t.exec(t);)g=a(t.substring(_,s.index),s[0]),_=s.index+g;for(a(t.substr(_)),n=b;n.parent;n=n.parent)n.cN&&(p+=N);return{r:f,value:p,language:e,top:b}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:y(t)};throw e}}function x(r,e){e=e||v.languages||o(h);var a={r:0,value:y(r)},n=a;return e.filter(C).filter(l).forEach(function(e){var t=k(e,r,!1);t.language=e,t.r>n.r&&(n=t),t.r>a.r&&(n=a,a=t)}),n.language&&(a.second_best=n),a}function M(e){return v.tabReplace||v.useBR?e.replace(r,function(e,t){return v.useBR&&"\n"===e?" ":v.tabReplace?t.replace(/\t/g,v.tabReplace):""}):e}function s(e){var t,r,a,n,i,s,c,o,l,u,d=function(e){var t,r,a,n,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",r=m.exec(i))return C(r[1])?r[1]:"no-highlight";for(t=0,a=(i=i.split(/\s+/)).length;t/g,"\n"):t=e,i=t.textContent,a=d?k(d,i,!0):x(i),(r=_(t)).length&&((n=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=a.value,a.value=function(e,t,r){var a=0,n="",i=[];function s(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function o(e){n+=""+f(e)+">"}function l(e){("start"===e.event?c:o)(e.node)}for(;e.length||t.length;){var u=s();if(n+=y(r.substring(a,u[0].offset)),a=u[0].offset,u===e){for(i.reverse().forEach(o);l(u.splice(0,1)[0]),(u=s())===e&&u.length&&u[0].offset===a;);i.reverse().forEach(c)}else"start"===u[0].event?i.push(u[0].node):i.pop(),l(u.splice(0,1)[0])}return n+y(r.substr(a))}(r,_(n),i)),a.value=M(a.value),e.innerHTML=a.value,e.className=(s=e.className,c=d,o=a.language,l=c?p[c]:o,u=[s.trim()],s.match(/\bhljs\b/)||u.push("hljs"),-1===s.indexOf(l)&&u.push(l),u.join(" ").trim()),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function c(){if(!c.called){c.called=!0;var e=document.querySelectorAll("pre code");b.forEach.call(e,s)}}function C(e){return e=(e||"").toLowerCase(),h[e]||h[p[e]]}function l(e){var t=C(e);return t&&!t.disableAutodetect}return n.highlight=k,n.highlightAuto=x,n.fixMarkup=M,n.highlightBlock=s,n.configure=function(e){v=u(v,e)},n.initHighlighting=c,n.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",c,!1),addEventListener("load",c,!1)},n.registerLanguage=function(t,e){var r=h[t]=e(n);i(r),r.aliases&&r.aliases.forEach(function(e){p[e]=t})},n.listLanguages=function(){return o(h)},n.getLanguage=C,n.autoDetection=l,n.inherit=u,n.IR=n.IDENT_RE="[a-zA-Z]\\w*",n.UIR=n.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",n.NR=n.NUMBER_RE="\\b\\d+(\\.\\d+)?",n.CNR=n.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",n.BNR=n.BINARY_NUMBER_RE="\\b(0b[01]+)",n.RSR=n.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",n.BE=n.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",r:0},n.ASM=n.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[n.BE]},n.QSM=n.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[n.BE]},n.PWM=n.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},n.C=n.COMMENT=function(e,t,r){var a=n.inherit({cN:"comment",b:e,e:t,c:[]},r||{});return a.c.push(n.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},n.CLCM=n.C_LINE_COMMENT_MODE=n.C("//","$"),n.CBCM=n.C_BLOCK_COMMENT_MODE=n.C("/\\*","\\*/"),n.HCM=n.HASH_COMMENT_MODE=n.C("#","$"),n.NM=n.NUMBER_MODE={cN:"number",b:n.NR,r:0},n.CNM=n.C_NUMBER_MODE={cN:"number",b:n.CNR,r:0},n.BNM=n.BINARY_NUMBER_MODE={cN:"number",b:n.BNR,r:0},n.CSSNM=n.CSS_NUMBER_MODE={cN:"number",b:n.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},n.RM=n.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[n.BE,{b:/\[/,e:/\]/,r:0,c:[n.BE]}]},n.TM=n.TITLE_MODE={cN:"title",b:n.IR,r:0},n.UTM=n.UNDERSCORE_TITLE_MODE={cN:"title",b:n.UIR,r:0},n.METHOD_GUARD={b:"\\.\\s*"+n.UIR,r:0},n.registerLanguage("apache",function(e){var t={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:"?",e:">"},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",t]},t,e.QSM]}}],i:/\S/}}),n.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,r,{cN:"string",b:/'/,e:/'/},t]}}),n.registerLanguage("coffeescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},r="[A-Za-z$_][0-9A-Za-z$_]*",a={cN:"subst",b:/#\{/,e:/}/,k:t},n=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,a]},{b:/"/,e:/"/,c:[e.BE,a]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[a,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];a.c=n;var i=e.inherit(e.TM,{b:r}),s="(\\(.*\\))?\\s*\\B[-=]>",c={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(n)}]};return{aliases:["coffee","cson","iced"],k:t,i:/\/\*/,c:n.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,c]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[c]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),n.registerLanguage("cpp",function(e){var t={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/},{b:"'\\\\?.",e:"'",i:"."}]},a={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},e.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},i=e.IR+"\\s*\\(",s={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},c=[t,e.CLCM,e.CBCM,a,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:s,i:"",c:c.concat([n,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:s,c:["self",t]},{b:e.IR+"::",k:s},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:s,c:c.concat([{b:/\(/,e:/\)/,k:s,c:c.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+e.IR+"[\\*&\\s]+)+"+i,rB:!0,e:/[{;=]/,eE:!0,k:s,i:/[^\w\s\*&]/,c:[{b:i,rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:s,r:0,c:[e.CLCM,e.CBCM,r,a,t,{b:/\(/,e:/\)/,k:s,r:0,c:["self",e.CLCM,e.CBCM,r,a,t]}]},e.CLCM,e.CBCM,n]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/,e:/>/,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:r,k:s}}}),n.registerLanguage("cs",function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},a={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},n=e.inherit(a,{i:/\n/}),i={cN:"subst",b:"{",e:"}",k:t},s=e.inherit(i,{i:/\n/}),c={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,s]},o={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},i]},l=e.inherit(o,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},s]});i.c=[o,c,a,e.ASM,e.QSM,r,e.CBCM],s.c=[l,c,n,e.ASM,e.QSM,r,e.inherit(e.CBCM,{i:/\n/})];var u={v:[o,c,a,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:t,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"\x3c!--|--\x3e"},{b:"?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},u,r,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:t,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,r:0,c:[u,r,e.CBCM]},e.CLCM,e.CBCM]}]}}),n.registerLanguage("css",function(e){var t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}}),n.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}}),n.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}}),n.registerLanguage("ini",function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_\.-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}}),n.registerLanguage("java",function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",r={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r:0};return{aliases:["jsp"],k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"meta",b:"@[A-Za-z]+"}]}}),n.registerLanguage("javascript",function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:r,c:[]},i={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,i,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:r,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:s}]}]},{b:/,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}}),n.registerLanguage("json",function(e){var t={literal:"true false null"},r=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:r,k:t},n={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},i={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return r.splice(r.length,0,n,i),{c:r,k:t,i:"\\S"}}),n.registerLanguage("makefile",function(e){var t={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[t]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},i={cN:"section",b:/^[^\s]+:/,e:/$/,c:[t]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,t,r,a,n,{cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},i]}}),n.registerLanguage("xml",function(e){var t={eW:!0,i:/,r:0,c:[{cN:"attr",b:"[A-Za-z0-9\\._:-]+",r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"