<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Introduction to Dashboard using HTML, JavaScript &amp;amp; JSON-RPC Exercise Project Download in FreeMASTER</title>
    <link>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598684#M1261</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;the rangeslider example was taken from the original author here:&amp;nbsp;&lt;A href="https://rangeslider.js.org/" target="_blank"&gt;https://rangeslider.js.org/&lt;/A&gt;&amp;nbsp; Refer to the example code and documentation there.&lt;/P&gt;
&lt;P&gt;I think you miss the CSS stylesheet which is required not only to define a look of the slider and its handle, but also to define a positioning behavior.&lt;/P&gt;
&lt;P&gt;Please see the HTML and CSS files of the exercise 4 attached.&lt;/P&gt;
&lt;P&gt;Best regards,&lt;BR /&gt;Michal&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 14 Feb 2023 07:56:48 GMT</pubDate>
    <dc:creator>MichalH</dc:creator>
    <dc:date>2023-02-14T07:56:48Z</dc:date>
    <item>
      <title>Introduction to Dashboard using HTML, JavaScript &amp; JSON-RPC Exercise Project Download</title>
      <link>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598326#M1260</link>
      <description>&lt;P&gt;Hello Everyone,&lt;/P&gt;&lt;P&gt;I am watching the FreeMASTER training videos, and practising the exercises along.&lt;/P&gt;&lt;P&gt;At the moment I am watching the following training video.&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.nxp.com/design/training/introduction-to-freemaster-dashboard-coding-using-html-javascript-activex-and-json-rpc:TIP-INTRO-FREEMASTER-CODING" target="_blank"&gt;Introduction to FreeMASTER Dashboard Coding Using HTML, JavaScript, ActiveX and JSON-RPC | NXP Semiconductors&lt;/A&gt;&lt;/P&gt;&lt;P&gt;And in this training video, in exercise 4, a dashboard is created where "Guage" is used to display the "var16" variable value and "Slider" is used to control/change the value of "var16inc".&lt;/P&gt;&lt;P&gt;I am not able to find the example project, so based on the video I tried to follow the steps. (Exercise-1, 2 and 3 are working fine, but with Exercise 4 I am facing a problem)&lt;/P&gt;&lt;P&gt;If someone can please provide me with the whole FreeMASTER project then it would be really great, else I am also sharing the problem here, maybe someone can help me in finding and fixing the problem.&lt;/P&gt;&lt;P&gt;For me, the "Guage" is working fine, but as I am adding the "Slider", the "Slider" appears and then disappears.&lt;/P&gt;&lt;P&gt;If I am commenting out the "Guage", "Slider" started appearing but the "on_slide" function is not getting called.&lt;/P&gt;&lt;P&gt;Below is my "main.html" code.&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  
  &amp;lt;!-- load JSON-RPC and FreeMASTER wrapper object --&amp;gt;
  &amp;lt;script type="text/javascript" src="./simple-jsonrpc-js.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./freemaster-client.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./gauge.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./rangeslider.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript"&amp;gt;
    
    let pcm;  // the main FreeMASTER communication object

    let gauge;
    var slider;
    let i_var16inc;

    function startup()
    {
      /* Desktop FreeMASTER listens on port 41000 by default, unless this is
       * overridden on command line using /rpcs option. FreeMASTER Lite 
       is configurable. */
      pcm = new PCM("localhost:41000", on_connected, on_error, on_error);
      pcm.OnServerError = on_error;
      pcm.OnSocketError = on_error;
    }

    function on_connected() 
    {
      /* Typically, you want to enable extra features to make use of the full API 
       * provided by desktop application. Leave this disabled and avoid any extra 
       * features when creating pages compatible with FreeMASTER Lite. */
      //pcm.EnableExtraFeatures(true);

      // Start timer
      setInterval( timer, 500);

      // load gauge
      load_gauge();
      i_var16inc = document.getElementById("input_var16inc");
      // slider
      slider = $('#slider');
      slider.rangeslider( {polyfill: false, onSlide: on_slide});
      
    }

    function on_error(err) 
    {
      /* Erors are reported in the status field. */
      // document.getElementById("status").innerHTML = err;
      /* Log Erros to console */
      console.log(err);
    }
    
    function read_variable(name, span_id)
    {
      /* ReadVariable uses FreeMASTER variable object from current project. Use 
       * ReadUIntVariable to access the memory directly using a symbol name. */
      return pcm.ReadVariable(name)
                .then((value) =&amp;gt; { 
                  document.getElementById(span_id).innerHTML = value.data;
                })
                .catch((err) =&amp;gt; { 
                  on_error(err.msg);
                });
    }
    
    
    function write_variable(name, input_id)
    {
      var val = document.getElementById(input_id).value;

      /* WriteVariable uses FreeMASTER variable object from current project. Use 
       * WriteUIntVariable to access the memory directly using a symbol name. */
      pcm.WriteVariable(name, val)
        .then(() =&amp;gt; { 
          document.getElementById("span_status").innerHTML = "Write of the " + name + " succeeded.";
        })
        .catch((err) =&amp;gt; { 
          on_error(err.msg);
        });  
    }

    function load_gauge()
    {
      let opts = 
      {
        angle: 0,                 // The span of the gauge arc
        lineWidth: 0.5,           // The line thickness
        radiusScale: 1,           // Relative radius
        pointer: 
        {
          length: 0.6,            // Relative to gauge radius
          strokeWidth: 0.035,     // The thickness
          color: '#000000'        // Fill color
        },
        // Static zones
        // When separating the background sectors or zones to have static colors
        // you must supply the staticZones property in the Gauge object's options.
        staticZones: 
        [
          {strokeStyle: "#30B32D", min: 100,    max: 30000}, 
          {strokeStyle: "#FFDD00", min: 30000,  max: 55000},
          {strokeStyle: "#F03E3E", min: 55000,  max: 65535}
        ],

        limitMax: false,          // If false, max value increases automatically if value &amp;gt; maxValue
        limitMin: false,          // If true, the min value of the gauge will be fixed
        colorStart: '#6FADCF',    // Colors
        colorStop: '#8FC0DA',     // just experiment with them
        strokeColor: '#E0E0E0',   // to see which ones work best for you
        generateGradient: true,
        highDpiSupport: true,     // High resolution support

        // Tick marks
        // Now you may also add Ticks on two levels, major and minor 
        // (or divisions and sub divisions).
        // renderTicks options:
        // divisions This is the number of major divisions around your arc.
        // divWidth This is to set the width of the indicator.
        // divLength This is a fractional percentage of the height of your arc line (0.5 = 50%)
        // divColor This sets the color of the division markers
        // subDivisions This sets the minor tick marks count between major ticks.
        // subLength This is a fractional percentage of the height of your arc line (0.5 = 50%)
        // subWidth This is to set the width of the indicator.
        // subColor This sets the color of the subdivision markers
        renderTicks: 
        {
          divisions: 5,
          divWidth: 1.0,
          divLength: 0.4,
          divColor: '#333333',
          subDivisions: 3,
          subLength: 0.2,
          subWidth: 0.5,
          subColor: '#666666'
        }
      };
      let target = document.getElementById('gauge_canvas');   // your canvas element
      gauge = new Gauge(target).setOptions(opts);             // create sexy gauge!
      gauge.maxValue = 65535;                                 // set max gauge value
      gauge.setMinValue(0);                                   // Prefer setter over gauge.minValue = 0
      gauge.animationSpeed = 32;                              // set animation speed (32 is default value)
      gauge.set(1250);                                        // set actual value
      gauge.set(10);
      gauge.set(100);
      gauge.set(200);
      gauge.set(400);
      gauge.set(800);
    }

    function timer()
    {
      read_variable("led_state", "span_led_status");
      read_variable("var16", "span_var16");
      // updating the gauge
      pcm.ReadVariable("var16")
        .then((response) =&amp;gt; {
          // console.log("var16="+response.data);
          // gauge.set(response.data);
        })
        .catch((err) =&amp;gt; console.log(err))
    }

    function ChangeIncrement()
    {
      write_variable("var16inc", "input_var16inc");
    }

    function on_slide( position, value )
    {
      console.log("I am here");   // not reaching here
      if( i_var16inc.value != value )
      {
        console.log("on_slide pos="+position+" value="+value);
        i_var16inc.value = value;
      }
    }
    
    &amp;lt;/script&amp;gt;

&amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body onload="startup()"&amp;gt;
  &amp;lt;h1&amp;gt;Hello World Dashboard&amp;lt;/h1&amp;gt;
  &amp;lt;h2&amp;gt;Using JSON-RPC&amp;lt;/h2&amp;gt;

  Led Status: &amp;lt;span id="span_led_status"&amp;gt;??&amp;lt;/span&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;
  var16: &amp;lt;span id="span_var16"&amp;gt;??&amp;lt;/span&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;
  var16inc: &amp;lt;input type="text" id="input_var16inc" value="1" size=10&amp;gt;
  &amp;lt;input type="button" value="Write!" onclick="ChangeIncrement()"&amp;gt;
  &amp;lt;span id="span_status" type="text"&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;

  &amp;lt;div style="width: 300px; text-align: center;"&amp;gt;
    &amp;lt;canvas id="gauge_canvas"&amp;gt;&amp;lt;/canvas&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;

  &amp;lt;div style="width: 300px; text-align: center;"&amp;gt;
    &amp;lt;input style="width: 300px;" id="slider" type="range" min="1" max="10" step="1" value="1"&amp;gt;
  &amp;lt;/div&amp;gt;
  

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/LI-CODE&gt;&lt;P&gt;The following is the GIF image showing the issue. (Most probably this looks like an HTML JavaScript, but maybe someone can help me out here)&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="FreeMASTER_Dashboard_NotWorking.gif" style="width: 540px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/210695i9364E39BF75EF843/image-size/large?v=v2&amp;amp;px=999" role="button" title="FreeMASTER_Dashboard_NotWorking.gif" alt="FreeMASTER_Dashboard_NotWorking.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance.&lt;/P&gt;</description>
      <pubDate>Mon, 13 Feb 2023 18:28:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598326#M1260</guid>
      <dc:creator>arun07</dc:creator>
      <dc:date>2023-02-13T18:28:10Z</dc:date>
    </item>
    <item>
      <title>Re: Introduction to Dashboard using HTML, JavaScript &amp; JSON-RPC Exercise Project Download</title>
      <link>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598684#M1261</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;the rangeslider example was taken from the original author here:&amp;nbsp;&lt;A href="https://rangeslider.js.org/" target="_blank"&gt;https://rangeslider.js.org/&lt;/A&gt;&amp;nbsp; Refer to the example code and documentation there.&lt;/P&gt;
