{"id":1772,"date":"2017-04-07T14:53:02","date_gmt":"2017-04-07T14:53:02","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=1772"},"modified":"2017-04-14T17:12:53","modified_gmt":"2017-04-14T17:12:53","slug":"ionic-3-0-has-arrived","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived","title":{"rendered":"Ionic 3.0 has Arrived!"},"content":{"rendered":"<p>We are so excited to announce the release of Ionic <a href=\"https:\/\/github.com\/driftyco\/ionic\/blob\/master\/CHANGELOG.md#301-2017-04-06\">3.0<\/a>! This version jump may worry some of you, but don\u2019t let it! The <a href=\"https:\/\/github.com\/driftyco\/ionic\/blob\/master\/CHANGELOG.md#steps-to-upgrade\">required changes<\/a> to go from <code>2.x.x<\/code> to <code>3.0.x<\/code> are minimal. We got you! \ud83d\ude42<\/p>\n<h3>But\u2026 why 3.0?<\/h3>\n<p>Remember when we said this in our <a href=\"https:\/\/ionic.io\/blog\/announcing-ionic-2-0-0-final\/\">Ionic 2.0.0 final blog<\/a>:<\/p>\n<blockquote>\n<h3 style=\"margin-top: 0\">What\u2019s next?<\/h3>\n<p>Ionic 3 of course! (\u2026joking!)\n<\/p><\/blockquote>\n<p>Well, we were joking about a completely new framework, but this version change is not for that reason.<\/p>\n<p><!--more--><\/p>\n<p>We\u2019ve recently switched over to use <a href=\"http:\/\/semver.org\/\">Semver versioning<\/a>. This means that we will be following these guidelines when releasing new versions of Ionic.<\/p>\n<p>Given a version number <code>MAJOR.MINOR.PATCH<\/code>, increment the:<\/p>\n<ul>\n<li><code>MAJOR<\/code> version when you make incompatible API changes,<\/li>\n<li><code>MINOR<\/code> version when you add functionality in a backwards-compatible manner, and<\/li>\n<li><code>PATCH<\/code> version when you make backwards-compatible bug fixes.<\/li>\n<\/ul>\n<p>When we upgrade our internal version of Angular, we are bumping the Ionic version according to whether the Angular upgrade is major, minor or a patch. Since this release upgrades Ionic to be compatible with Angular <code>4.0.0<\/code> and it also has incompatible API changes, it had to be a major release. To see a full list of the breaking changes in this release, check out the <a href=\"https:\/\/github.com\/driftyco\/ionic\/blob\/master\/CHANGELOG.md#breaking-changes\">changelog<\/a>.<\/p>\n<h3>What\u2019s New?<\/h3>\n<p>For a full list of changes and steps to upgrade, see the <a href=\"https:\/\/github.com\/driftyco\/ionic\/blob\/master\/CHANGELOG.md\">changelog<\/a>.<\/p>\n<blockquote><p>\n  Note: Starting a new app? The <code>--v2<\/code> flag will still be required for now. This doesn&#8217;t mean you&#8217;ll get a 2.x.x version of Ionic, just the latest\/current version that has been released.\n<\/p><\/blockquote>\n<h4>Angular 4.0.0<\/h4>\n<p>We have updated Ionic to be compatible with Angular <code>4.0.0<\/code>. This upgrade introduces new features, smaller and faster applications, support for a more recent version of TypeScript, and much more. For more information, see the <a href=\"http:\/\/angularjs.blogspot.com\/2017\/03\/angular-400-now-available.html\">Angular 4.0.0 blog<\/a>.<\/p>\n<h4>TypeScript 2.1 and 2.2 compatibility<\/h4>\n<p>Like Angular, Ionic has been updated to work with a more recent version of TypeScript. This upgrade will improve the build time and type checking in your application. It also introduces support for mix-in classes, the ability to use async await in Ionic, and much more. For more information, see the <a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-2-2.html\">TypeScript release notes<\/a>.<\/p>\n<h4>IonicPage Decorator<\/h4>\n<p>Gone are the days of passing a deep link configuration to your application\u2019s root module. You can now set up deep links by using the <code>@IonicPage<\/code> decorator. This makes it easier to set up lazy loading in your application, set the priority of lazy loading pages, and customize the configuration for each individual page.<\/p>\n<p>Here\u2019s an example of setting some of the optional properties for an <code>@IonicPage<\/code>:<\/p>\n<pre><code>@IonicPage({\n  name: &#039;my-about&#039;,\n  segment: &#039;about-page&#039;\n})\n@Component({\n  selector: &#039;page-about&#039;,\n  templateUrl: &#039;about.html&#039;\n})\nexport class AboutPage { }\n<\/code><\/pre>\n<p>For more information, see the <a href=\"http:\/\/ionicframework.com\/docs\/api\/navigation\/IonicPage\/\">IonicPage API documentation<\/a>.<\/p>\n<h4>Lazy Loading<\/h4>\n<p>Ionic <code>3.0<\/code> includes support for lazy loading. It is not the default yet as we have found some minor issues with it. We are actively looking for testers and to hear community feedback. The changes affect the file structure and navigation of your application, but they will ultimately speed the application up. To get started testing lazy loading in Ionic <code>3.0<\/code> see the <a href=\"https:\/\/docs.google.com\/document\/d\/1vGokwMXPQItZmTHZQbTO4qwj_SQymFhRS_nJmiH0K3w\/edit?usp=sharing\">lazy loading document<\/a>.<\/p>\n<h3>Known Issues<\/h3>\n<p>There are some known issues with navigation that will be worked on soon:<br \/>\n&#8211; The URL is not updating properly when pushing a page on a root level <code>ion-nav<\/code> that has an <code>ion-tabs<\/code> navigation stack in the history.<br \/>\n&#8211; Deep linking is currently only working with one navigation stack, so it will not work properly with split pane containing 2+ navigations side by side.<\/p>\n<h3>What\u2019s Next?<\/h3>\n<p>Our main focus will continue to be on improving application start-up speed and performance. We will continuously be incorporating user feedback into our lazy loading implementation. In addition to this, features to improve our support for desktop will be added. As always, we will still be fixing known bugs in our components and navigation.<\/p>\n<h3>Thank You<\/h3>\n<p>A huge thank you to everyone who has tested and given us feedback. We know that changes still need to be made, and we are working hard to make them happen. We appreciate each and every one of you. &lt;3<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are so excited to announce the release of Ionic 3.0! This version jump may worry some of you, but don\u2019t let it! The required changes to go from 2.x.x to 3.0.x are minimal. We got you! \ud83d\ude42 But\u2026 why 3.0? Remember when we said this in our Ionic 2.0.0 final blog: What\u2019s next? Ionic [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":1784,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[3],"class_list":["post-1772","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","tag-ionic"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ionic 3.0 has Arrived! - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic 3.0 has Arrived!\" \/>\n<meta property=\"og:description\" content=\"We are so excited to announce the release of Ionic 3.0! This version jump may worry some of you, but don\u2019t let it! The required changes to go from 2.x.x to 3.0.x are minimal. We got you! \ud83d\ude42 But\u2026 why 3.0? Remember when we said this in our Ionic 2.0.0 final blog: What\u2019s next? Ionic [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-07T14:53:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-14T17:12:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"480\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Brandy Smith\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brandy Smith\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\"},\"author\":{\"name\":\"Brandy Smith\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/fcd7940afdce3781b3381ec7c1b16c26\"},\"headline\":\"Ionic 3.0 has Arrived!\",\"datePublished\":\"2017-04-07T14:53:02+00:00\",\"dateModified\":\"2017-04-14T17:12:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\"},\"wordCount\":645,\"commentCount\":63,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif\",\"keywords\":[\"Ionic\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\",\"url\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\",\"name\":\"Ionic 3.0 has Arrived! - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif\",\"datePublished\":\"2017-04-07T14:53:02+00:00\",\"dateModified\":\"2017-04-14T17:12:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif\",\"width\":480,\"height\":480},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic 3.0 has Arrived!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/fcd7940afdce3781b3381ec7c1b16c26\",\"name\":\"Brandy Smith\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png\",\"caption\":\"Brandy Smith\"},\"url\":\"https:\/\/ionic.io\/blog\/author\/brandy\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ionic 3.0 has Arrived! - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived","og_locale":"en_US","og_type":"article","og_title":"Ionic 3.0 has Arrived!","og_description":"We are so excited to announce the release of Ionic 3.0! This version jump may worry some of you, but don\u2019t let it! The required changes to go from 2.x.x to 3.0.x are minimal. We got you! \ud83d\ude42 But\u2026 why 3.0? Remember when we said this in our Ionic 2.0.0 final blog: What\u2019s next? Ionic [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived","og_site_name":"Ionic Blog","article_published_time":"2017-04-07T14:53:02+00:00","article_modified_time":"2017-04-14T17:12:53+00:00","og_image":[{"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif","width":480,"height":480,"type":"image\/gif"}],"author":"Brandy Smith","twitter_card":"summary_large_image","twitter_creator":"@ionicframework","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Brandy Smith","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived"},"author":{"name":"Brandy Smith","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/fcd7940afdce3781b3381ec7c1b16c26"},"headline":"Ionic 3.0 has Arrived!","datePublished":"2017-04-07T14:53:02+00:00","dateModified":"2017-04-14T17:12:53+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived"},"wordCount":645,"commentCount":63,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif","keywords":["Ionic"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived","url":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived","name":"Ionic 3.0 has Arrived! - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif","datePublished":"2017-04-07T14:53:02+00:00","dateModified":"2017-04-14T17:12:53+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif","width":480,"height":480},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/ionic-3-0-has-arrived#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Ionic 3.0 has Arrived!"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/fcd7940afdce3781b3381ec7c1b16c26","name":"Brandy Smith","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png","caption":"Brandy Smith"},"url":"https:\/\/ionic.io\/blog\/author\/brandy"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/04\/giphy.gif","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1772","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=1772"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1772\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/1784"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=1772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=1772"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=1772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}