&lt;P&gt;I think you miss the CSS stylesheet which is required not only to define a look of the slider and its handle, but also to define a positioning behavior.&lt;/P&gt;
&lt;P&gt;Please see the HTML and CSS files of the exercise 4 attached.&lt;/P&gt;
&lt;P&gt;Best regards,&lt;BR /&gt;Michal&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 14 Feb 2023 07:56:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598684#M1261</guid>
      <dc:creator>MichalH</dc:creator>
      <dc:date>2023-02-14T07:56:48Z</dc:date>
    </item>
    <item>
      <title>Re: Introduction to Dashboard using HTML, JavaScript &amp; JSON-RPC Exercise Project Download</title>
      <link>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598828#M1262</link>
      <description>&lt;P&gt;Thank You for sharing the files.&lt;BR /&gt;I still can't figure out the problem associated with my source files.&lt;BR /&gt;But I tested the files shared by you and they work fine. I will compare my source files with yours and will figure out the problem. Many Thanks (Will accept the answer after I am to find the problem)&lt;/P&gt;</description>
      <pubDate>Tue, 14 Feb 2023 10:32:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598828#M1262</guid>
      <dc:creator>arun07</dc:creator>
      <dc:date>2023-02-14T10:32:41Z</dc:date>
    </item>
    <item>
      <title>Re: Introduction to Dashboard using HTML, JavaScript &amp; JSON-RPC Exercise Project Download</title>
      <link>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598860#M1263</link>
      <description>&lt;P&gt;Thank You, as you mentioned, the style sheet was the one problem that is fixed now.&lt;BR /&gt;The updated HTML code is as below.&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  
  &amp;lt;link href="styles.css" rel="stylesheet"&amp;gt;
  &amp;lt;!-- load JSON-RPC and FreeMASTER wrapper object --&amp;gt;
  &amp;lt;script type="text/javascript" src="./simple-jsonrpc-js.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./freemaster-client.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./gauge.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./rangeslider.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript"&amp;gt;
    
    let pcm;  // the main FreeMASTER communication object

    let gauge;
    var slider;
    let i_var16inc;

    function startup()
    {
      /* Desktop FreeMASTER listens on port 41000 by default, unless this is
       * overridden on command line using /rpcs option. FreeMASTER Lite 
       is configurable. */
      pcm = new PCM("localhost:41000", on_connected, on_error, on_error);
      pcm.OnServerError = on_error;
      pcm.OnSocketError = on_error;
    }

    function on_connected() 
    {
      /* Typically, you want to enable extra features to make use of the full API 
       * provided by desktop application. Leave this disabled and avoid any extra 
       * features when creating pages compatible with FreeMASTER Lite. */
      //pcm.EnableExtraFeatures(true);

      // Start timer
      setInterval( timer, 500);

      // load gauge
      load_gauge();
      i_var16inc = document.getElementById("input_var16inc");
      // slider
      slider = $('#slider');
      slider.rangeslider( {polyfill: false, onSlide: on_slide});
    }

    function on_error(err) 
    {
      /* Erors are reported in the status field. */
      // document.getElementById("status").innerHTML = err;
      /* Log Erros to console */
      console.log(err);
    }
    
    function read_variable(name, span_id)
    {
      /* ReadVariable uses FreeMASTER variable object from current project. Use 
       * ReadUIntVariable to access the memory directly using a symbol name. */
      return pcm.ReadVariable(name)
                .then((value) =&amp;gt; { 
                  document.getElementById(span_id).innerHTML = value.data;
                })
                .catch((err) =&amp;gt; { 
                  on_error(err.msg);
                });
    }
    
    
    function write_variable(name, input_id)
    {
      var val = document.getElementById(input_id).value;

      /* WriteVariable uses FreeMASTER variable object from current project. Use 
       * WriteUIntVariable to access the memory directly using a symbol name. */
      pcm.WriteVariable(name, val)
        .then(() =&amp;gt; { 
          document.getElementById("span_status").innerHTML = "Write of the " + name + " succeeded.";
        })
        .catch((err) =&amp;gt; { 
          on_error(err.msg);
        });  
    }

    function load_gauge()
    {
      let opts = 
      {
        angle: 0,                 // The span of the gauge arc
        lineWidth: 0.5,           // The line thickness
        radiusScale: 1,           // Relative radius
        pointer: 
        {
          length: 0.6,            // Relative to gauge radius
          strokeWidth: 0.035,     // The thickness
          color: '#000000'        // Fill color
        },
        // Static zones
        // When separating the background sectors or zones to have static colors
        // you must supply the staticZones property in the Gauge object's options.
        staticZones: 
        [
          {strokeStyle: "#30B32D", min: 100,    max: 30000}, 
          {strokeStyle: "#FFDD00", min: 30000,  max: 55000},
          {strokeStyle: "#F03E3E", min: 55000,  max: 65535}
        ],

        limitMax: false,          // If false, max value increases automatically if value &amp;gt; maxValue
        limitMin: false,          // If true, the min value of the gauge will be fixed
        colorStart: '#6FADCF',    // Colors
        colorStop: '#8FC0DA',     // just experiment with them
        strokeColor: '#E0E0E0',   // to see which ones work best for you
        generateGradient: true,
        highDpiSupport: true,     // High resolution support

        // Tick marks
        // Now you may also add Ticks on two levels, major and minor 
        // (or divisions and sub divisions).
        // renderTicks options:
        // divisions This is the number of major divisions around your arc.
        // divWidth This is to set the width of the indicator.
        // divLength This is a fractional percentage of the height of your arc line (0.5 = 50%)
        // divColor This sets the color of the division markers
        // subDivisions This sets the minor tick marks count between major ticks.
        // subLength This is a fractional percentage of the height of your arc line (0.5 = 50%)
        // subWidth This is to set the width of the indicator.
        // subColor This sets the color of the subdivision markers
        renderTicks: 
        {
          divisions: 5,
          divWidth: 1.0,
          divLength: 0.4,
          divColor: '#333333',
          subDivisions: 3,
          subLength: 0.2,
          subWidth: 0.5,
          subColor: '#666666'
        }
      };
      let target = document.getElementById('gauge_canvas');   // your canvas element
      gauge = new Gauge(target).setOptions(opts);             // create sexy gauge!
      gauge.maxValue = 65535;                                 // set max gauge value
      gauge.setMinValue(0);                                   // Prefer setter over gauge.minValue = 0
      gauge.animationSpeed = 32;                              // set animation speed (32 is default value)
      gauge.set(1250);                                        // set actual value
      gauge.set(10);
      gauge.set(100);
      gauge.set(200);
      gauge.set(400);
      gauge.set(800);
    }

    function timer()
    {
      read_variable("led_state", "span_led_status");
      read_variable("var16", "span_var16");
      // updating the gauge
      pcm.ReadVariable("var16")
        .then((response) =&amp;gt; {
          // console.log("var16="+response.data);
          gauge.set(response.data);
        })
        .catch((err) =&amp;gt; console.log(err))
    }

    function ChangeIncrement(update_slider)
    {
      write_variable("var16inc", "input_var16inc");
	  if (update_slider)
	  {
		// update the slider also
		slider.val(i_var16inc.value).change();
	  }
    }

    function on_slide( position, value )
    {
      console.log("I am here");   // not reaching here
      if( i_var16inc.value != value )
      {
        console.log("on_slide pos="+position+" value="+value);
        i_var16inc.value = value;
		ChangeIncrement(false)
      }
    }
    
    &amp;lt;/script&amp;gt;

&amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body onload="startup()"&amp;gt;
  &amp;lt;h1&amp;gt;Hello World Dashboard&amp;lt;/h1&amp;gt;
  &amp;lt;h2&amp;gt;Using JSON-RPC&amp;lt;/h2&amp;gt;

  Led Status: &amp;lt;span id="span_led_status"&amp;gt;??&amp;lt;/span&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;
  var16: &amp;lt;span id="span_var16"&amp;gt;??&amp;lt;/span&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;
  var16inc: &amp;lt;input type="text" id="input_var16inc" value="1" size=10&amp;gt;
  &amp;lt;input type="button" value="Write!" onclick="ChangeIncrement(true)"&amp;gt;
  &amp;lt;span id="span_status" type="text"&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;
  
  &amp;lt;div style="width: 300px; text-align: center;"&amp;gt;
    &amp;lt;input style="width: 300px;" id="slider" type="range" min="1" max="10" step="1" value="1" data-orientation="horizontal" data-rangeslider&amp;gt;
  &amp;lt;/div&amp;gt;
  
  &amp;lt;div style="width: 300px; text-align: center;"&amp;gt;
    &amp;lt;canvas id="gauge_canvas"&amp;gt;&amp;lt;/canvas&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;br&amp;gt;
  &amp;lt;br&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 14 Feb 2023 12:11:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/FreeMASTER/Introduction-to-Dashboard-using-HTML-JavaScript-amp-JSON-RPC/m-p/1598860#M1263</guid>
      <dc:creator>arun07</dc:creator>
      <dc:date>2023-02-14T12:11:25Z</dc:date>
    </item>
  </channel>
</rss>

