diff --git a/app/design/frontend/Magento/blank/Magento_RecurringPayment/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_RecurringPayment/web/css/source/_module.less
deleted file mode 100644
index 2334b006412c57b3e478f21f20d8081864e526d3..0000000000000000000000000000000000000000
--- a/app/design/frontend/Magento/blank/Magento_RecurringPayment/web/css/source/_module.less
+++ /dev/null
@@ -1,40 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//    Common
-//--------------------------------------
-
-& when (@media-common = true) {
-
-.payment-schedule {
-    margin: 20px 0 0;
-    .item-content {
-        margin: 0 0 5px;
-    }
-}
-
-.items-info-tabs {
-    border-bottom: @border-width__base solid @border-color__base;
-    margin-bottom: 10px;
-    .item {
-        display: inline-block;
-        margin-right: 20px;
-    }
-}
-
-.field.payment-product-options {
-    .control input {
-        width: 160px;
-    }
-}
-
-}
-
-//
-//    Desktop
-//--------------------------------------
-.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
-}
diff --git a/app/design/frontend/Magento/luma/Magento_RecurringPayment/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_RecurringPayment/web/css/source/_module.less
deleted file mode 100644
index cd4aaedb867b4c5050c0c9f534e02c88b812ee79..0000000000000000000000000000000000000000
--- a/app/design/frontend/Magento/luma/Magento_RecurringPayment/web/css/source/_module.less
+++ /dev/null
@@ -1,77 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//    Common
-//--------------------------------------
-
-& when (@media-common = true) {
-
-//
-//    Product
-//--------------------------------------
-.payment-schedule {
-    margin: 20px 0 0;
-    .item-content {
-        margin: 0 0 5px;
-    }
-}
-.items-info-tabs {
-    .item {
-        line-height: @tab-control__height;
-        margin: 0 0 -1px;
-        strong {
-            .css(background, @tab-control__active__background-color);
-            border: @border-width__base solid @border-color__base;
-            display: block;
-            font-weight: @tab-control__font-weight;
-            padding: 0 20px;
-        }
-        a {
-            .css(background, @tab-control__background-color);
-            .css(color, @tab-control__color);
-            border: @border-width__base solid @border-color__base;
-            display: block;
-            font-weight: @tab-control__font-weight;
-            padding: 0 20px;
-            &:hover {
-                .css(background, @tab-control__hover__background-color);
-                .css(text-decoration, @tab-control__hover__text-decoration);
-            }
-        }
-    }
-}
-
-.payment-product-options {
-    &:extend(.abs-field-date all);
-}
-
-}
-
-//
-//    Desktop
-//--------------------------------------
-.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
-    .items-info-tabs {
-        &:extend(.abs-add-clearfix-desktop all);
-        .item {
-            float: left;
-            margin: 0 @tab-control__margin-right 0 0;
-            strong {
-                border-bottom: 0;
-                margin-bottom: -1px;
-                padding: @tab-control__padding-top @tab-control__padding-right @tab-control__padding-bottom+1 @tab-control__padding-left;
-            }
-            a {
-                padding: 1px 35px;
-            }
-        }
-    }
-    .payment-product-options {
-        .control {
-            width: 200px;
-        }
-    }
-}
diff --git a/app/etc/di.xml b/app/etc/di.xml
index cba41415e86e40f733a7f70c1586c4ccbea88bd3..f2994939911afecf670fc7f53f16214341a13744 100755
--- a/app/etc/di.xml
+++ b/app/etc/di.xml
@@ -181,6 +181,16 @@
             <argument name="mode" xsi:type="init_parameter">Magento\Framework\App\State::PARAM_MODE</argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\View\Asset\Source">
+        <arguments>
+            <argument name="appMode" xsi:type="init_parameter">Magento\Framework\App\State::PARAM_MODE</argument>
+        </arguments>
+    </type>
+    <type name="Magento\Framework\View\Page\Config\Renderer">
+        <arguments>
+            <argument name="appMode" xsi:type="init_parameter">Magento\Framework\App\State::PARAM_MODE</argument>
+        </arguments>
+    </type>
     <type name="Magento\Framework\App\Arguments\ValidationState">
         <arguments>
             <argument name="appMode" xsi:type="init_parameter">Magento\Framework\App\State::PARAM_MODE</argument>
@@ -535,11 +545,26 @@
             <argument name="stateCollection" xsi:type="object" shared="false">Magento\Framework\Mview\View\State\CollectionInterface</argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\App\View\Asset\Publisher" shared="false" />
     <type name="Magento\Framework\App\StaticResource">
         <arguments>
             <argument name="response" xsi:type="object" shared="false">Magento\Core\Model\File\Storage\Response</argument>
+            <argument name="publisher" xsi:type="object">developerPublisher</argument>
         </arguments>
     </type>
+    <virtualType name="developerPublisher" type="Magento\Framework\App\View\Asset\Publisher">
+        <arguments>
+            <argument name="materializationStrategyFactory" xsi:type="object">developerMaterialization</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="developerMaterialization" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
+        <arguments>
+            <argument name="strategiesList" xsi:type="array">
+                <item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
+                <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>
+            </argument>
+        </arguments>
+    </virtualType>
     <virtualType name="fallbackResolverSimpleWithGroupedCache" type="Magento\Framework\View\Design\FileResolution\Fallback\Resolver\Simple">
         <arguments>
             <argument name="cache" xsi:type="object">Magento\Framework\View\Design\FileResolution\Fallback\CacheData\Grouped</argument>
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php
index d6a206afb6d185a29af54d560888ee264ff513d8..2925049e6dc5ba13af53650443ff8a7cb856c95b 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php
@@ -56,31 +56,32 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase
             )
         );
 
+        $sharedInstances = [
+            'Magento\Framework\App\Cache\Type\Config' => $cache,
+            'Magento\Framework\App\ObjectManager\ConfigLoader' => $configLoader,
+            'Magento\Framework\App\ObjectManager\ConfigCache' => $configCache,
+            'Magento\Framework\Config\ReaderInterface' => $this->getMock(
+                'Magento\Framework\Config\ReaderInterface'
+            ),
+            'Magento\Framework\Config\ScopeInterface' => $this->getMock('Magento\Framework\Config\ScopeInterface'),
+            'Magento\Framework\Config\CacheInterface' => $this->getMock('Magento\Framework\Config\CacheInterface'),
+            'Magento\Framework\Cache\FrontendInterface' =>
+                $this->getMock('Magento\Framework\Cache\FrontendInterface'),
+            'Magento\Framework\App\Resource' => $this->getMockBuilder('Magento\Framework\App\Resource')
+                ->disableOriginalConstructor()
+                ->getMock(),
+            'Magento\Framework\App\Resource\Config' => $this->getMock(
+                'Magento\Framework\App\Resource\Config',
+                [],
+                [],
+                '',
+                false
+            )
+        ];
         $model = new \Magento\TestFramework\ObjectManager(
             $factory,
             $configMock,
-            [
-                'Magento\Framework\App\Cache\Type\Config' => $cache,
-                'Magento\Framework\App\ObjectManager\ConfigLoader' => $configLoader,
-                'Magento\Framework\App\ObjectManager\ConfigCache' => $configCache,
-                'Magento\Framework\Config\ReaderInterface' => $this->getMock(
-                    'Magento\Framework\Config\ReaderInterface'
-                ),
-                'Magento\Framework\Config\ScopeInterface' => $this->getMock('Magento\Framework\Config\ScopeInterface'),
-                'Magento\Framework\Config\CacheInterface' => $this->getMock('Magento\Framework\Config\CacheInterface'),
-                'Magento\Framework\Cache\FrontendInterface' =>
-                    $this->getMock('Magento\Framework\Cache\FrontendInterface'),
-                'Magento\Framework\App\Resource' => $this->getMockBuilder('Magento\Framework\App\Resource')
-                        ->disableOriginalConstructor()
-                        ->getMock(),
-                'Magento\Framework\App\Resource\Config' => $this->getMock(
-                    'Magento\Framework\App\Resource\Config',
-                    [],
-                    [],
-                    '',
-                    false
-                )
-            ],
+            $sharedInstances,
             $primaryLoaderMock
         );
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Interception/AbstractPlugin.php b/dev/tests/integration/testsuite/Magento/Framework/Interception/AbstractPlugin.php
index 1539ad87f28dfcaaedca40f1418f4cc26c8198f5..64cad39d9c989dd7fe5da54bfb1a4ead28dc1636 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Interception/AbstractPlugin.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Interception/AbstractPlugin.php
@@ -52,19 +52,20 @@ abstract class AbstractPlugin extends \PHPUnit_Framework_TestCase
             $definitions
         );
         $interceptionDefinitions = new Definition\Runtime();
+        $sharedInstances = [
+            'Magento\Framework\Config\CacheInterface'                      => $cache,
+            'Magento\Framework\Config\ScopeInterface'                      => $configScope,
+            'Magento\Framework\Config\ReaderInterface'                     => $this->_configReader,
+            'Magento\Framework\ObjectManager\RelationsInterface'           => $relations,
+            'Magento\Framework\ObjectManager\ConfigInterface'              => $config,
+            'Magento\Framework\Interception\ObjectManager\ConfigInterface' => $config,
+            'Magento\Framework\ObjectManager\DefinitionInterface'          => $definitions,
+            'Magento\Framework\Interception\DefinitionInterface'           => $interceptionDefinitions
+        ];
         $this->_objectManager = new \Magento\Framework\ObjectManager\ObjectManager(
             $factory,
             $config,
-            [
-                'Magento\Framework\Config\CacheInterface'                      => $cache,
-                'Magento\Framework\Config\ScopeInterface'                      => $configScope,
-                'Magento\Framework\Config\ReaderInterface'                     => $this->_configReader,
-                'Magento\Framework\ObjectManager\RelationsInterface'           => $relations,
-                'Magento\Framework\ObjectManager\ConfigInterface'              => $config,
-                'Magento\Framework\Interception\ObjectManager\ConfigInterface' => $config,
-                'Magento\Framework\ObjectManager\DefinitionInterface'          => $definitions,
-                'Magento\Framework\Interception\DefinitionInterface'           => $interceptionDefinitions
-            ]
+            $sharedInstances
         );
         $factory->setObjectManager($this->_objectManager);
         $config->setInterceptionConfig($interceptionConfig);
diff --git a/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/CopyTest.php b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/CopyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..197eab9f1f3303861ee8065a949b3a462429c28c
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/CopyTest.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+class CopyTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Copy
+     */
+    private $copyPublisher;
+
+    public function setUp()
+    {
+        $this->copyPublisher = new Copy;
+    }
+
+    public function testPublishFile()
+    {
+        $rootDir = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')
+            ->getMock();
+        $targetDir = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')
+            ->getMock();
+        $sourcePath = 'source/path/file';
+        $destinationPath = 'destination/path/file';
+
+        $rootDir->expects($this->once())
+            ->method('copyFile')
+            ->with(
+                $sourcePath,
+                $destinationPath,
+                $targetDir
+            )->willReturn(true);
+
+        $this->assertTrue($this->copyPublisher->publishFile($rootDir, $targetDir, $sourcePath, $destinationPath));
+    }
+
+    public function testIsSupported()
+    {
+        $asset = $this->getMockBuilder('Magento\Framework\View\Asset\LocalInterface')
+            ->getMock();
+        $this->assertTrue($this->copyPublisher->isSupported($asset));
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/FactoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b03d99e3fd05db7e78b76abe7d01b6aec279ef89
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/FactoryTest.php
@@ -0,0 +1,101 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+use Magento\Framework\ObjectManagerInterface;
+
+class FactoryTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManagerInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $objectManager;
+
+    public function setUp()
+    {
+        $this->objectManager = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface')
+            ->setMethods([])
+            ->getMock();
+    }
+
+    public function testCreateEmptyStrategies()
+    {
+        $asset = $this->getAsset();
+        $copyStrategy = $this->getMockBuilder('Magento\Framework\App\View\Asset\MaterializationStrategy\Copy')
+            ->setMethods([])
+            ->getMock();
+        $copyStrategy->expects($this->once())
+            ->method('isSupported')
+            ->with($asset)
+            ->willReturn(true);
+
+        $this->objectManager->expects($this->once())
+            ->method('get')
+            ->with(Factory::DEFAULT_STRATEGY)
+            ->willReturn($copyStrategy);
+
+        $factory = new Factory($this->objectManager, []);
+        $this->assertSame($copyStrategy, $factory->create($asset));
+    }
+
+    public function testCreateSupported()
+    {
+        $asset = $this->getAsset();
+        $copyStrategy = $this->getMockBuilder('Magento\Framework\App\View\Asset\MaterializationStrategy\Copy')
+            ->setMethods([])
+            ->getMock();
+        $copyStrategy->expects($this->once())
+            ->method('isSupported')
+            ->with($asset)
+            ->willReturn(false);
+
+        $supportedStrategy = $this->getMockBuilder(
+            'Magento\Framework\App\View\Asset\MaterializationStrategy\StrategyInterface'
+        )
+            ->setMethods([])
+            ->getMock();
+        $supportedStrategy->expects($this->once())
+            ->method('isSupported')
+            ->with($asset)
+            ->willReturn(true);
+
+        $factory = new Factory($this->objectManager, [$copyStrategy, $supportedStrategy]);
+        $this->assertSame($supportedStrategy, $factory->create($asset));
+    }
+
+    public function testCreateException()
+    {
+        $asset = $this->getAsset();
+        $copyStrategy = $this->getMockBuilder('Magento\Framework\App\View\Asset\MaterializationStrategy\Copy')
+            ->setMethods([])
+            ->getMock();
+        $copyStrategy->expects($this->once())
+            ->method('isSupported')
+            ->with($asset)
+            ->willReturn(false);
+
+        $this->objectManager->expects($this->once())
+            ->method('get')
+            ->with(Factory::DEFAULT_STRATEGY)
+            ->willReturn($copyStrategy);
+
+        $factory = new Factory($this->objectManager, []);
+
+        $this->setExpectedException('LogicException', 'No materialization strategy is supported');
+        $factory->create($asset);
+    }
+
+    /**
+     * @return \Magento\Framework\View\Asset\LocalInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getAsset()
+    {
+        return $this->getMockBuilder('Magento\Framework\View\Asset\LocalInterface')
+            ->setMethods([])
+            ->getMock();
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/SymlinkTest.php b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/SymlinkTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..92c6d6fe8ec7a5870555c9a5834fe7c6c13d6a81
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/MaterializationStrategy/SymlinkTest.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\View\Asset;
+
+class SymlinkTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Symlink
+     */
+    private $symlinkPublisher;
+
+    public function setUp()
+    {
+        $this->symlinkPublisher = new Symlink;
+    }
+
+    public function testPublishFile()
+    {
+        $rootDir = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')
+            ->getMock();
+        $targetDir = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')
+            ->getMock();
+        $sourcePath = 'source/path/file';
+        $destinationPath = 'destination/path/file';
+
+        $rootDir->expects($this->once())
+            ->method('createSymlink')
+            ->with(
+                $sourcePath,
+                $destinationPath,
+                $targetDir
+            )->willReturn(true);
+
+        $this->assertTrue($this->symlinkPublisher->publishFile($rootDir, $targetDir, $sourcePath, $destinationPath));
+    }
+
+    /**
+     * @dataProvider sourceFileDataProvider
+     */
+    public function testIsSupported($path, $expectation)
+    {
+        $asset = $this->getMockBuilder('Magento\Framework\View\Asset\LocalInterface')
+            ->setMethods([])
+            ->getMock();
+        $asset->expects($this->once())
+            ->method('getSourceFile')
+            ->willReturn($path);
+        $this->assertEquals($expectation, $this->symlinkPublisher->isSupported($asset));
+    }
+
+    /**
+     * @return array
+     */
+    public function sourceFileDataProvider()
+    {
+        return [
+            ['path/to/file', true],
+            [DirectoryList::TMP_MATERIALIZATION_DIR . '/path/to/file', false]
+        ];
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/PublisherTest.php b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/PublisherTest.php
index 6d5c40ea63d013761e9fe36364cee1db4d29c641..2bbc1644f6f5fbd371786361875d192d96368945 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/PublisherTest.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/App/View/Asset/PublisherTest.php
@@ -11,11 +11,6 @@ use Magento\Framework\Filesystem\DriverPool;
 
 class PublisherTest extends \PHPUnit_Framework_TestCase
 {
-    /**
-     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $appState;
-
     /**
      * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -41,11 +36,22 @@ class PublisherTest extends \PHPUnit_Framework_TestCase
      */
     private $object;
 
+    /**
+     * @var MaterializationStrategy\Factory |\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $materializationStrategyFactory;
+
     protected function setUp()
     {
-        $this->appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
         $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
-        $this->object = new Publisher($this->appState, $this->filesystem);
+        $this->materializationStrategyFactory = $this->getMock(
+            'Magento\Framework\App\View\Asset\MaterializationStrategy\Factory',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->object = new Publisher($this->filesystem, $this->materializationStrategyFactory);
 
         $this->rootDirWrite = $this->getMockForAbstractClass('Magento\Framework\Filesystem\Directory\WriteInterface');
         $this->staticDirRead = $this->getMockForAbstractClass('Magento\Framework\Filesystem\Directory\ReadInterface');
@@ -62,19 +68,8 @@ class PublisherTest extends \PHPUnit_Framework_TestCase
             ]));
     }
 
-    public function testPublishNotAllowed()
-    {
-        $this->appState->expects($this->once())
-            ->method('getMode')
-            ->will($this->returnValue(\Magento\Framework\App\State::MODE_DEVELOPER));
-        $this->assertFalse($this->object->publish($this->getAsset()));
-    }
-
     public function testPublishExistsBefore()
     {
-        $this->appState->expects($this->once())
-            ->method('getMode')
-            ->will($this->returnValue(\Magento\Framework\App\State::MODE_PRODUCTION));
         $this->staticDirRead->expects($this->once())
             ->method('isExist')
             ->with('some/file.ext')
@@ -84,21 +79,29 @@ class PublisherTest extends \PHPUnit_Framework_TestCase
 
     public function testPublish()
     {
-        $this->appState->expects($this->once())
-            ->method('getMode')
-            ->will($this->returnValue(\Magento\Framework\App\State::MODE_PRODUCTION));
         $this->staticDirRead->expects($this->once())
             ->method('isExist')
             ->with('some/file.ext')
             ->will($this->returnValue(false));
+        $materializationStrategy = $this->getMock(
+            'Magento\Framework\App\View\Asset\MaterializationStrategy\StrategyInterface',
+            [],
+            [],
+            '',
+            false
+        );
 
         $this->rootDirWrite->expects($this->once())
             ->method('getRelativePath')
             ->with('/root/some/file.ext')
             ->will($this->returnValue('some/file.ext'));
-        $this->rootDirWrite->expects($this->once())
-            ->method('copyFile')
-            ->with('some/file.ext', 'some/file.ext', $this->staticDirWrite)
+        $this->materializationStrategyFactory->expects($this->once())
+            ->method('create')
+            ->with($this->getAsset())
+            ->will($this->returnValue($materializationStrategy));
+        $materializationStrategy->expects($this->once())
+            ->method('publishFile')
+            ->with($this->rootDirWrite, $this->staticDirWrite, 'some/file.ext', 'some/file.ext')
             ->will($this->returnValue(true));
 
         $this->assertTrue($this->object->publish($this->getAsset()));
diff --git a/dev/tests/unit/testsuite/Magento/Framework/Filesystem/Directory/WriteTest.php b/dev/tests/unit/testsuite/Magento/Framework/Filesystem/Directory/WriteTest.php
index 4a3594684002ac579558572b8fe97ef31e66334c..12f311fe2b8a6ce6ee996367dff2b0a5bbde6f72 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/Filesystem/Directory/WriteTest.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/Filesystem/Directory/WriteTest.php
@@ -28,6 +28,11 @@ class WriteTest extends \PHPUnit_Framework_TestCase
      */
     protected $fileFactory;
 
+    /**
+     * @var string
+     */
+    protected $path;
+
     /**
      * Set up
      */
@@ -41,10 +46,11 @@ class WriteTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $this->path = 'PATH/';
         $this->write = new \Magento\Framework\Filesystem\Directory\Write(
             $this->fileFactory,
             $this->driver,
-            null,
+            $this->path,
             'cool-permissions'
         );
     }
@@ -81,4 +87,66 @@ class WriteTest extends \PHPUnit_Framework_TestCase
         $this->driver->expects($this->once())->method('isWritable')->will($this->returnValue(true));
         $this->assertTrue($this->write->isWritable('correct-path'));
     }
+
+
+    public function testCreateSymlinkTargetDirectoryExists()
+    {
+        $targetDir = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')
+            ->getMock();
+        $targetDir->driver = $this->driver;
+        $sourcePath = 'source/path/file';
+        $destinationDirectory = 'destination/path';
+        $destinationFile = $destinationDirectory . '/' . 'file';
+
+        $this->assertIsFileExpectation($sourcePath);
+        $this->driver->expects($this->once())
+            ->method('getParentDirectory')
+            ->with($destinationFile)
+            ->willReturn($destinationDirectory);
+        $targetDir->expects($this->once())
+            ->method('isExist')
+            ->with($destinationDirectory)
+            ->willReturn(true);
+        $targetDir->expects($this->once())
+            ->method('getAbsolutePath')
+            ->with($destinationFile)
+            ->willReturn($this->getAbsolutePath($destinationFile));
+        $this->driver->expects($this->once())
+            ->method('symlink')
+            ->with(
+                $this->getAbsolutePath($sourcePath),
+                $this->getAbsolutePath($destinationFile),
+                $targetDir->driver
+            )->willReturn(true);
+
+        $this->assertTrue($this->write->createSymlink($sourcePath, $destinationFile, $targetDir));
+    }
+
+    /**
+     * Assert is file expectation
+     *
+     * @param string $path
+     */
+    private function assertIsFileExpectation($path)
+    {
+        $this->driver->expects($this->any())
+            ->method('getAbsolutePath')
+            ->with($this->path, $path)
+            ->willReturn($this->getAbsolutePath($path));
+        $this->driver->expects($this->any())
+            ->method('isFile')
+            ->with($this->getAbsolutePath($path))
+            ->willReturn(true);
+    }
+
+    /**
+     * Returns expected absolute path to file
+     *
+     * @param string $path
+     * @return string
+     */
+    private function getAbsolutePath($path)
+    {
+        return $this->path . $path;
+    }
 }
diff --git a/dev/tests/unit/testsuite/Magento/Framework/Less/FileGeneratorTest.php b/dev/tests/unit/testsuite/Magento/Framework/Less/FileGeneratorTest.php
index cae64ac721c4bd98446e99cb74269463a3e2967a..a0daffbbae28bf23bfb09eb5a4f1d55013b296d3 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/Less/FileGeneratorTest.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/Less/FileGeneratorTest.php
@@ -79,7 +79,7 @@ class FileGeneratorTest extends \PHPUnit_Framework_TestCase
         $expectedPath = '/var/view_preprocessed/less/some/file.less';
 
         $asset = $this->getMock('\Magento\Framework\View\Asset\File', [], [], '', false);
-        $asset->expects($this->once())
+        $asset->expects($this->exactly(2))
             ->method('getPath')
             ->will($this->returnValue('some/file.css'));
         $chain = new \Magento\Framework\View\Asset\PreProcessor\Chain($asset, $originalContent, 'less');
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTest.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTest.php
index b22549c43efe28d1c0be86cf21d537e91c63f95a..0ed7917404e9265e56c290bf5eeb11a462ab9f6f 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTest.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Framework\ObjectManager\Environment;
 
+require 'CompiledTesting.php';
+
 class CompiledTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -15,7 +17,7 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $envFactoryMock = $this->getMock('Magento\Framework\ObjectManager\EnvironmentFactory', [], [], '', false);
-        $this->_compiled = new \Magento\Framework\ObjectManager\Environment\Compiled($envFactoryMock);
+        $this->_compiled = new \Magento\Framework\ObjectManager\Environment\CompiledTesting($envFactoryMock);
     }
 
     public function testGetFilePath()
@@ -27,4 +29,12 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     {
         $this->assertEquals(Compiled::MODE, $this->_compiled->getMode());
     }
+
+    public function testGetObjectManagerFactory()
+    {
+        $this->assertInstanceOf(
+            'Magento\Framework\ObjectManager\Factory\Compiled',
+            $this->_compiled->getObjectManagerFactory(['shared_instances' => []])
+        );
+    }
 }
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTesting.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTesting.php
new file mode 100644
index 0000000000000000000000000000000000000000..88daaa0c6795b32fcf75e9ada76bf9f35a1c3730
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/CompiledTesting.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\ObjectManager\Environment;
+
+require 'ConfigTesting.php';
+
+class CompiledTesting extends Compiled
+{
+    /**
+     * @return array
+     */
+    protected function getConfigData()
+    {
+        return [];
+    }
+
+    /**
+     * @return \Magento\Framework\Interception\ObjectManager\ConfigInterface
+     */
+    public function getDiConfig()
+    {
+        return new ConfigTesting();
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/ConfigTesting.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/ConfigTesting.php
new file mode 100644
index 0000000000000000000000000000000000000000..328f9da0474bf8760297acfd47d5b7c5ecde9340
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Environment/ConfigTesting.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\ObjectManager\Environment;
+
+use Magento\Framework\Interception\ObjectManager\ConfigInterface;
+use Magento\Framework\ObjectManager\ConfigCacheInterface;
+use Magento\Framework\ObjectManager\RelationsInterface;
+
+class ConfigTesting implements ConfigInterface
+{
+
+    /**
+     * Set class relations
+     *
+     * @param RelationsInterface $relations
+     *
+     * @return void
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function setRelations(RelationsInterface $relations)
+    {
+        return;
+    }
+
+    /**
+     * Set configuration cache instance
+     *
+     * @param ConfigCacheInterface $cache
+     *
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function setCache(ConfigCacheInterface $cache)
+    {
+        return;
+    }
+
+    /**
+     * Retrieve list of arguments per type
+     *
+     * @param string $type
+     * @return array
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function getArguments($type)
+    {
+        return [];
+    }
+
+    /**
+     * Check whether type is shared
+     *
+     * @param string $type
+     * @return bool
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function isShared($type)
+    {
+        return true;
+    }
+
+    /**
+     * Retrieve instance type
+     *
+     * @param string $instanceName
+     * @return mixed
+     */
+    public function getInstanceType($instanceName)
+    {
+        return $instanceName;
+    }
+
+    /**
+     * Retrieve preference for type
+     *
+     * @param string $type
+     * @return string
+     * @throws \LogicException
+     */
+    public function getPreference($type)
+    {
+        return $type;
+    }
+
+    /**
+     * Returns list of virtual types
+     *
+     * @return array
+     */
+    public function getVirtualTypes()
+    {
+        return [];
+    }
+
+    /**
+     * Extend configuration
+     *
+     * @param array $configuration
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function extend(array $configuration)
+    {
+        return;
+    }
+
+    /**
+     * Returns list on preferences
+     *
+     * @return array
+     */
+    public function getPreferences()
+    {
+        return [];
+    }
+
+    /**
+     * Set Interception config
+     *
+     * @param \Magento\Framework\Interception\ConfigInterface $interceptionConfig
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function setInterceptionConfig(\Magento\Framework\Interception\ConfigInterface $interceptionConfig)
+    {
+        return;
+    }
+
+    /**
+     * Retrieve instance type without interception processing
+     *
+     * @param string $instanceName
+     * @return string
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function getOriginalInstanceType($instanceName)
+    {
+        return '';
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/CompiledTest.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/CompiledTest.php
index 9714034087b5ce84fae284f6dd6ba7f8bcd3845e..e7240354fe3eae17a6b088afff1e3e9688d324ae 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/CompiledTest.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/CompiledTest.php
@@ -23,16 +23,14 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     protected $config;
 
     /**
-     * Definition list
-     *
-     * @var \Magento\Framework\ObjectManager\DefinitionInterface | \PHPUnit_Framework_MockObject_MockObject
+     * @var Compiled
      */
-    protected $definitions;
+    protected $factory;
 
     /**
-     * @var Compiled
+     * @var array
      */
-    protected $factory;
+    private $sharedInstances;
 
     public function setUp()
     {
@@ -44,36 +42,39 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMock();
 
-        $this->definitions = $this->getMockBuilder('Magento\Framework\ObjectManager\DefinitionInterface')
-            ->setMethods([])
-            ->getMock();
-
-        $this->factory = new Compiled($this->config, $this->objectManager, $this->definitions, []);
+        $this->sharedInstances = [];
+        $this->factory = new Compiled($this->config, $this->sharedInstances, []);
+        $this->factory->setObjectManager($this->objectManager);
     }
 
     public function testCreateSimple()
     {
         $expectedConfig = $this->getSimpleConfig();
 
-        $requestedType = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\SimpleClassTesting';
+        $requestedType = 'requestedType';
+        $type = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\SimpleClassTesting';
+        $sharedType = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencySharedTesting';
+        $nonSharedType = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencyTesting';
 
-        $this->config->expects($this->once())
-            ->method('getInstanceType')
-            ->with($requestedType)
-            ->willReturn($requestedType);
-        $this->config->expects($this->once())
+        $this->config->expects($this->any())
             ->method('getArguments')
-            ->with($requestedType)
-            ->willReturn($expectedConfig);
-
-        $this->objectManager->expects($this->once())
-            ->method('create')
-            ->with('Dependency\StdClass')
-            ->willReturn(new \StdClass);
-        $this->objectManager->expects($this->once())
-            ->method('get')
-            ->with('Dependency\Shared\StdClass')
-            ->willReturn(new \StdClass);
+            ->willReturnMap(
+                [
+                    [$requestedType, $expectedConfig],
+                    [$sharedType, null],
+                    [$nonSharedType, null]
+                ]
+            );
+        $this->config->expects($this->any())
+            ->method('getInstanceType')
+            ->willReturnMap(
+                [
+                    [$requestedType, $type],
+                    [$sharedType, $sharedType],
+                    [$nonSharedType, $nonSharedType]
+                ]
+            );
+
         $this->factory->setArguments(
             [
                 'globalValue' => 'GLOBAL_ARGUMENT',
@@ -87,8 +88,8 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\SimpleClassTesting',
             $result
         );
-        $this->assertInstanceOf('StdClass', $result->getSharedDependency());
-        $this->assertInstanceOf('StdClass', $result->getNonSharedDependency());
+        $this->assertInstanceOf($sharedType, $result->getSharedDependency());
+        $this->assertInstanceOf($nonSharedType, $result->getNonSharedDependency());
         $this->assertEquals('value', $result->getValue());
         $this->assertEquals(['default_value1', 'default_value2'], $result->getValueArray());
         $this->assertEquals('GLOBAL_ARGUMENT', $result->getGlobalValue());
@@ -99,25 +100,30 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     {
         $expectedConfig = $this->getSimpleNestedConfig();
 
-        $requestedType = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\SimpleClassTesting';
+        $type = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\SimpleClassTesting';
+        $requestedType = 'requestedType';
+        $sharedType = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencySharedTesting';
+        $nonSharedType = 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencyTesting';
 
-        $this->config->expects($this->once())
-            ->method('getInstanceType')
-            ->with($requestedType)
-            ->willReturn($requestedType);
-        $this->config->expects($this->once())
+        $this->config->expects($this->any())
             ->method('getArguments')
-            ->with($requestedType)
-            ->willReturn($expectedConfig);
-
-        $this->objectManager->expects($this->exactly(2))
-            ->method('create')
-            ->with('Dependency\StdClass')
-            ->willReturn(new \StdClass);
-        $this->objectManager->expects($this->exactly(2))
-            ->method('get')
-            ->with('Dependency\Shared\StdClass')
-            ->willReturn(new \StdClass);
+            ->willReturnMap(
+                [
+                    [$requestedType, $expectedConfig],
+                    [$sharedType, null],
+                    [$nonSharedType, null]
+                ]
+            );
+        $this->config->expects($this->any())
+            ->method('getInstanceType')
+            ->willReturnMap(
+                [
+                    [$requestedType, $type],
+                    [$sharedType, $sharedType],
+                    [$nonSharedType, $nonSharedType]
+                ]
+            );
+
         $this->factory->setArguments(
             [
                 'array_global_existing_argument' => 'GLOBAL_ARGUMENT',
@@ -132,16 +138,16 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\SimpleClassTesting',
             $result
         );
-        $this->assertInstanceOf('StdClass', $result->getSharedDependency());
-        $this->assertInstanceOf('StdClass', $result->getNonSharedDependency());
+        $this->assertInstanceOf($sharedType, $result->getSharedDependency());
+        $this->assertInstanceOf($nonSharedType, $result->getNonSharedDependency());
         $this->assertEquals('value', $result->getValue());
         $this->assertEquals(
             [
                 'array_value' => 'value',
-                'array_configured_instance' => new \StdClass,
+                'array_configured_instance' => new $sharedType,
                 'array_configured_array' => [
                     'array_array_value' => 'value',
-                    'array_array_configured_instance' => new \StdClass,
+                    'array_array_configured_instance' => new $nonSharedType,
                 ],
                 'array_global_argument' => null,
                 'array_global_existing_argument' => 'GLOBAL_ARGUMENT',
@@ -162,10 +168,10 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'nonSharedDependency' => [
-                '_ins_' => 'Dependency\StdClass',
+                '_ins_' => 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencyTesting',
             ],
             'sharedDependency' => [
-                '_i_' => 'Dependency\Shared\StdClass',
+                '_i_' => 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencySharedTesting',
             ],
             'value' => [
                 '_v_' => 'value',
@@ -192,10 +198,10 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'nonSharedDependency' => [
-                '_ins_' => 'Dependency\StdClass',
+                '_ins_' => 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencyTesting',
             ],
             'sharedDependency' => [
-                '_i_' => 'Dependency\Shared\StdClass',
+                '_i_' => 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencySharedTesting',
             ],
             'value' => [
                 '_v_' => 'value',
@@ -204,12 +210,12 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
                 '_vac_' => [
                     'array_value' => 'value',
                     'array_configured_instance' => [
-                        '_i_' => 'Dependency\Shared\StdClass',
+                        '_i_' => 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencySharedTesting',
                     ],
                     'array_configured_array' => [
                         'array_array_value' => 'value',
                         'array_array_configured_instance' => [
-                            '_ins_' => 'Dependency\StdClass',
+                            '_ins_' => 'Magento\Framework\ObjectManager\Factory\Fixture\Compiled\DependencyTesting',
                         ],
                     ],
                     'array_global_argument' => [
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/DependencySharedTesting.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/DependencySharedTesting.php
new file mode 100644
index 0000000000000000000000000000000000000000..364f0a1ffb2ef9bf154b2325c376c036577a47a5
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/DependencySharedTesting.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\ObjectManager\Factory\Fixture\Compiled;
+
+class DependencySharedTesting
+{
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/DependencyTesting.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/DependencyTesting.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c9e25a508d88add99ba471506d84d2cdd6a4e84
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/DependencyTesting.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\ObjectManager\Factory\Fixture\Compiled;
+
+class DependencyTesting
+{
+}
diff --git a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/SimpleClassTesting.php b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/SimpleClassTesting.php
index feff51b14d2ff8f5ccc40340125587d049d1c214..c839932f11f3acd5eb8ded34e57ab6a7ef6dbd15 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/SimpleClassTesting.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Factory/Fixture/Compiled/SimpleClassTesting.php
@@ -3,18 +3,17 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
 namespace Magento\Framework\ObjectManager\Factory\Fixture\Compiled;
 
 class SimpleClassTesting
 {
     /**
-     * @var \StdClass
+     * @var DependencyTesting
      */
     private $nonSharedDependency;
 
     /**
-     * @var \StdClass
+     * @var DependencySharedTesting
      */
     private $sharedDependency;
 
@@ -39,16 +38,16 @@ class SimpleClassTesting
     private $nullValue;
 
     /**
-     * @param \StdClass $nonSharedDependency
-     * @param \StdClass $sharedDependency
+     * @param DependencyTesting $nonSharedDependency
+     * @param DependencySharedTesting $sharedDependency
      * @param string $value
      * @param array $valueArray
      * @param string $globalValue
      * @param null $nullValue
      */
     public function __construct(
-        \StdClass $nonSharedDependency,
-        \StdClass $sharedDependency,
+        DependencyTesting $nonSharedDependency,
+        DependencySharedTesting $sharedDependency,
         $value = 'value',
         array $valueArray = [
         'default_value1',
@@ -83,7 +82,7 @@ class SimpleClassTesting
     }
 
     /**
-     * @return \StdClass
+     * @return DependencyTesting
      */
     public function getNonSharedDependency()
     {
@@ -91,7 +90,7 @@ class SimpleClassTesting
     }
 
     /**
-     * @return \StdClass
+     * @return DependencySharedTesting
      */
     public function getSharedDependency()
     {
diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Asset/PreProcessor/ChainTest.php b/dev/tests/unit/testsuite/Magento/Framework/View/Asset/PreProcessor/ChainTest.php
index c63c4c050c46c262bf515906fc6db5c93f03b8de..f2766d32787780fd9b4de802c4c8fc8e62d0ac98 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/View/Asset/PreProcessor/ChainTest.php
+++ b/dev/tests/unit/testsuite/Magento/Framework/View/Asset/PreProcessor/ChainTest.php
@@ -6,6 +6,11 @@
 
 namespace Magento\Framework\View\Asset\PreProcessor;
 
+/**
+ * Class ChainTest
+ *
+ * @package Magento\Framework\View\Asset\PreProcessor
+ */
 class ChainTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -83,4 +88,46 @@ class ChainTest extends \PHPUnit_Framework_TestCase
             ['anotherContent', 'anotherType', true],
         ];
     }
+
+    public function testChainTargetAssetPathNonDevMode()
+    {
+        $assetPath = 'assetPath';
+        $origPath = 'origPath';
+
+        $this->asset = $this->getMockForAbstractClass('\Magento\Framework\View\Asset\LocalInterface');
+        $this->asset->expects($this->once())
+            ->method('getContentType')
+            ->will($this->returnValue('assetType'));
+        $this->asset->expects($this->once())
+            ->method('getPath')
+            ->will($this->returnValue($assetPath));
+        $this->object = new Chain($this->asset, 'origContent', 'origType', $origPath);
+
+        $this->assertSame($this->object->getTargetAssetPath(), $assetPath);
+        $this->assertNotSame($this->object->getTargetAssetPath(), $origPath);
+    }
+
+    public function testChainTargetAssetPathDevMode()
+    {
+        $assetPath = 'assetPath';
+        $origPath = 'origPath';
+
+        $this->asset = $this->getMockForAbstractClass('\Magento\Framework\View\Asset\LocalInterface');
+        $this->asset->expects($this->once())
+            ->method('getContentType')
+            ->will($this->returnValue('assetType'));
+        $this->asset->expects($this->once())
+            ->method('getPath')
+            ->will($this->returnValue($assetPath));
+        $this->object = new Chain(
+            $this->asset,
+            'origContent',
+            'origType',
+            $origPath,
+            \Magento\Framework\App\State::MODE_DEVELOPER
+        );
+
+        $this->assertSame($this->object->getTargetAssetPath(), $origPath);
+        $this->assertNotSame($this->object->getTargetAssetPath(), $assetPath);
+    }
 }
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/App/CompilerTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/App/CompilerTest.php
index 9bd541f8d1dfa4cf0b796dcfadd25a5deb6c3fe9..be07af2814105307ce24135669429471d324ed67 100644
--- a/dev/tests/unit/testsuite/Magento/Tools/Di/App/CompilerTest.php
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/App/CompilerTest.php
@@ -106,7 +106,19 @@ class CompilerTest extends \PHPUnit_Framework_TestCase
                         'Magento\Tools\Di\Compiler\Config\Writer\Filesystem',
                     'Magento\Tools\Di\Compiler\Log\Writer\WriterInterface' =>
                         'Magento\Tools\Di\Compiler\Log\Writer\Console'
+                ],
+            'Magento\Tools\Di\Compiler\Config\ModificationChain' => [
+                'arguments' => [
+                    'modificationsList' => [
+                        'PreferencesResolving' =>
+                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving'],
+                        'BackslashTrim' =>
+                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\BackslashTrim'],
+                        'ArgumentsSerialization' =>
+                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\ArgumentsSerialization'],
+                    ]
                 ]
+            ]
         ];
     }
 
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/App/Task/AreaTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/App/Task/AreaTest.php
index 54d76607d066c3658b690ff0afa38e1e3d9f7d65..7a52b862af94cd5c55071c6a2b7696bfbc3189b4 100644
--- a/dev/tests/unit/testsuite/Magento/Tools/Di/App/Task/AreaTest.php
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/App/Task/AreaTest.php
@@ -33,6 +33,11 @@ class AreaTest extends \PHPUnit_Framework_TestCase
      */
     private $configWriterMock;
 
+    /**
+     * @var \Magento\Tools\Di\Compiler\Config\ModificationChain | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $configChain;
+
     protected function setUp()
     {
         $this->areaListMock = $this->getMockBuilder('Magento\Framework\App\AreaList')
@@ -47,6 +52,9 @@ class AreaTest extends \PHPUnit_Framework_TestCase
         $this->configWriterMock = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\WriterInterface')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->configChain = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationChain')
+            ->disableOriginalConstructor()
+            ->getMock();
     }
 
     public function testDoOperationEmptyPath()
@@ -55,7 +63,8 @@ class AreaTest extends \PHPUnit_Framework_TestCase
             $this->areaListMock,
             $this->areaInstancesNamesList,
             $this->configReaderMock,
-            $this->configWriterMock
+            $this->configWriterMock,
+            $this->configChain
         );
 
         $this->assertNull($areaOperation->doOperation());
@@ -64,19 +73,19 @@ class AreaTest extends \PHPUnit_Framework_TestCase
     public function testDoOperationGlobalArea()
     {
         $path = 'path/to/codebase/';
+        $arguments = ['class' => []];
         $generatedConfig = [
-            'arguments' => [],
-            'nonShared' => [],
+            'arguments' => $arguments,
             'preferences' => [],
             'instanceTypes' => []
         ];
-        $definitions = new DefinitionsCollection();
-        $definitions->addDefinition('class', []);
+
         $areaOperation = new Area(
             $this->areaListMock,
             $this->areaInstancesNamesList,
             $this->configReaderMock,
             $this->configWriterMock,
+            $this->configChain,
             [$path]
         );
 
@@ -86,7 +95,7 @@ class AreaTest extends \PHPUnit_Framework_TestCase
         $this->areaInstancesNamesList->expects($this->once())
             ->method('getList')
             ->with($path)
-            ->willReturn(['class' => []]);
+            ->willReturn($arguments);
         $this->configReaderMock->expects($this->once())
             ->method('generateCachePerScope')
             ->with(
@@ -94,6 +103,11 @@ class AreaTest extends \PHPUnit_Framework_TestCase
                 App\Area::AREA_GLOBAL
             )
             ->willReturn($generatedConfig);
+        $this->configChain->expects($this->once())
+            ->method('modify')
+            ->with($generatedConfig)
+            ->willReturn($generatedConfig);
+
         $this->configWriterMock->expects($this->once())
             ->method('write')
             ->with(
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1cb38007890eff5f700e50a8bb7b17b2868ffbe7
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config\Chain;
+
+class ArgumentsSerializationTest extends \PHPUnit_Framework_TestCase
+{
+    public function testModifyArgumentsDoNotExist()
+    {
+        $inputConfig = [
+            'data' => []
+        ];
+        $modifier = new ArgumentsSerialization();
+        $this->assertSame($inputConfig, $modifier->modify($inputConfig));
+    }
+
+    public function testModifyArguments()
+    {
+        $inputConfig = [
+            'arguments' => [
+                'argument1' => [],
+                'argument2' => null,
+            ]
+        ];
+
+        $expected = [
+            'arguments' => [
+                'argument1' => serialize([]),
+                'argument2' => null,
+            ]
+        ];
+
+        $modifier = new ArgumentsSerialization();
+        $this->assertEquals($expected, $modifier->modify($inputConfig));
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrimTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrimTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f61ef4ad03b7be6dd21307cc16dc411717dde99f
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrimTest.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config\Chain;
+
+class BackslashTrimTest extends \PHPUnit_Framework_TestCase
+{
+    public function testModifyArgumentsDoNotExist()
+    {
+        $inputConfig = [
+            'data' => []
+        ];
+        $modifier = new BackslashTrim();
+        $this->assertSame($inputConfig, $modifier->modify($inputConfig));
+    }
+
+    public function testModifyArguments()
+    {
+        $modifier = new BackslashTrim();
+        $this->assertEquals($this->getOutputConfig(), $modifier->modify($this->getInputConfig()));
+    }
+
+    /**
+     * Input config
+     *
+     * @return array
+     */
+    private function getInputConfig()
+    {
+        return [
+            'arguments' => [
+                '\\Class' => [
+                    'argument_type' => ['_i_' => '\\Class\\Dependency'],
+                    'argument_not_shared' => ['_ins_' => '\\Class\\Dependency'],
+                    'array' => [
+                        'argument_type' => ['_i_' => '\\Class\\Dependency'],
+                        'argument_not_shared' => ['_ins_' => '\\Class\\Dependency'],
+                        'array' => [
+                            'argument_type' => ['_i_' => '\\Class\\Dependency'],
+                            'argument_not_shared' => ['_ins_' => '\\Class\\Dependency'],
+                        ]
+                    ]
+                ]
+            ]
+        ];
+    }
+
+    /**
+     * Output config
+     *
+     * @return array
+     */
+    private function getOutputConfig()
+    {
+        return [
+            'arguments' => [
+                'Class' => [
+                    'argument_type' => ['_i_' => 'Class\\Dependency'],
+                    'argument_not_shared' => ['_ins_' => 'Class\\Dependency'],
+                    'array' => [
+                        'argument_type' => ['_i_' => 'Class\\Dependency'],
+                        'argument_not_shared' => ['_ins_' => 'Class\\Dependency'],
+                        'array' => [
+                            'argument_type' => ['_i_' => 'Class\\Dependency'],
+                            'argument_not_shared' => ['_ins_' => 'Class\\Dependency'],
+                        ]
+                    ]
+                ]
+            ]
+        ];
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolvingTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolvingTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..773809d3902beacd33efa9981afd5eea67fa510e
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolvingTest.php
@@ -0,0 +1,180 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config\Chain;
+
+class PreferencesResolvingTest extends \PHPUnit_Framework_TestCase
+{
+    public function testEmptyConfigModify()
+    {
+        $inputConfig = [
+            'data' => []
+        ];
+
+        $modification = new PreferencesResolving();
+        $this->assertSame($inputConfig, $modification->modify($inputConfig));
+    }
+
+    public function testPreferencesResolvingModify()
+    {
+        $inputConfig = [
+            'arguments' => $this->getInputArguments(),
+            'preferences' => $this->getPreferences()
+        ];
+        $outputConfig = [
+            'arguments' => $this->getOutputArguments(),
+            'preferences' => $this->getPreferences()
+        ];
+
+        $modification = new PreferencesResolving();
+        $this->assertEquals($outputConfig, $modification->modify($inputConfig));
+    }
+
+    /**
+     * @return array
+     */
+    private function getInputArguments()
+    {
+        return [
+            'SimpleClass' => [
+                'type_dependency' => [
+                    '_ins_' => 'Type\DependencyInterface',
+                ],
+                'type_dependency_shared' => [
+                    '_i_' => 'Type\Dependency\SharedInterface',
+                ],
+                'value' => [
+                    '_v_' => 'value',
+                ],
+                'value_array' => [
+                    '_v_' => ['default_value1', 'default_value2'],
+                ],
+                'value_null' => [
+                    '_vn_' => true,
+                ],
+            ],
+            'ComplexClass' => [
+                'type_dependency_configured' => [
+                    '_ins_' => 'Type\Dependency\ConfiguredInterface',
+                ],
+                'type_dependency_shared_configured' => [
+                    '_i_' => 'Type\Dependency\Shared\Configured',
+                ],
+                'global_argument' => [
+                    '_a_' => 'global_argument_configured',
+                    '_d_' => null
+                ],
+                'global_argument_def' => [
+                    '_a_' => 'global_argument_configured',
+                    '_d_' => []
+                ],
+                'value_configured' => [
+                    '_v_' => 'value_configured',
+                ],
+                'value_array_configured' => [
+                    '_vac_' => [
+                        'array_value' => 'value',
+                        'array_configured_instance' => [
+                            '_i_' => 'Type\Dependency\Shared\ConfiguredInterface',
+                        ],
+                        'array_configured_array' => [
+                            'array_array_value' => 'value',
+                            'array_array_configured_instance' => [
+                                '_ins_' => 'Type\Dependency\Shared\Configured',
+                            ],
+                        ],
+                        'array_global_argument' => [
+                            '_a_' => 'global_argument_configured',
+                            '_d_' => null
+                        ]
+                    ],
+                ],
+                'value_null' => [
+                    '_vn_' => true,
+                ],
+            ]
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    private function getOutputArguments()
+    {
+        return [
+            'SimpleClass' => [
+                'type_dependency' => [
+                    '_ins_' => 'Type\Dependency',
+                ],
+                'type_dependency_shared' => [
+                    '_i_' => 'Type\Dependency\Shared',
+                ],
+                'value' => [
+                    '_v_' => 'value',
+                ],
+                'value_array' => [
+                    '_v_' => ['default_value1', 'default_value2'],
+                ],
+                'value_null' => [
+                    '_vn_' => true,
+                ],
+            ],
+            'ComplexClass' => [
+                'type_dependency_configured' => [
+                    '_ins_' => 'Type\Dependency\Configured',
+                ],
+                'type_dependency_shared_configured' => [
+                    '_i_' => 'Type\Dependency\Shared\Configured',
+                ],
+                'global_argument' => [
+                    '_a_' => 'global_argument_configured',
+                    '_d_' => null
+                ],
+                'global_argument_def' => [
+                    '_a_' => 'global_argument_configured',
+                    '_d_' => []
+                ],
+                'value_configured' => [
+                    '_v_' => 'value_configured',
+                ],
+                'value_array_configured' => [
+                    '_vac_' => [
+                        'array_value' => 'value',
+                        'array_configured_instance' => [
+                            '_i_' => 'Type\Dependency\Shared\Configured',
+                        ],
+                        'array_configured_array' => [
+                            'array_array_value' => 'value',
+                            'array_array_configured_instance' => [
+                                '_ins_' => 'Type\Dependency\Shared\Configured',
+                            ],
+                        ],
+                        'array_global_argument' => [
+                            '_a_' => 'global_argument_configured',
+                            '_d_' => null
+                        ]
+                    ],
+                ],
+                'value_null' => [
+                    '_vn_' => true,
+                ],
+            ]
+        ];
+    }
+
+    /**
+     * @return array
+     */
+    private function getPreferences()
+    {
+        return [
+            'Type\DependencyInterface' => 'Type\Dependency',
+            'Type\Dependency\SharedInterface' => 'Type\Dependency\Shared',
+            'Type\Dependency\ConfiguredInterface' => 'Type\Dependency\Configured',
+            'Type\Dependency\Shared\ConfiguredInterface' => 'Type\Dependency\Shared\Configured',
+        ];
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ModificationChainTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ModificationChainTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..18c6487689d5799ee9ca3fa21a11d3d1104da812
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ModificationChainTest.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config;
+
+class ModificationChainTest extends \PHPUnit_Framework_TestCase
+{
+    public function testConstructor()
+    {
+        $modificationsList = [];
+        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+            ->getMock();
+        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+            ->getMock();
+
+        new ModificationChain($modificationsList);
+    }
+
+    public function testConstructorException()
+    {
+        $this->setExpectedException('InvalidArgumentException', 'Wrong modifier provided');
+        $modificationsList = [];
+        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+            ->getMock();
+        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+            ->getMock();
+        $modificationsList[] = 'banana';
+
+        new ModificationChain($modificationsList);
+    }
+
+    public function testModify()
+    {
+        $inputArray = [
+            'data' => [1, 2, 3]
+        ];
+
+        $expectedArray1 = [
+            'data' => [1, 2, 3, 1]
+        ];
+
+        $expectedArray2 = [
+            'data' => [1, 2, 3, 1, 1]
+        ];
+
+        $modifier1 = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+            ->getMock();
+        $modifier2 = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+            ->getMock();
+
+        $modificationsList = [$modifier1, $modifier2];
+
+        $modifier1->expects($this->once())
+            ->method('modify')
+            ->with($inputArray)
+            ->willReturn($expectedArray1);
+
+        $modifier2->expects($this->once())
+            ->method('modify')
+            ->with($expectedArray1)
+            ->willReturn($expectedArray2);
+
+        $chain = new ModificationChain($modificationsList);
+
+        $this->assertEquals($expectedArray2, $chain->modify($inputArray));
+    }
+}
diff --git a/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ReaderTest.php b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ReaderTest.php
index 0c2f708332fec2697a4d8bd833bf0b8a874bd5dd..4ca7ad40941250a323eeb3b7fb673fbf8b87bc67 100644
--- a/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ReaderTest.php
+++ b/dev/tests/unit/testsuite/Magento/Tools/Di/Compiler/Config/ReaderTest.php
@@ -97,10 +97,6 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
             ->method('getInstanceType')
             ->willReturnMap($this->getInstanceTypeMap($this->getVirtualTypes()));
 
-        $this->diContainerConfig->expects($this->any())
-            ->method('isShared')
-            ->willReturnMap($this->getExpectedNonShared());
-
         $this->diContainerConfig->expects($this->any())
             ->method('getPreference')
             ->willReturnMap($this->getPreferencesMap());
@@ -138,13 +134,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'arguments' => [
-                'ConcreteType1' => serialize(['resolved_argument1', 'resolved_argument2']),
-                'ConcreteType2' => serialize(['resolved_argument1', 'resolved_argument2']),
-                'virtualType1' => serialize(['resolved_argument1', 'resolved_argument2'])
-            ],
-            'nonShared' => [
-                'ConcreteType2' => true,
-                'ThirdPartyInterface' => true
+                'ConcreteType1' => ['resolved_argument1', 'resolved_argument2'],
+                'ConcreteType2' => ['resolved_argument1', 'resolved_argument2'],
+                'virtualType1' => ['resolved_argument1', 'resolved_argument2']
             ],
             'preferences' => $this->getPreferences(),
             'instanceTypes' => $this->getVirtualTypes(),
@@ -172,19 +164,6 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         return ['virtualType1' => 'ConcreteType1'];
     }
 
-    /**
-     * @return array
-     */
-    private function getExpectedNonShared()
-    {
-        return [
-            ['ConcreteType1', true],
-            ['ConcreteType2', false],
-            ['Interface1', true],
-            ['ThirdPartyInterface', false]
-        ];
-    }
-
     /**
      * @return array
      */
diff --git a/dev/tools/Magento/Tools/Di/App/Compiler.php b/dev/tools/Magento/Tools/Di/App/Compiler.php
index bbb2ab1e0de67048010ae73decea2ce547b6e3e0..1c266051fdc1874ef564a30ca59562136ce97ce3 100644
--- a/dev/tools/Magento/Tools/Di/App/Compiler.php
+++ b/dev/tools/Magento/Tools/Di/App/Compiler.php
@@ -62,6 +62,18 @@ class Compiler implements \Magento\Framework\AppInterface
                         'Magento\Tools\Di\Compiler\Config\Writer\Filesystem',
                     'Magento\Tools\Di\Compiler\Log\Writer\WriterInterface' =>
                         'Magento\Tools\Di\Compiler\Log\Writer\Console'
+                ],
+                'Magento\Tools\Di\Compiler\Config\ModificationChain' => [
+                    'arguments' => [
+                        'modificationsList' => [
+                            'PreferencesResolving' =>
+                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving'],
+                            'BackslashTrim' =>
+                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\BackslashTrim'],
+                            'ArgumentsSerialization' =>
+                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\ArgumentsSerialization'],
+                        ]
+                    ]
                 ]
             ]
         );
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php b/dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php
index fd6107202bbf535bacbc8a3cdc1b3359925d7c90..3639bd996da8a0cfe29bdc65551b41f9594ebd76 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php
+++ b/dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php
@@ -38,11 +38,17 @@ class Area implements OperationInterface
      */
     private $data = [];
 
+    /**
+     * @var \Magento\Tools\Di\Compiler\Config\ModificationChain
+     */
+    private $modificationChain;
+
     /**
      * @param App\AreaList $areaList
-     * @param \Magento\Tools\Di\Code\Reader\InstancesNamesList\Area $instancesNamesList
+     * @param \Magento\Tools\Di\Code\Reader\InstancesNamesList\Area $areaInstancesNamesList
      * @param Config\Reader $configReader
      * @param Config\WriterInterface $configWriter
+     * @param \Magento\Tools\Di\Compiler\Config\ModificationChain $modificationChain
      * @param array $data
      */
     public function __construct(
@@ -50,6 +56,7 @@ class Area implements OperationInterface
         \Magento\Tools\Di\Code\Reader\InstancesNamesList\Area $areaInstancesNamesList,
         Config\Reader $configReader,
         Config\WriterInterface $configWriter,
+        Config\ModificationChain $modificationChain,
         $data = []
     ) {
         $this->areaList = $areaList;
@@ -57,6 +64,7 @@ class Area implements OperationInterface
         $this->configReader = $configReader;
         $this->configWriter = $configWriter;
         $this->data = $data;
+        $this->modificationChain = $modificationChain;
     }
 
     /**
@@ -75,9 +83,12 @@ class Area implements OperationInterface
 
         $areaCodes = array_merge([App\Area::AREA_GLOBAL], $this->areaList->getCodes());
         foreach ($areaCodes as $areaCode) {
+            $config = $this->configReader->generateCachePerScope($definitionsCollection, $areaCode);
+            $config = $this->modificationChain->modify($config);
+
             $this->configWriter->write(
                 $areaCode,
-                $this->configReader->generateCachePerScope($definitionsCollection, $areaCode)
+                $config
             );
         }
     }
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerialization.php b/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerialization.php
new file mode 100644
index 0000000000000000000000000000000000000000..c19d07de807bb5b742ee0a0f12fce7001a917522
--- /dev/null
+++ b/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerialization.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config\Chain;
+
+use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+
+class ArgumentsSerialization implements ModificationInterface
+{
+    /**
+     * Modifies input config
+     *
+     * @param array $config
+     * @return array
+     */
+    public function modify(array $config)
+    {
+        if (!isset($config['arguments'])) {
+            return $config;
+        }
+
+        foreach ($config['arguments'] as $key => $value) {
+            if ($value !== null) {
+                $config['arguments'][$key] = serialize($value);
+            }
+        }
+
+        return $config;
+    }
+}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrim.php b/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrim.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7500e4fb0cacd34e051dcd847cccb7b321c1f7e
--- /dev/null
+++ b/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrim.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config\Chain;
+
+use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+
+class BackslashTrim implements ModificationInterface
+{
+    /**
+     * Modifies input config
+     *
+     * @param array $config
+     * @return array
+     */
+    public function modify(array $config)
+    {
+        if (!isset($config['arguments'])) {
+            return $config;
+        }
+
+        $config['arguments'] = $this->resolveInstancesNames($config['arguments']);
+        $this->resolveArguments($config['arguments']);
+
+        return $config;
+    }
+
+    /**
+     * Resolves instances names
+     *
+     * @param array $arguments
+     * @return array
+     */
+    private function resolveInstancesNames(array $arguments)
+    {
+        $resolvedInstances = [];
+        foreach ($arguments as $instance => $constructor) {
+            $resolvedInstances[ltrim($instance, '\\')] = $constructor;
+        }
+
+        return $resolvedInstances;
+    }
+
+    /**
+     * Resolves instances arguments
+     *
+     * @param array $argument
+     * @return array
+     */
+    private function resolveArguments(&$argument)
+    {
+        if (!is_array($argument)) {
+            return;
+        }
+
+        foreach ($argument as $key => &$value) {
+            if (in_array($key, ['_i_', '_ins_'])) {
+                $value = ltrim($value, '\\');
+                continue;
+            }
+
+            if (is_array($value)) {
+                $this->resolveArguments($value);
+            }
+        }
+        return;
+    }
+}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolving.php b/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolving.php
new file mode 100644
index 0000000000000000000000000000000000000000..3600ea3ea8360b1a24e569e6131cb73c99f78d52
--- /dev/null
+++ b/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolving.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config\Chain;
+
+use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+
+class PreferencesResolving implements ModificationInterface
+{
+    /**
+     * Modifies input config
+     *
+     * @param array $config
+     * @return array
+     */
+    public function modify(array $config)
+    {
+        if (!isset($config['arguments']) || !isset($config['preferences'])) {
+            return $config;
+        }
+
+        $this->resolvePreferences($config['arguments'], $config['preferences']);
+
+        return $config;
+    }
+
+    /**
+     * Replaces interfaces to their concrete implementations in scope of current config
+     *
+     * @param array $argument
+     * @param array $preferences
+     * @return array
+     */
+    private function resolvePreferences(&$argument, &$preferences)
+    {
+        if (!is_array($argument)) {
+            return;
+        }
+
+        foreach ($argument as $key => &$value) {
+            if (in_array($key, ['_i_', '_ins_'])) {
+                $value = isset($preferences[$value]) ? $preferences[$value] : $value;
+                continue;
+            }
+
+            if (is_array($value)) {
+                $this->resolvePreferences($value, $preferences);
+            }
+        }
+        return;
+    }
+}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationChain.php b/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationChain.php
new file mode 100644
index 0000000000000000000000000000000000000000..fcdec2563e9ade96276b5e6e030bd5db2f74fe6d
--- /dev/null
+++ b/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationChain.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config;
+
+class ModificationChain implements ModificationInterface
+{
+    /**
+     * @var ModificationInterface[]
+     */
+    private $modificationsList;
+
+    /**
+     * @param array $modificationsList
+     */
+    public function __construct(array $modificationsList = [])
+    {
+        array_walk(
+            $modificationsList,
+            function ($modification) {
+                if (!$modification instanceof ModificationInterface) {
+                    throw new \InvalidArgumentException('Wrong modifier provided');
+                }
+            }
+        );
+        $this->modificationsList = $modificationsList;
+    }
+
+
+    /**
+     * Modifies input config
+     *
+     * @param array $config
+     * @return array
+     */
+    public function modify(array $config)
+    {
+        $outputConfig = $config;
+        foreach ($this->modificationsList as $modification) {
+            $outputConfig = $modification->modify($outputConfig);
+        }
+        return $outputConfig;
+    }
+}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationInterface.php b/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..5e8f124bffef89ec316e3100585565e92dea6544
--- /dev/null
+++ b/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationInterface.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tools\Di\Compiler\Config;
+
+interface ModificationInterface
+{
+    /**
+     * Modifies input config
+     *
+     * @param array $config
+     * @return array
+     */
+    public function modify(array $config);
+}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php b/dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php
index f885f6fd12cd39318664c508c9d80c7c9a426a96..b143705afa34968f86859ab358643fc8b4c059ce 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php
+++ b/dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php
@@ -13,6 +13,11 @@ use Magento\Tools\Di\Code\Reader\Type;
 use Magento\Tools\Di\Compiler\ArgumentsResolverFactory;
 use Magento\Tools\Di\Definition\Collection as DefinitionsCollection;
 
+/**
+ * Class Reader
+ * @package Magento\Tools\Di\Compiler\Config
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class Reader
 {
     /**
@@ -82,16 +87,8 @@ class Reader
         
         $this->fillThirdPartyInterfaces($areaConfig, $definitionsCollection);
         $config['arguments'] = $this->getConfigForScope($definitionsCollection, $areaConfig);
-        foreach ($config['arguments'] as $key => $value) {
-            if ($value !== null) {
-                $config['arguments'][$key] = serialize($value);
-            }
-        }
 
         foreach ($definitionsCollection->getInstancesNamesList() as $instanceName) {
-            if (!$areaConfig->isShared($instanceName)) {
-                $config['nonShared'][$instanceName] = true;
-            }
             $preference = $areaConfig->getPreference($instanceName);
             if ($instanceName !== $preference) {
                 $config['preferences'][$instanceName] = $preference;
@@ -149,7 +146,6 @@ class Reader
      *
      * @param ConfigInterface $config
      * @param DefinitionsCollection $definitionsCollection
-     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      *
      * @return void
      */
@@ -157,7 +153,7 @@ class Reader
     {
         $definedInstances = $definitionsCollection->getInstancesNamesList();
 
-        foreach ($config->getPreferences() as $interface => $preference) {
+        foreach (array_keys($config->getPreferences()) as $interface) {
             if (in_array($interface, $definedInstances)) {
                 continue;
             }
diff --git a/dev/tools/Magento/Tools/View/Deployer.php b/dev/tools/Magento/Tools/View/Deployer.php
index c1b3922d3235ab6967c2acda0d376ae3e0d6f846..df51e9cbaa60a034abaa5ed5f724e86d4a7d1e81 100644
--- a/dev/tools/Magento/Tools/View/Deployer.php
+++ b/dev/tools/Magento/Tools/View/Deployer.php
@@ -9,6 +9,7 @@ namespace Magento\Tools\View;
 use Magento\Framework\App\ObjectManagerFactory;
 use Magento\Framework\App\View\Deployment\Version;
 use Magento\Framework\Test\Utility\Files;
+use Magento\Framework\App\View\Asset\Publisher;
 
 /**
  * A service for deploying Magento static view files for production mode
@@ -35,7 +36,7 @@ class Deployer
     /** @var \Magento\Framework\View\Asset\Repository */
     private $assetRepo;
 
-    /** @var \Magento\Framework\App\View\Asset\Publisher */
+    /** @var Publisher */
     private $assetPublisher;
 
     /** @var bool */
@@ -181,8 +182,10 @@ class Deployer
         $configLoader = $objectManager->get('Magento\Framework\App\ObjectManager\ConfigLoader');
         $objectManager->configure($configLoader->load($areaCode));
         $this->assetRepo = $objectManager->get('Magento\Framework\View\Asset\Repository');
-        $this->assetPublisher = $objectManager->get('Magento\Framework\App\View\Asset\Publisher');
+
+        $this->assetPublisher = $objectManager->create('Magento\Framework\App\View\Asset\Publisher');
         $this->htmlMinifier = $objectManager->get('Magento\Framework\View\Template\Html\MinifierInterface');
+
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/App/ObjectManager.php b/lib/internal/Magento/Framework/App/ObjectManager.php
index 194839ffab9c95455cd49045f0de811ba5206725..06d506a171b53026e434bddb9c2386c85768d3e2 100644
--- a/lib/internal/Magento/Framework/App/ObjectManager.php
+++ b/lib/internal/Magento/Framework/App/ObjectManager.php
@@ -53,7 +53,7 @@ class ObjectManager extends \Magento\Framework\ObjectManager\ObjectManager
     public function __construct(
         FactoryInterface $factory,
         \Magento\Framework\ObjectManager\ConfigInterface $config,
-        array $sharedInstances = []
+        array &$sharedInstances = []
     ) {
         parent::__construct($factory, $config, $sharedInstances);
         self::$_instance = $this;
diff --git a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php
index f6b1139be92ea1a22b8d7aacfb8b3309f213bc7b..1ebedf86043fd2307a83ac3f35830afeb1f8de5a 100644
--- a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php
+++ b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php
@@ -127,8 +127,6 @@ class ObjectManagerFactory
             }
         }
 
-        $this->factory = $env->getObjectManagerFactory($arguments);
-
         $sharedInstances = [
             'Magento\Framework\App\DeploymentConfig' => $deploymentConfig,
             'Magento\Framework\App\Filesystem\DirectoryList' => $this->directoryList,
@@ -144,6 +142,8 @@ class ObjectManagerFactory
             'Magento\Framework\App\ObjectManager\ConfigLoader' => $env->getObjectManagerConfigLoader(),
             $this->_configClassName => $diConfig,
         ];
+        $arguments['shared_instances'] = &$sharedInstances;
+        $this->factory = $env->getObjectManagerFactory($arguments);
 
         /** @var \Magento\Framework\ObjectManagerInterface $objectManager */
         $objectManager = new $this->_locatorClassName($this->factory, $diConfig, $sharedInstances);
diff --git a/lib/internal/Magento/Framework/App/StaticResource.php b/lib/internal/Magento/Framework/App/StaticResource.php
index b5fac360793f71a384bbde6de5c86227fcfcae79..45fe01dac839dc28c47816a70c27a085eb53fd86 100644
--- a/lib/internal/Magento/Framework/App/StaticResource.php
+++ b/lib/internal/Magento/Framework/App/StaticResource.php
@@ -30,7 +30,7 @@ class StaticResource implements \Magento\Framework\AppInterface
     private $request;
 
     /**
-     * @var \Magento\Framework\App\View\Asset\Publisher
+     * @var View\Asset\Publisher
      */
     private $publisher;
 
@@ -62,7 +62,7 @@ class StaticResource implements \Magento\Framework\AppInterface
      * @param State $state
      * @param Response\FileInterface $response
      * @param Request\Http $request
-     * @param \Magento\Framework\App\View\Asset\Publisher $publisher
+     * @param View\Asset\Publisher $publisher
      * @param \Magento\Framework\View\Asset\Repository $assetRepo
      * @param \Magento\Framework\Module\ModuleList $moduleList
      * @param \Magento\Framework\ObjectManagerInterface $objectManager
diff --git a/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Copy.php b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Copy.php
new file mode 100644
index 0000000000000000000000000000000000000000..13ad2ba8cbe827dfad95bbea52bfad114a2486a4
--- /dev/null
+++ b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Copy.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+use Magento\Framework\Filesystem\Directory\WriteInterface;
+use Magento\Framework\View\Asset;
+
+class Copy implements StrategyInterface
+{
+    /**
+     * Publish file
+     *
+     * @param WriteInterface $rootDir
+     * @param WriteInterface $targetDir
+     * @param string $sourcePath
+     * @param string $destinationPath
+     * @return bool
+     */
+    public function publishFile(
+        WriteInterface $rootDir,
+        WriteInterface $targetDir,
+        $sourcePath,
+        $destinationPath
+    ) {
+        return $rootDir->copyFile($sourcePath, $destinationPath, $targetDir);
+    }
+
+    /**
+     * Whether the strategy can be applied
+     *
+     * @param Asset\LocalInterface $asset
+     * @return bool
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function isSupported(Asset\LocalInterface $asset)
+    {
+        return true;
+    }
+}
diff --git a/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Factory.php b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Factory.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c2b663810ed8fe858c432c0af8f528f7935c926
--- /dev/null
+++ b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Factory.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+use Magento\Framework\ObjectManagerInterface;
+use Magento\Framework\View\Asset;
+
+class Factory
+{
+    /**
+     * Object Manager instance
+     *
+     * @var ObjectManagerInterface
+     */
+    protected $objectManager;
+
+    /**
+     * Strategies list
+     *
+     * @var array
+     */
+    protected $strategiesList;
+
+    /**
+     * Default strategy key
+     */
+    const DEFAULT_STRATEGY = 'Magento\Framework\App\View\Asset\MaterializationStrategy\Copy';
+
+    /**
+     * @param ObjectManagerInterface $objectManager
+     * @param StrategyInterface[] $strategiesList
+     */
+    public function __construct(ObjectManagerInterface $objectManager, $strategiesList = [])
+    {
+        $this->objectManager = $objectManager;
+        $this->strategiesList = $strategiesList;
+    }
+
+    /**
+     * Create materialization strategy basing on asset
+     *
+     * @param Asset\LocalInterface $asset
+     * @return StrategyInterface
+     *
+     * @throws \LogicException
+     */
+    public function create(Asset\LocalInterface $asset)
+    {
+        if (empty($this->strategiesList)) {
+            $this->strategiesList[] = $this->objectManager->get(self::DEFAULT_STRATEGY);
+        }
+
+        foreach ($this->strategiesList as $strategy) {
+            if ($strategy->isSupported($asset)) {
+                return $strategy;
+            }
+        }
+
+        throw new \LogicException('No materialization strategy is supported');
+    }
+}
diff --git a/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/StrategyInterface.php b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/StrategyInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..61dfd25c65b920f027adea07c2525d5f53b58dec
--- /dev/null
+++ b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/StrategyInterface.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+use Magento\Framework\Filesystem\Directory\WriteInterface;
+use Magento\Framework\View\Asset;
+
+interface StrategyInterface
+{
+    /**
+     * Publish file
+     *
+     * @param WriteInterface $rootDir
+     * @param WriteInterface $targetDir
+     * @param string $sourcePath
+     * @param string $destinationPath
+     * @return bool
+     */
+    public function publishFile(
+        WriteInterface $rootDir,
+        WriteInterface $targetDir,
+        $sourcePath,
+        $destinationPath
+    );
+
+    /**
+     * Whether the strategy can be applied
+     *
+     * @param Asset\LocalInterface $asset
+     * @return bool
+     */
+    public function isSupported(Asset\LocalInterface $asset);
+}
diff --git a/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Symlink.php b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Symlink.php
new file mode 100644
index 0000000000000000000000000000000000000000..05c9fc4e5fd4eecb068ad25b429940dae15e3b70
--- /dev/null
+++ b/lib/internal/Magento/Framework/App/View/Asset/MaterializationStrategy/Symlink.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\View\Asset\MaterializationStrategy;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Filesystem\Directory\WriteInterface;
+use Magento\Framework\View\Asset;
+
+class Symlink implements StrategyInterface
+{
+    /**
+     * Publish file
+     *
+     * @param WriteInterface $rootDir
+     * @param WriteInterface $targetDir
+     * @param string $sourcePath
+     * @param string $destinationPath
+     * @return bool
+     */
+    public function publishFile(
+        WriteInterface $rootDir,
+        WriteInterface $targetDir,
+        $sourcePath,
+        $destinationPath
+    ) {
+        return $rootDir->createSymlink($sourcePath, $destinationPath, $targetDir);
+    }
+
+    /**
+     * Whether the strategy can be applied
+     *
+     * @param Asset\LocalInterface $asset
+     * @return bool
+     */
+    public function isSupported(Asset\LocalInterface $asset)
+    {
+        $sourceParts = explode('/', $asset->getSourceFile());
+        if (in_array(DirectoryList::TMP_MATERIALIZATION_DIR, $sourceParts)) {
+            return false;
+        }
+
+        return true;
+    }
+}
diff --git a/lib/internal/Magento/Framework/App/View/Asset/Publisher.php b/lib/internal/Magento/Framework/App/View/Asset/Publisher.php
index c2f6609db8b4a113318d8cda73b18170a946dfb9..e65564720bb670f1f55ec8b03b343755d451f249 100644
--- a/lib/internal/Magento/Framework/App/View/Asset/Publisher.php
+++ b/lib/internal/Magento/Framework/App/View/Asset/Publisher.php
@@ -15,25 +15,25 @@ use Magento\Framework\View\Asset;
 class Publisher
 {
     /**
-     * @var \Magento\Framework\App\State
+     * @var \Magento\Framework\Filesystem
      */
-    protected $appState;
+    protected $filesystem;
 
     /**
-     * @var \Magento\Framework\Filesystem
+     * @var MaterializationStrategy\Factory
      */
-    protected $filesystem;
+    private $materializationStrategyFactory;
 
     /**
-     * @param \Magento\Framework\App\State $appState
      * @param \Magento\Framework\Filesystem $filesystem
+     * @param MaterializationStrategy\Factory $materializationStrategyFactory
      */
     public function __construct(
-        \Magento\Framework\App\State $appState,
-        \Magento\Framework\Filesystem $filesystem
+        \Magento\Framework\Filesystem $filesystem,
+        MaterializationStrategy\Factory $materializationStrategyFactory
     ) {
-        $this->appState = $appState;
         $this->filesystem = $filesystem;
+        $this->materializationStrategyFactory = $materializationStrategyFactory;
     }
 
     /**
@@ -41,13 +41,11 @@ class Publisher
      */
     public function publish(Asset\LocalInterface $asset)
     {
-        if ($this->appState->getMode() === \Magento\Framework\App\State::MODE_DEVELOPER) {
-            return false;
-        }
         $dir = $this->filesystem->getDirectoryRead(DirectoryList::STATIC_VIEW);
         if ($dir->isExist($asset->getPath())) {
             return true;
         }
+
         return $this->publishAsset($asset);
     }
 
@@ -59,10 +57,11 @@ class Publisher
      */
     private function publishAsset(Asset\LocalInterface $asset)
     {
-        $dir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
+        $targetDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
         $rootDir = $this->filesystem->getDirectoryWrite(DirectoryList::ROOT);
         $source = $rootDir->getRelativePath($asset->getSourceFile());
         $destination = $asset->getPath();
-        return $rootDir->copyFile($source, $destination, $dir);
+        $strategy = $this->materializationStrategyFactory->create($asset);
+        return $strategy->publishFile($rootDir, $targetDir, $source, $destination);
     }
 }
diff --git a/lib/internal/Magento/Framework/Code/Reader/SourceArgumentsReader.php b/lib/internal/Magento/Framework/Code/Reader/SourceArgumentsReader.php
index 29b48c744ba5ce72730faebe0cb820a8276da4a8..d6da2783824d3cbe8822dc9830319d6520cc721f 100644
--- a/lib/internal/Magento/Framework/Code/Reader/SourceArgumentsReader.php
+++ b/lib/internal/Magento/Framework/Code/Reader/SourceArgumentsReader.php
@@ -64,7 +64,8 @@ class SourceArgumentsReader
         }
         $arguments = explode(',', $arguments);
         foreach ($arguments as $key => &$argument) {
-            $argument = $this->removeDefaultValue($argument);
+            $argument = $this->removeToken($argument, '=');
+            $argument = $this->removeToken($argument, '&');
             $argument = $this->resolveNamespaces($argument, $availableNamespaces);
         }
         unset($argument);
@@ -102,11 +103,12 @@ class SourceArgumentsReader
      * Remove default value from argument.
      *
      * @param string $argument
+     * @param string $token
      * @return string
      */
-    protected function removeDefaultValue($argument)
+    protected function removeToken($argument, $token)
     {
-        $position = strpos($argument, '=');
+        $position = strpos($argument, $token);
         if (is_numeric($position)) {
             return substr($argument, 0, $position);
         }
diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/Write.php b/lib/internal/Magento/Framework/Filesystem/Directory/Write.php
index 18ff07a750e53fdcfad8d4af7cee94cf6d59507e..1f76bf8c6d61fdc7333adb7532cf3cb61600ebb1 100644
--- a/lib/internal/Magento/Framework/Filesystem/Directory/Write.php
+++ b/lib/internal/Magento/Framework/Filesystem/Directory/Write.php
@@ -129,6 +129,30 @@ class Write extends Read implements WriteInterface
         return $this->driver->copy($absolutePath, $absoluteDestination, $targetDirectory->driver);
     }
 
+    /**
+     * Creates symlink on a file and places it to destination
+     *
+     * @param string $path
+     * @param string $destination
+     * @param WriteInterface $targetDirectory [optional]
+     * @return bool
+     * @throws \Magento\Framework\Filesystem\FilesystemException
+     */
+    public function createSymlink($path, $destination, WriteInterface $targetDirectory = null)
+    {
+        $this->assertIsFile($path);
+
+        $targetDirectory = $targetDirectory ?: $this;
+        $parentDirectory = $this->driver->getParentDirectory($destination);
+        if (!$targetDirectory->isExist($parentDirectory)) {
+            $targetDirectory->create($parentDirectory);
+        }
+        $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
+        $absoluteDestination = $targetDirectory->getAbsolutePath($destination);
+
+        return $this->driver->symlink($absolutePath, $absoluteDestination, $targetDirectory->driver);
+    }
+
     /**
      * Delete given path
      *
diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php b/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php
index ba46d247d4870a596a7c5affaf0bda21d97bca1e..65c0de80d1f76bbe077995df6eadd59232485baa 100644
--- a/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php
+++ b/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php
@@ -47,6 +47,17 @@ interface WriteInterface extends ReadInterface
      */
     public function copyFile($path, $destination, WriteInterface $targetDirectory = null);
 
+    /**
+     * Creates symlink on a file and places it to destination
+     *
+     * @param string $path
+     * @param string $destination
+     * @param WriteInterface $targetDirectory [optional]
+     * @return bool
+     * @throws \Magento\Framework\Filesystem\FilesystemException
+     */
+    public function createSymlink($path, $destination, WriteInterface $targetDirectory = null);
+
     /**
      * Change permissions of given path
      *
diff --git a/lib/internal/Magento/Framework/Filesystem/Driver/File.php b/lib/internal/Magento/Framework/Filesystem/Driver/File.php
index 1329b56691aaada2e83da4dd8b4f47bf2c203886..d50cf4fc4f534d79133eb308dc8c579ef07fb7bd 100644
--- a/lib/internal/Magento/Framework/Filesystem/Driver/File.php
+++ b/lib/internal/Magento/Framework/Filesystem/Driver/File.php
@@ -284,6 +284,34 @@ class File implements DriverInterface
         return $result;
     }
 
+    /**
+     * Create symlink on source and place it into destination
+     *
+     * @param string $source
+     * @param string $destination
+     * @param DriverInterface|null $targetDriver
+     * @return bool
+     * @throws FilesystemException
+     */
+    public function symlink($source, $destination, DriverInterface $targetDriver = null)
+    {
+        $result = false;
+        if (get_class($targetDriver) == get_class($this)) {
+            $result = @symlink($this->getScheme() . $source, $destination);
+        }
+        if (!$result) {
+            throw new FilesystemException(
+                sprintf(
+                    'Cannot create a symlink for "%s" and place it to "%s" %s',
+                    $source,
+                    $destination,
+                    $this->getWarningMessage()
+                )
+            );
+        }
+        return $result;
+    }
+
     /**
      * Delete file
      *
diff --git a/lib/internal/Magento/Framework/Filesystem/DriverInterface.php b/lib/internal/Magento/Framework/Filesystem/DriverInterface.php
index 1f57387c5df7652849bd26046a86bfff46b15177..aff29eefba7ce7e5f4892f353d7d2890d5f8a86d 100644
--- a/lib/internal/Magento/Framework/Filesystem/DriverInterface.php
+++ b/lib/internal/Magento/Framework/Filesystem/DriverInterface.php
@@ -144,6 +144,17 @@ interface DriverInterface
      */
     public function copy($source, $destination, DriverInterface $targetDriver = null);
 
+    /**
+     * Create symlink on source and place it into destination
+     *
+     * @param string $source
+     * @param string $destination
+     * @param DriverInterface|null $targetDriver
+     * @return bool
+     * @throws FilesystemException
+     */
+    public function symlink($source, $destination, DriverInterface $targetDriver = null);
+
     /**
      * Delete file
      *
diff --git a/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php b/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php
index e94df3c02d49eee0e3962b3c8a0c1e5806fde401..f02398672685c35c4b880ac52fae430f3a8430a5 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php
@@ -16,11 +16,6 @@ class Compiled implements \Magento\Framework\ObjectManager\ConfigInterface
      */
     private $arguments;
 
-    /**
-     * @var array
-     */
-    private $nonShared;
-
     /**
      * @var array
      */
@@ -37,7 +32,6 @@ class Compiled implements \Magento\Framework\ObjectManager\ConfigInterface
     public function __construct($data)
     {
         $this->arguments = $data['arguments'];
-        $this->nonShared = $data['nonShared'];
         $this->virtualTypes = $data['instanceTypes'];
         $this->preferences = $data['preferences'];
     }
@@ -91,10 +85,11 @@ class Compiled implements \Magento\Framework\ObjectManager\ConfigInterface
      *
      * @param string $type
      * @return bool
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function isShared($type)
     {
-        return !isset($this->nonShared[$type]);
+        return true;
     }
 
     /**
@@ -135,7 +130,6 @@ class Compiled implements \Magento\Framework\ObjectManager\ConfigInterface
     public function extend(array $configuration)
     {
         $this->arguments = $configuration['arguments'];
-        $this->nonShared = $configuration['nonShared'];
         $this->virtualTypes = $configuration['instanceTypes'];
         $this->preferences = $configuration['preferences'];
     }
diff --git a/lib/internal/Magento/Framework/ObjectManager/Environment/AbstractEnvironment.php b/lib/internal/Magento/Framework/ObjectManager/Environment/AbstractEnvironment.php
index 6b67bab6942621900b46f7a777e939a908338d70..ef821a36ac18de5b6110531faeb8f673d551cb80 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Environment/AbstractEnvironment.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Environment/AbstractEnvironment.php
@@ -8,8 +8,8 @@ namespace Magento\Framework\ObjectManager\Environment;
 
 use Magento\Framework\ObjectManager\EnvironmentFactory;
 use Magento\Framework\ObjectManager\EnvironmentInterface;
-use Magento\Framework\ObjectManager\Factory\Compiled as FactoryCompiled;
 use Magento\Framework\ObjectManager\Profiler\FactoryDecorator;
+use Magento\Framework\ObjectManager\FactoryInterface;
 
 abstract class AbstractEnvironment implements EnvironmentInterface
 {
@@ -29,9 +29,9 @@ abstract class AbstractEnvironment implements EnvironmentInterface
     protected $configPreference = 'Magento\Framework\ObjectManager\Factory\Dynamic\Developer';
 
     /**
-     * @var \Magento\Framework\ObjectManager\FactoryInterface
+     * @var FactoryInterface
      */
-    private $factory;
+    protected $factory;
 
     /**
      * @var EnvironmentFactory
@@ -50,24 +50,14 @@ abstract class AbstractEnvironment implements EnvironmentInterface
      * Returns object manager factory
      *
      * @param array $arguments
-     * @return FactoryDecorator | FactoryCompiled
+     * @return \Magento\Framework\ObjectManager\Factory\AbstractFactory
      */
     public function getObjectManagerFactory($arguments)
     {
         $factoryClass = $this->getDiConfig()->getPreference($this->configPreference);
-        $this->factory = new $factoryClass(
-            $this->getDiConfig(),
-            null,
-            $this->envFactory->getDefinitions(),
-            $arguments
-        );
 
-        if (isset($arguments['MAGE_PROFILER']) && $arguments['MAGE_PROFILER'] == 2) {
-            $this->factory = new FactoryDecorator(
-                $this->factory,
-                \Magento\Framework\ObjectManager\Profiler\Log::getInstance()
-            );
-        }
+        $this->factory = $this->createFactory($arguments, $factoryClass);
+        $this->decorate($arguments);
 
         return $this->factory;
     }
@@ -81,4 +71,38 @@ abstract class AbstractEnvironment implements EnvironmentInterface
     {
         return $this->mode;
     }
+
+    /**
+     * Decorate factory
+     *
+     * @param array $arguments
+     * @return void
+     */
+    protected function decorate($arguments)
+    {
+        if (isset($arguments['MAGE_PROFILER']) && $arguments['MAGE_PROFILER'] == 2) {
+            $this->factory = new FactoryDecorator(
+                $this->factory,
+                \Magento\Framework\ObjectManager\Profiler\Log::getInstance()
+            );
+        }
+    }
+
+    /**
+     * Creates factory
+     *
+     * @param array $arguments
+     * @param string $factoryClass
+     *
+     * @return FactoryInterface
+     */
+    protected function createFactory($arguments, $factoryClass)
+    {
+        return new $factoryClass(
+            $this->getDiConfig(),
+            null,
+            $this->envFactory->getDefinitions(),
+            $arguments
+        );
+    }
 }
diff --git a/lib/internal/Magento/Framework/ObjectManager/Environment/Compiled.php b/lib/internal/Magento/Framework/ObjectManager/Environment/Compiled.php
index 5a8348d8dbf28bc80f98034921d5b8e76af90ef2..00478b6e3692e8f7e9dc7f72660d7a8c305a0948 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Environment/Compiled.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Environment/Compiled.php
@@ -7,6 +7,7 @@
 namespace Magento\Framework\ObjectManager\Environment;
 
 use Magento\Framework\ObjectManager\EnvironmentInterface;
+use Magento\Framework\ObjectManager\FactoryInterface;
 
 class Compiled extends AbstractEnvironment implements EnvironmentInterface
 {
@@ -24,6 +25,7 @@ class Compiled extends AbstractEnvironment implements EnvironmentInterface
      * Mode name
      */
     const MODE = 'compiled';
+
     protected $mode = self::MODE;
     /**#@- */
 
@@ -39,6 +41,23 @@ class Compiled extends AbstractEnvironment implements EnvironmentInterface
      */
     protected $configPreference = 'Magento\Framework\ObjectManager\Factory\Compiled';
 
+    /**
+     * Creates factory
+     *
+     * @param array $arguments
+     * @param string $factoryClass
+     *
+     * @return FactoryInterface
+     */
+    protected function createFactory($arguments, $factoryClass)
+    {
+        return new $factoryClass(
+            $this->getDiConfig(),
+            $arguments['shared_instances'],
+            $arguments
+        );
+    }
+
     /**
      * Returns initialized compiled config
      *
@@ -60,7 +79,7 @@ class Compiled extends AbstractEnvironment implements EnvironmentInterface
      *
      * @return array
      */
-    private function getConfigData()
+    protected function getConfigData()
     {
         if (empty($this->globalConfig)) {
             $this->globalConfig = \unserialize(\file_get_contents(self::getFilePath()));
diff --git a/lib/internal/Magento/Framework/ObjectManager/EnvironmentInterface.php b/lib/internal/Magento/Framework/ObjectManager/EnvironmentInterface.php
index 2c070f54f59d828db9dc0fddcfcb2b0019198c8c..494981fef3a1570ae628bbb3e2662fc8e7109875 100644
--- a/lib/internal/Magento/Framework/ObjectManager/EnvironmentInterface.php
+++ b/lib/internal/Magento/Framework/ObjectManager/EnvironmentInterface.php
@@ -29,7 +29,7 @@ interface EnvironmentInterface
      * Return factory object
      *
      * @param array $arguments
-     * @return \Magento\Framework\ObjectManager\FactoryInterface
+     * @return Factory\AbstractFactory
      */
     public function getObjectManagerFactory($arguments);
 
diff --git a/lib/internal/Magento/Framework/ObjectManager/Factory/Compiled.php b/lib/internal/Magento/Framework/ObjectManager/Factory/Compiled.php
index 72b6377a36e567ef84890e87d78ed042388e0c60..b2f6517e5dfba7c6ac3110f832b5348904409332 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Factory/Compiled.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Factory/Compiled.php
@@ -8,6 +8,40 @@ namespace Magento\Framework\ObjectManager\Factory;
 
 class Compiled extends AbstractFactory
 {
+    /**
+     * Object manager config
+     *
+     * @var \Magento\Framework\ObjectManager\ConfigInterface
+     */
+    protected $config;
+
+    /**
+     * Global arguments
+     *
+     * @var array
+     */
+    protected $globalArguments;
+
+    /**
+     * @var array
+     */
+    private $sharedInstances;
+
+    /**
+     * @param \Magento\Framework\ObjectManager\ConfigInterface $config
+     * @param array $sharedInstances
+     * @param array $globalArguments
+     */
+    public function __construct(
+        \Magento\Framework\ObjectManager\ConfigInterface $config,
+        &$sharedInstances = [],
+        $globalArguments = []
+    ) {
+        $this->config = $config;
+        $this->globalArguments = $globalArguments;
+        $this->sharedInstances = &$sharedInstances;
+    }
+
     /**
      * Create instance with call time arguments
      *
@@ -20,9 +54,8 @@ class Compiled extends AbstractFactory
     public function create($requestedType, array $arguments = [])
     {
         /** @TODO get rid of ltrim() usage and place it to client code */
-        $requestedType = ltrim($requestedType, '\\');
-        $type = $this->config->getInstanceType($requestedType);
         $args = $this->config->getArguments($requestedType);
+        $type = $this->config->getInstanceType($requestedType);
         if ($args === null) {
             return new $type();
         }
@@ -31,9 +64,9 @@ class Compiled extends AbstractFactory
             if (isset($arguments[$key])) {
                 $argument = $arguments[$key];
             } elseif (isset($argument['_i_'])) {
-                $argument = $this->objectManager->get($argument['_i_']);
+                $argument = $this->get($argument['_i_']);
             } elseif (isset($argument['_ins_'])) {
-                $argument = $this->objectManager->create($argument['_ins_']);
+                $argument = $this->create($argument['_ins_']);
             } elseif (isset($argument['_v_'])) {
                 $argument = $argument['_v_'];
             } elseif (isset($argument['_vac_'])) {
@@ -53,8 +86,9 @@ class Compiled extends AbstractFactory
         $args = array_values($args);
         if (substr($type, -12) == '\Interceptor') {
             $args = array_merge([
-                $this->objectManager, $this->objectManager->get('Magento\Framework\Interception\PluginListInterface'),
-                $this->objectManager->get('Magento\Framework\Interception\ChainInterface'),
+                $this->objectManager,
+                $this->get($this->config->getPreference('Magento\Framework\Interception\PluginListInterface')),
+                $this->get($this->config->getPreference('Magento\Framework\Interception\ChainInterface')),
             ], $args);
         }
 
@@ -75,9 +109,9 @@ class Compiled extends AbstractFactory
         foreach ($array as $key => &$argument) {
             if ($argument === (array)$argument) {
                 if (isset($argument['_i_'])) {
-                    $argument = $this->objectManager->get($argument['_i_']);
+                    $argument = $this->get($argument['_i_']);
                 } elseif (isset($argument['_ins_'])) {
-                    $argument = $this->objectManager->create($argument['_ins_']);
+                    $argument = $this->create($argument['_ins_']);
                 } elseif (isset($argument['_a_'])) {
                     if (isset($this->globalArguments[$argument['_a_']])) {
                         $argument = $this->globalArguments[$argument['_a_']];
@@ -90,4 +124,18 @@ class Compiled extends AbstractFactory
             }
         }
     }
+
+    /**
+     * Retrieve cached object instance
+     *
+     * @param string $type
+     * @return mixed
+     */
+    protected function get($type)
+    {
+        if (!isset($this->sharedInstances[$type])) {
+            $this->sharedInstances[$type] = $this->create($type);
+        }
+        return $this->sharedInstances[$type];
+    }
 }
diff --git a/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php b/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php
index 57e2db9ea1e8813ace1bcc863071e8803f2da43b..f78190c8b4de14ab1592ec59619bcf175c15acac 100644
--- a/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php
+++ b/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php
@@ -34,13 +34,13 @@ class ObjectManager implements \Magento\Framework\ObjectManagerInterface
     /**
      * @param FactoryInterface $factory
      * @param ConfigInterface $config
-     * @param array $sharedInstances
+     * @param array &$sharedInstances
      */
-    public function __construct(FactoryInterface $factory, ConfigInterface $config, array $sharedInstances = [])
+    public function __construct(FactoryInterface $factory, ConfigInterface $config, &$sharedInstances = [])
     {
         $this->_config = $config;
         $this->_factory = $factory;
-        $this->_sharedInstances = $sharedInstances;
+        $this->_sharedInstances = &$sharedInstances;
         $this->_sharedInstances['Magento\Framework\ObjectManagerInterface'] = $this;
     }
 
@@ -53,6 +53,7 @@ class ObjectManager implements \Magento\Framework\ObjectManagerInterface
      */
     public function create($type, array $arguments = [])
     {
+        $type = ltrim($type, '\\');
         return $this->_factory->create($this->_config->getPreference($type), $arguments);
     }
 
@@ -64,6 +65,7 @@ class ObjectManager implements \Magento\Framework\ObjectManagerInterface
      */
     public function get($type)
     {
+        $type = ltrim($type, '\\');
         $type = $this->_config->getPreference($type);
         if (!isset($this->_sharedInstances[$type])) {
             $this->_sharedInstances[$type] = $this->_factory->create($type);
diff --git a/lib/internal/Magento/Framework/View/Asset/File.php b/lib/internal/Magento/Framework/View/Asset/File.php
index fbb1c349140e2dfe3a9bcf10f16fb581ceab8c46..c7660b05595c1355a8f1ebf203c411b59b4c5e46 100644
--- a/lib/internal/Magento/Framework/View/Asset/File.php
+++ b/lib/internal/Magento/Framework/View/Asset/File.php
@@ -67,6 +67,14 @@ class File implements MergeableInterface
         return $this->context->getBaseUrl() . $this->getPath();
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function getSourceUrl()
+    {
+        return $this->context->getBaseUrl() . $this->getRelativeSourceFilePath();
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -87,6 +95,22 @@ class File implements MergeableInterface
         return $result;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function getRelativeSourceFilePath()
+    {
+        $path = $this->filePath;
+        if (strpos($this->source->findRelativeSourceFilePath($this), 'less')) {
+            $path = str_replace('.css', '.less', $this->filePath);
+        }
+        $result = '';
+        $result = $this->join($result, $this->context->getPath());
+        $result = $this->join($result, $this->module);
+        $result = $this->join($result, $path);
+        return $result;
+    }
+
     /**
      * Subroutine for building path
      *
diff --git a/lib/internal/Magento/Framework/View/Asset/PreProcessor/Chain.php b/lib/internal/Magento/Framework/View/Asset/PreProcessor/Chain.php
index decbfaefc908b86a83af8c404845d396002b9cc1..f8b971338cac1101009402d132014f4198a1f559 100644
--- a/lib/internal/Magento/Framework/View/Asset/PreProcessor/Chain.php
+++ b/lib/internal/Magento/Framework/View/Asset/PreProcessor/Chain.php
@@ -42,19 +42,43 @@ class Chain
      */
     private $targetContentType;
 
+    /**
+     * @var string
+     */
+    private $appMode;
+
+    /**
+     * @var null|string
+     */
+    private $targetAssetPath;
+
     /**
      * @param \Magento\Framework\View\Asset\LocalInterface $asset
      * @param string $origContent
      * @param string $origContentType
-     */
-    public function __construct(\Magento\Framework\View\Asset\LocalInterface $asset, $origContent, $origContentType)
-    {
+     * @param null $origAssetPath
+     * @param string $appMode
+     */
+    public function __construct(
+        \Magento\Framework\View\Asset\LocalInterface $asset,
+        $origContent,
+        $origContentType,
+        $origAssetPath = null,
+        $appMode = \Magento\Framework\App\State::MODE_DEFAULT
+    ) {
         $this->asset = $asset;
         $this->origContent = $origContent;
         $this->content = $origContent;
         $this->origContentType = $origContentType;
         $this->contentType = $origContentType;
+        $this->appMode = $appMode;
         $this->targetContentType = $asset->getContentType();
+        $this->targetAssetPath = $asset->getPath();
+
+        if ($appMode == \Magento\Framework\App\State::MODE_DEVELOPER) {
+            $this->targetContentType = $this->origContentType;
+            $this->targetAssetPath = $origAssetPath;
+        }
     }
 
     /**
@@ -139,6 +163,16 @@ class Chain
         return $this->targetContentType;
     }
 
+    /**
+     * Get the target asset path
+     *
+     * @return string
+     */
+    public function getTargetAssetPath()
+    {
+        return $this->targetAssetPath;
+    }
+
     /**
      * Assert invariants
      *
diff --git a/lib/internal/Magento/Framework/View/Asset/Source.php b/lib/internal/Magento/Framework/View/Asset/Source.php
index c940a822b2530f0e383ae39abba1e4296bad9f9f..ba37bce93a084ed4ee87c5b7adf1faaa56a93569 100644
--- a/lib/internal/Magento/Framework/View/Asset/Source.php
+++ b/lib/internal/Magento/Framework/View/Asset/Source.php
@@ -51,19 +51,26 @@ class Source
      */
     private $themeList;
 
+    /**
+     * @var string
+     */
+    private $appMode;
+
     /**
      * @param PreProcessor\Cache $cache
      * @param \Magento\Framework\Filesystem $filesystem
      * @param PreProcessor\Pool $preProcessorPool
      * @param \Magento\Framework\View\Design\FileResolution\Fallback\StaticFile $fallback
      * @param \Magento\Framework\View\Design\Theme\ListInterface $themeList
+     * @param string $appMode
      */
     public function __construct(
         PreProcessor\Cache $cache,
         \Magento\Framework\Filesystem $filesystem,
         PreProcessor\Pool $preProcessorPool,
         \Magento\Framework\View\Design\FileResolution\Fallback\StaticFile $fallback,
-        \Magento\Framework\View\Design\Theme\ListInterface $themeList
+        \Magento\Framework\View\Design\Theme\ListInterface $themeList,
+        $appMode = \Magento\Framework\App\State::MODE_DEFAULT
     ) {
         $this->cache = $cache;
         $this->filesystem = $filesystem;
@@ -72,6 +79,7 @@ class Source
         $this->preProcessorPool = $preProcessorPool;
         $this->fallback = $fallback;
         $this->themeList = $themeList;
+        $this->appMode = $appMode;
     }
 
     /**
@@ -134,7 +142,9 @@ class Source
         $chain = new \Magento\Framework\View\Asset\PreProcessor\Chain(
             $asset,
             $this->rootDir->readFile($path),
-            $this->getContentType($path)
+            $this->getContentType($path),
+            $path,
+            $this->appMode
         );
         $preProcessors = $this->preProcessorPool
             ->getPreProcessors($chain->getOrigContentType(), $chain->getTargetContentType());
@@ -144,7 +154,7 @@ class Source
         $chain->assertValid();
         if ($chain->isChanged()) {
             $dirCode = DirectoryList::VAR_DIR;
-            $path = DirectoryList::TMP_MATERIALIZATION_DIR . '/source/' . $asset->getPath();
+            $path = DirectoryList::TMP_MATERIALIZATION_DIR . '/source/' . $chain->getTargetAssetPath();
             $this->varDir->writeFile($path, $chain->getContent());
         }
         $result = [$dirCode, $path];
@@ -219,4 +229,18 @@ class Source
         Simple::assertFilePathFormat($asset->getFilePath());
         return $dir->getAbsolutePath($asset->getPath());
     }
+
+    /**
+     * @param \Magento\Framework\View\Asset\LocalInterface $asset
+     *
+     * @return bool|string
+     */
+    public function findRelativeSourceFilePath(LocalInterface $asset)
+    {
+        $sourceFile = $this->findSourceFile($asset);
+        if (!$sourceFile) {
+            return false;
+        }
+        return $this->rootDir->getRelativePath($sourceFile);
+    }
 }
diff --git a/lib/internal/Magento/Framework/View/Page/Config/Renderer.php b/lib/internal/Magento/Framework/View/Page/Config/Renderer.php
index ca4044678538f3d914fd47f96ea7eddfb14cf053..0e05ac3da9c246d5fff6c9ced0f83e3275ded24f 100644
--- a/lib/internal/Magento/Framework/View/Page/Config/Renderer.php
+++ b/lib/internal/Magento/Framework/View/Page/Config/Renderer.php
@@ -11,6 +11,8 @@ use Magento\Framework\View\Page\Config;
 
 /**
  * Page config Renderer model
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Renderer
 {
@@ -54,6 +56,16 @@ class Renderer
      */
     protected $urlBuilder;
 
+    /**
+     * @var string
+     */
+    private $appMode;
+
+    /**
+     * @var \Magento\Framework\View\Asset\Repository
+     */
+    private $assetRepo;
+
     /**
      * @param \Magento\Framework\View\Page\Config $pageConfig
      * @param \Magento\Framework\View\Asset\MinifyService $assetMinifyService
@@ -62,6 +74,8 @@ class Renderer
      * @param \Magento\Framework\Escaper $escaper
      * @param \Magento\Framework\Stdlib\String $string
      * @param \Psr\Log\LoggerInterface $logger
+     * @param \Magento\Framework\View\Asset\Repository $assetRepo
+     * @param string $appMode
      */
     public function __construct(
         Config $pageConfig,
@@ -70,7 +84,9 @@ class Renderer
         \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Framework\Escaper $escaper,
         \Magento\Framework\Stdlib\String $string,
-        \Psr\Log\LoggerInterface $logger
+        \Psr\Log\LoggerInterface $logger,
+        \Magento\Framework\View\Asset\Repository $assetRepo,
+        $appMode = \Magento\Framework\App\State::MODE_DEFAULT
     ) {
         $this->pageConfig = $pageConfig;
         $this->assetMinifyService = $assetMinifyService;
@@ -79,6 +95,8 @@ class Renderer
         $this->escaper = $escaper;
         $this->string = $string;
         $this->logger = $logger;
+        $this->assetRepo = $assetRepo;
+        $this->appMode = $appMode;
     }
 
     /**
@@ -219,6 +237,8 @@ class Renderer
     public function renderAssets()
     {
         $resultGroups = array_fill_keys($this->assetTypeOrder, '');
+        // less js have to be injected before any *.js in developer mode
+        $resultGroups = $this->renderLessJsScripts($resultGroups);
         /** @var $group \Magento\Framework\View\Asset\PropertyGroup */
         foreach ($this->pageConfig->getAssetCollection()->getGroups() as $group) {
             $type = $group->getProperty(GroupedCollection::PROPERTY_CONTENT_TYPE);
@@ -308,6 +328,10 @@ class Renderer
             case 'css':
                 $attributes = ' rel="stylesheet" type="text/css" ' . ($attributes ?: ' media="all"');
                 break;
+
+            case 'less':
+                $attributes = ' rel="stylesheet/less" type="text/css" ' . ($attributes ?: ' media="all"');
+                break;
         }
         return $attributes;
     }
@@ -357,9 +381,22 @@ class Renderer
     {
         $result = '';
         try {
-            /** @var $asset \Magento\Framework\View\Asset\AssetInterface */
             foreach ($assets as $asset) {
-                $result .= sprintf($template, $asset->getUrl());
+                /** @var $asset \Magento\Framework\View\Asset\File */
+                // todo will be fixed in MAGETWO-33631
+                if ($this->appMode == \Magento\Framework\App\State::MODE_DEVELOPER) {
+                    if ($asset instanceof \Magento\Framework\View\Asset\File &&
+                        $asset->getSourceUrl() != $asset->getUrl()
+                    ) {
+                        $attributes = $this->addDefaultAttributes('less', []);
+                        $groupTemplate = $this->getAssetTemplate('less', $attributes);
+                        $result .= sprintf($groupTemplate, $asset->getUrl());
+                    } else {
+                        $result .= sprintf($template, $asset->getUrl());
+                    }
+                } else {
+                    $result .= sprintf($template, $asset->getUrl());
+                }
             }
         } catch (\Magento\Framework\Exception $e) {
             $this->logger->critical($e);
@@ -367,4 +404,24 @@ class Renderer
         }
         return $result;
     }
+
+    /**
+     * Injecting less.js compiler
+     *
+     * @param array $resultGroups
+     *
+     * @return mixed
+     */
+    private function renderLessJsScripts($resultGroups)
+    {
+        if (\Magento\Framework\App\State::MODE_DEVELOPER == $this->appMode) {
+            // less js have to be injected before any *.js in developer mode
+            $lessJsConfigAsset = $this->assetRepo->createAsset('less/config.less.js');
+            $resultGroups['js'] .= sprintf('<script src="%s"></script>' . "\n", $lessJsConfigAsset->getUrl()) ;
+            $lessJsAsset = $this->assetRepo->createAsset('less/less.min.js');
+            $resultGroups['js'] .= sprintf('<script src="%s"></script>' . "\n", $lessJsAsset->getUrl()) ;
+        }
+
+        return $resultGroups;
+    }
 }
diff --git a/lib/web/less/config.less.js b/lib/web/less/config.less.js
new file mode 100644
index 0000000000000000000000000000000000000000..5289ba0b733f2080412fe344de3290ad406cc947
--- /dev/null
+++ b/lib/web/less/config.less.js
@@ -0,0 +1,8 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+less = {
+    env: "development"
+};
\ No newline at end of file
diff --git a/lib/web/less/less.min.js b/lib/web/less/less.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a2e68480fb554eaf20732e422d3d1aceaf87fb5
--- /dev/null
+++ b/lib/web/less/less.min.js
@@ -0,0 +1,17 @@
+/*!
+ * Less - Leaner CSS v2.3.1
+ * http://lesscss.org
+ *
+ * Copyright (c) 2009-2015, Alexis Sellier <self@cloudhead.net>
+ * Licensed under the Apache v2 License.
+ *
+ */
+
+ /** * @license Apache v2
+ */
+
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.less=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;d.length>g;g++)e(d[g]);return e}({1:[function(a,b){var c=a("./utils").addDataAttr,d=a("./browser");b.exports=function(a,b){c(b,d.currentScript(a)),void 0===b.isFileProtocol&&(b.isFileProtocol=/^(file|(chrome|safari)(-extension)?|resource|qrc|app):/.test(a.location.protocol)),b.async=b.async||!1,b.fileAsync=b.fileAsync||!1,b.poll=b.poll||(b.isFileProtocol?1e3:1500),b.env=b.env||("127.0.0.1"==a.location.hostname||"0.0.0.0"==a.location.hostname||"localhost"==a.location.hostname||a.location.port&&a.location.port.length>0||b.isFileProtocol?"development":"production");var e=/!dumpLineNumbers:(comments|mediaquery|all)/.exec(a.location.hash);e&&(b.dumpLineNumbers=e[1]),void 0===b.useFileCache&&(b.useFileCache=!0),void 0===b.onReady&&(b.onReady=!0)}},{"./browser":3,"./utils":9}],2:[function(a,b){a("promise/polyfill.js");var c=window.less||{};a("./add-default-options")(window,c);var d=b.exports=a("./index")(window,c);c.onReady&&(/!watch/.test(window.location.hash)&&d.watch(),d.pageLoadFinished=d.registerStylesheets().then(function(){return d.refresh("development"===d.env)}))},{"./add-default-options":1,"./index":7,"promise/polyfill.js":void 0}],3:[function(a,b){var c=a("./utils");b.exports={createCSS:function(a,b,d){var e=d.href||"",f="less:"+(d.title||c.extractId(e)),g=a.getElementById(f),h=!1,i=a.createElement("style");i.setAttribute("type","text/css"),d.media&&i.setAttribute("media",d.media),i.id=f,i.styleSheet||(i.appendChild(a.createTextNode(b)),h=null!==g&&g.childNodes.length>0&&i.childNodes.length>0&&g.firstChild.nodeValue===i.firstChild.nodeValue);var j=a.getElementsByTagName("head")[0];if(null===g||h===!1){var k=d&&d.nextSibling||null;k?k.parentNode.insertBefore(i,k):j.appendChild(i)}if(g&&h===!1&&g.parentNode.removeChild(g),i.styleSheet)try{i.styleSheet.cssText=b}catch(l){throw new Error("Couldn't reassign styleSheet.cssText.")}},currentScript:function(a){var b=a.document;return b.currentScript||function(){var a=b.getElementsByTagName("script");return a[a.length-1]}()}}},{"./utils":9}],4:[function(a,b){b.exports=function(a,b,c){var d=null;if("development"!==b.env)try{d="undefined"==typeof a.localStorage?null:a.localStorage}catch(e){}return{setCSS:function(a,b,e){if(d){c.info("saving "+a+" to cache.");try{d.setItem(a,e),d.setItem(a+":timestamp",b)}catch(f){c.error('failed to save "'+a+'" to local storage for caching.')}}},getCSS:function(a,b){var c=d&&d.getItem(a),e=d&&d.getItem(a+":timestamp");return e&&b.lastModified&&new Date(b.lastModified).valueOf()===new Date(e).valueOf()?c:void 0}}}},{}],5:[function(a,b){var c=a("./utils"),d=a("./browser");b.exports=function(a,b,e){function f(b,f){var g,h,i="less-error-message:"+c.extractId(f||""),j='<li><label>{line}</label><pre class="{class}">{content}</pre></li>',k=a.document.createElement("div"),l=[],m=b.filename||f,n=m.match(/([^\/]+(\?.*)?)$/)[1];k.id=i,k.className="less-error-message",h="<h3>"+(b.type||"Syntax")+"Error: "+(b.message||"There is an error in your .less file")+'</h3><p>in <a href="'+m+'">'+n+"</a> ";var o=function(a,b,c){void 0!==a.extract[b]&&l.push(j.replace(/\{line\}/,(parseInt(a.line,10)||0)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};b.extract&&(o(b,0,""),o(b,1,"line"),o(b,2,""),h+="on line "+b.line+", column "+(b.column+1)+":</p><ul>"+l.join("")+"</ul>"),b.stack&&(b.extract||e.logLevel>=4)&&(h+="<br/>Stack Trace</br />"+b.stack.split("\n").slice(1).join("<br/>")),k.innerHTML=h,d.createCSS(a.document,[".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),k.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),"development"===e.env&&(g=setInterval(function(){var b=a.document,c=b.body;c&&(b.getElementById(i)?c.replaceChild(k,b.getElementById(i)):c.insertBefore(k,c.firstChild),clearInterval(g))},10))}function g(a,b){e.errorReporting&&"html"!==e.errorReporting?"console"===e.errorReporting?k(a,b):"function"==typeof e.errorReporting&&e.errorReporting("add",a,b):f(a,b)}function h(b){var d=a.document.getElementById("less-error-message:"+c.extractId(b));d&&d.parentNode.removeChild(d)}function i(){}function j(a){e.errorReporting&&"html"!==e.errorReporting?"console"===e.errorReporting?i(a):"function"==typeof e.errorReporting&&e.errorReporting("remove",a):h(a)}function k(a,c){var d="{line} {content}",f=a.filename||c,g=[],h=(a.type||"Syntax")+"Error: "+(a.message||"There is an error in your .less file")+" in "+f+" ",i=function(a,b,c){void 0!==a.extract[b]&&g.push(d.replace(/\{line\}/,(parseInt(a.line,10)||0)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};a.extract&&(i(a,0,""),i(a,1,"line"),i(a,2,""),h+="on line "+a.line+", column "+(a.column+1)+":\n"+g.join("\n")),a.stack&&(a.extract||e.logLevel>=4)&&(h+="\nStack Trace\n"+a.stack),b.logger.error(h)}return{add:g,remove:j}}},{"./browser":3,"./utils":9}],6:[function(a,b){b.exports=function(b,c){function d(){if(window.XMLHttpRequest&&!("file:"===window.location.protocol&&"ActiveXObject"in window))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return c.error("browser doesn't support AJAX."),null}}var e=a("../less/environment/abstract-file-manager.js"),f={},g=function(){};return g.prototype=new e,g.prototype.alwaysMakePathsAbsolute=function(){return!0},g.prototype.join=function(a,b){return a?this.extractUrlParts(b,a).path:b},g.prototype.doXHR=function(a,e,f,g){function h(b,c,d){b.status>=200&&300>b.status?c(b.responseText,b.getResponseHeader("Last-Modified")):"function"==typeof d&&d(b.status,a)}var i=d(),j=b.isFileProtocol?b.fileAsync:b.async;"function"==typeof i.overrideMimeType&&i.overrideMimeType("text/css"),c.debug("XHR: Getting '"+a+"'"),i.open("GET",a,j),i.setRequestHeader("Accept",e||"text/x-less, text/css; q=0.9, */*; q=0.5"),i.send(null),b.isFileProtocol&&!b.fileAsync?0===i.status||i.status>=200&&300>i.status?f(i.responseText):g(i.status,a):j?i.onreadystatechange=function(){4==i.readyState&&h(i,f,g)}:h(i,f,g)},g.prototype.supports=function(){return!0},g.prototype.clearFileCache=function(){f={}},g.prototype.loadFile=function(a,b,c,d,e){b&&!this.isPathAbsolute(a)&&(a=b+a),c=c||{};var g=this.extractUrlParts(a,window.location.href),h=g.url;if(c.useFileCache&&f[h])try{var i=f[h];e(null,{contents:i,filename:h,webInfo:{lastModified:new Date}})}catch(j){e({filename:h,message:"Error loading file "+h+" error was "+j.message})}else this.doXHR(h,c.mime,function(a,b){f[h]=a,e(null,{contents:a,filename:h,webInfo:{lastModified:b}})},function(a,b){e({type:"File",message:"'"+b+"' wasn't found ("+a+")",href:h})})},g}},{"../less/environment/abstract-file-manager.js":14}],7:[function(a,b){var c=a("./utils").addDataAttr,d=a("./browser");b.exports=function(e,f){function g(a){return f.postProcessor&&"function"==typeof f.postProcessor&&(a=f.postProcessor.call(a,a)||a),a}function h(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function i(a,b){var c=Array.prototype.slice.call(arguments,2);return function(){var d=c.concat(Array.prototype.slice.call(arguments,0));return a.apply(b,d)}}function j(a){for(var b,c=n.getElementsByTagName("style"),d=0;c.length>d;d++)if(b=c[d],b.type.match(u)){var e=h(f);e.modifyVars=a;var g=b.innerHTML||"";e.filename=n.location.href.replace(/#.*$/,""),o.render(g,e,i(function(a,b,c){b?s.add(b,"inline"):(a.type="text/css",a.styleSheet?a.styleSheet.cssText=c.css:a.innerHTML=c.css)},null,b))}}function k(a,b,d,e,i){function j(c){var f=c.contents,h=c.filename,i=c.webInfo,j={currentDirectory:r.getPath(h),filename:h,rootFilename:h,relativeUrls:k.relativeUrls};if(j.entryPath=j.currentDirectory,j.rootpath=k.rootpath||j.currentDirectory,i&&(i.remaining=e,!k.modifyVars)){var l=t.getCSS(h,i);if(!d&&l)return i.local=!0,void b(null,l,f,a,i,h)}s.remove(h),k.rootFileInfo=j,o.render(f,k,function(c,d){c?(c.href=h,b(c)):(d.css=g(d.css),k.modifyVars||t.setCSS(a.href,i.lastModified,d.css),b(null,d.css,f,a,i,h))})}var k=h(f);c(k,a),k.mime=a.type,i&&(k.modifyVars=i),r.loadFile(a.href,null,k,p,function(a,c){return a?void b(a):void j(c)})}function l(a,b,c){for(var d=0;o.sheets.length>d;d++)k(o.sheets[d],a,b,o.sheets.length-(d+1),c)}function m(){"development"===o.env&&(o.watchTimer=setInterval(function(){o.watchMode&&(r.clearFileCache(),l(function(a,b,c,f){a?s.add(a,a.href||f.href):b&&d.createCSS(e.document,b,f)}))},f.poll))}var n=e.document,o=a("../less")();b.exports=o,o.options=f;var p=o.environment,q=a("./file-manager")(f,o.logger),r=new q;p.addFileManager(r),o.FileManager=q,a("./log-listener")(o,f);var s=a("./error-reporting")(e,o,f),t=o.cache=f.cache||a("./cache")(e,f,o.logger);f.functions&&o.functions.functionRegistry.addMultiple(f.functions);var u=/^text\/(x-)?less$/;return o.watch=function(){return o.watchMode||(o.env="development",m()),this.watchMode=!0,!0},o.unwatch=function(){return clearInterval(o.watchTimer),this.watchMode=!1,!1},o.registerStylesheets=function(){return new Promise(function(a){var b=n.getElementsByTagName("link");o.sheets=[];for(var c=0;b.length>c;c++)("stylesheet/less"===b[c].rel||b[c].rel.match(/stylesheet/)&&b[c].type.match(u))&&o.sheets.push(b[c]);a()})},o.modifyVars=function(a){return o.refresh(!0,a,!1)},o.refresh=function(a,b,c){return(a||c)&&c!==!1&&r.clearFileCache(),new Promise(function(c,f){var g,h,i;g=h=new Date,l(function(a,b,j,k,l){return a?(s.add(a,a.href||k.href),void f(a)):(o.logger.info(l.local?"loading "+k.href+" from cache.":"rendered "+k.href+" successfully."),d.createCSS(e.document,b,k),o.logger.info("css for "+k.href+" generated in "+(new Date-h)+"ms"),0===l.remaining&&(i=new Date-g,o.logger.info("less has finished. css generated in "+i+"ms"),c({startTime:g,endTime:h,totalMilliseconds:i,sheets:o.sheets.length})),void(h=new Date))},a,b),j(b)})},o.refreshStyles=j,o}},{"../less":29,"./browser":3,"./cache":4,"./error-reporting":5,"./file-manager":6,"./log-listener":8,"./utils":9}],8:[function(a,b){b.exports=function(a,b){var c=4,d=3,e=2,f=1;b.logLevel="undefined"!=typeof b.logLevel?b.logLevel:"development"===b.env?d:f,b.loggers||(b.loggers=[{debug:function(a){b.logLevel>=c&&console.log(a)},info:function(a){b.logLevel>=d&&console.log(a)},warn:function(a){b.logLevel>=e&&console.warn(a)},error:function(a){b.logLevel>=f&&console.error(a)}}]);for(var g=0;b.loggers.length>g;g++)a.logger.addListener(b.loggers[g])}},{}],9:[function(a,b){b.exports={extractId:function(a){return a.replace(/^[a-z-]+:\/+?[^\/]+/,"").replace(/[\?\&]livereload=\w+/,"").replace(/^\//,"").replace(/\.[a-zA-Z]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")},addDataAttr:function(a,b){for(var c in b.dataset)if(b.dataset.hasOwnProperty(c))if("env"===c||"dumpLineNumbers"===c||"rootpath"===c||"errorReporting"===c)a[c]=b.dataset[c];else try{a[c]=JSON.parse(b.dataset[c])}catch(d){}}}},{}],10:[function(a,b){var c={};b.exports=c;var d=function(a,b,c){if(a)for(var d=0;c.length>d;d++)a.hasOwnProperty(c[d])&&(b[c[d]]=a[c[d]])},e=["paths","relativeUrls","rootpath","strictImports","insecure","dumpLineNumbers","compress","syncImport","chunkInput","mime","useFileCache","processImports","reference","pluginManager"];c.Parse=function(a){d(a,this,e),"string"==typeof this.paths&&(this.paths=[this.paths])};var f=["paths","compress","ieCompat","strictMath","strictUnits","sourceMap","importMultiple","urlArgs","javascriptEnabled","pluginManager","importantScope"];c.Eval=function(a,b){d(a,this,f),this.frames=b||[],this.importantScope=this.importantScope||[]},c.Eval.prototype.inParenthesis=function(){this.parensStack||(this.parensStack=[]),this.parensStack.push(!0)},c.Eval.prototype.outOfParenthesis=function(){this.parensStack.pop()},c.Eval.prototype.isMathOn=function(){return this.strictMath?this.parensStack&&this.parensStack.length:!0},c.Eval.prototype.isPathRelative=function(a){return!/^(?:[a-z-]+:|\/)/i.test(a)},c.Eval.prototype.normalizePath=function(a){var b,c=a.split("/").reverse();for(a=[];0!==c.length;)switch(b=c.pop()){case".":break;case"..":0===a.length||".."===a[a.length-1]?a.push(b):a.pop();break;default:a.push(b)}return a.join("/")}},{}],11:[function(a,b){b.exports={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}},{}],12:[function(a,b){b.exports={colors:a("./colors"),unitConversions:a("./unit-conversions")}},{"./colors":11,"./unit-conversions":13}],13:[function(a,b){b.exports={length:{m:1,cm:.01,mm:.001,"in":.0254,px:.0254/96,pt:.0254/72,pc:.0254/72*12},duration:{s:1,ms:.001},angle:{rad:1/(2*Math.PI),deg:1/360,grad:.0025,turn:1}}},{}],14:[function(a,b){var c=function(){};c.prototype.getPath=function(a){var b=a.lastIndexOf("?");return b>0&&(a=a.slice(0,b)),b=a.lastIndexOf("/"),0>b&&(b=a.lastIndexOf("\\")),0>b?"":a.slice(0,b+1)},c.prototype.tryAppendLessExtension=function(a){return/(\.[a-z]*$)|([\?;].*)$/.test(a)?a:a+".less"},c.prototype.supportsSync=function(){return!1},c.prototype.alwaysMakePathsAbsolute=function(){return!1},c.prototype.isPathAbsolute=function(a){return/^(?:[a-z-]+:|\/|\\)/i.test(a)},c.prototype.join=function(a,b){return a?a+b:b},c.prototype.pathDiff=function(a,b){var c,d,e,f,g=this.extractUrlParts(a),h=this.extractUrlParts(b),i="";if(g.hostPart!==h.hostPart)return"";for(d=Math.max(h.directories.length,g.directories.length),c=0;d>c&&h.directories[c]===g.directories[c];c++);for(f=h.directories.slice(c),e=g.directories.slice(c),c=0;f.length-1>c;c++)i+="../";for(c=0;e.length-1>c;c++)i+=e[c]+"/";return i},c.prototype.extractUrlParts=function(a,b){var c,d,e=/^((?:[a-z-]+:)?\/+?(?:[^\/\?#]*\/)|([\/\\]))?((?:[^\/\\\?#]*[\/\\])*)([^\/\\\?#]*)([#\?].*)?$/i,f=a.match(e),g={},h=[];if(!f)throw new Error("Could not parse sheet href - '"+a+"'");if(b&&(!f[1]||f[2])){if(d=b.match(e),!d)throw new Error("Could not parse page url - '"+b+"'");f[1]=f[1]||d[1]||"",f[2]||(f[3]=d[3]+f[3])}if(f[3]){for(h=f[3].replace(/\\/g,"/").split("/"),c=0;h.length>c;c++)"."===h[c]&&(h.splice(c,1),c-=1);for(c=0;h.length>c;c++)".."===h[c]&&c>0&&(h.splice(c-1,2),c-=2)}return g.hostPart=f[1],g.directories=h,g.path=(f[1]||"")+h.join("/"),g.fileUrl=g.path+(f[4]||""),g.url=g.fileUrl+(f[5]||""),g},b.exports=c},{}],15:[function(a,b){var c=a("../logger"),d=function(a,b){this.fileManagers=b||[],a=a||{};for(var c=["encodeBase64","mimeLookup","charsetLookup","getSourceMapGenerator"],d=[],e=d.concat(c),f=0;e.length>f;f++){var g=e[f],h=a[g];h?this[g]=h.bind(a):d.length>f&&this.warn("missing required function in environment - "+g)}};d.prototype.getFileManager=function(a,b,d,e,f){a||c.warn("getFileManager called with no filename.. Please report this issue. continuing."),null==b&&c.warn("getFileManager called with null directory.. Please report this issue. continuing.");var g=this.fileManagers;d.pluginManager&&(g=[].concat(g).concat(d.pluginManager.getFileManagers()));for(var h=g.length-1;h>=0;h--){var i=g[h];if(i[f?"supportsSync":"supports"](a,b,d,e))return i}return null},d.prototype.addFileManager=function(a){this.fileManagers.push(a)},d.prototype.clearFileManagers=function(){this.fileManagers=[]},b.exports=d},{"../logger":31}],16:[function(a){function b(a,b,d){var e,f,g,h,i=b.alpha,j=d.alpha,k=[];g=j+i*(1-j);for(var l=0;3>l;l++)e=b.rgb[l]/255,f=d.rgb[l]/255,h=a(e,f),g&&(h=(j*f+i*(e-j*(e+f-h)))/g),k[l]=255*h;return new c(k,g)}var c=a("../tree/color"),d=a("./function-registry"),e={multiply:function(a,b){return a*b},screen:function(a,b){return a+b-a*b},overlay:function(a,b){return a*=2,1>=a?e.multiply(a,b):e.screen(a-1,b)},softlight:function(a,b){var c=1,d=a;return b>.5&&(d=1,c=a>.25?Math.sqrt(a):((16*a-12)*a+4)*a),a-(1-2*b)*d*(c-a)},hardlight:function(a,b){return e.overlay(b,a)},difference:function(a,b){return Math.abs(a-b)},exclusion:function(a,b){return a+b-2*a*b},average:function(a,b){return(a+b)/2},negation:function(a,b){return 1-Math.abs(a+b-1)}};for(var f in e)e.hasOwnProperty(f)&&(b[f]=b.bind(null,e[f]));d.addMultiple(b)},{"../tree/color":47,"./function-registry":21}],17:[function(a){function b(a){return Math.min(1,Math.max(0,a))}function c(a){return f.hsla(a.h,a.s,a.l,a.a)}function d(a){if(a instanceof g)return parseFloat(a.unit.is("%")?a.value/100:a.value);if("number"==typeof a)return a;throw{type:"Argument",message:"color functions take numbers as parameters"}}function e(a,b){return a instanceof g&&a.unit.is("%")?parseFloat(a.value*b/100):d(a)}var f,g=a("../tree/dimension"),h=a("../tree/color"),i=a("../tree/quoted"),j=a("../tree/anonymous"),k=a("./function-registry");f={rgb:function(a,b,c){return f.rgba(a,b,c,1)},rgba:function(a,b,c,f){var g=[a,b,c].map(function(a){return e(a,255)});return f=d(f),new h(g,f)},hsl:function(a,b,c){return f.hsla(a,b,c,1)},hsla:function(a,c,e,g){function h(a){return a=0>a?a+1:a>1?a-1:a,1>6*a?j+(i-j)*a*6:1>2*a?i:2>3*a?j+(i-j)*(2/3-a)*6:j}a=d(a)%360/360,c=b(d(c)),e=b(d(e)),g=b(d(g));var i=.5>=e?e*(c+1):e+c-e*c,j=2*e-i;return f.rgba(255*h(a+1/3),255*h(a),255*h(a-1/3),g)},hsv:function(a,b,c){return f.hsva(a,b,c,1)},hsva:function(a,b,c,e){a=d(a)%360/360*360,b=d(b),c=d(c),e=d(e);var g,h;g=Math.floor(a/60%6),h=a/60-g;var i=[c,c*(1-b),c*(1-h*b),c*(1-(1-h)*b)],j=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return f.rgba(255*i[j[g][0]],255*i[j[g][1]],255*i[j[g][2]],e)},hue:function(a){return new g(a.toHSL().h)},saturation:function(a){return new g(100*a.toHSL().s,"%")},lightness:function(a){return new g(100*a.toHSL().l,"%")},hsvhue:function(a){return new g(a.toHSV().h)},hsvsaturation:function(a){return new g(100*a.toHSV().s,"%")},hsvvalue:function(a){return new g(100*a.toHSV().v,"%")},red:function(a){return new g(a.rgb[0])},green:function(a){return new g(a.rgb[1])},blue:function(a){return new g(a.rgb[2])},alpha:function(a){return new g(a.toHSL().a)},luma:function(a){return new g(a.luma()*a.alpha*100,"%")},luminance:function(a){var b=.2126*a.rgb[0]/255+.7152*a.rgb[1]/255+.0722*a.rgb[2]/255;return new g(b*a.alpha*100,"%")},saturate:function(a,d){if(!a.rgb)return null;var e=a.toHSL();return e.s+=d.value/100,e.s=b(e.s),c(e)},desaturate:function(a,d){var e=a.toHSL();return e.s-=d.value/100,e.s=b(e.s),c(e)},lighten:function(a,d){var e=a.toHSL();return e.l+=d.value/100,e.l=b(e.l),c(e)},darken:function(a,d){var e=a.toHSL();return e.l-=d.value/100,e.l=b(e.l),c(e)},fadein:function(a,d){var e=a.toHSL();return e.a+=d.value/100,e.a=b(e.a),c(e)},fadeout:function(a,d){var e=a.toHSL();return e.a-=d.value/100,e.a=b(e.a),c(e)},fade:function(a,d){var e=a.toHSL();return e.a=d.value/100,e.a=b(e.a),c(e)},spin:function(a,b){var d=a.toHSL(),e=(d.h+b.value)%360;return d.h=0>e?360+e:e,c(d)},mix:function(a,b,c){c||(c=new g(50));var d=c.value/100,e=2*d-1,f=a.toHSL().a-b.toHSL().a,i=((e*f==-1?e:(e+f)/(1+e*f))+1)/2,j=1-i,k=[a.rgb[0]*i+b.rgb[0]*j,a.rgb[1]*i+b.rgb[1]*j,a.rgb[2]*i+b.rgb[2]*j],l=a.alpha*d+b.alpha*(1-d);return new h(k,l)},greyscale:function(a){return f.desaturate(a,new g(100))},contrast:function(a,b,c,e){if(!a.rgb)return null;if("undefined"==typeof c&&(c=f.rgba(255,255,255,1)),"undefined"==typeof b&&(b=f.rgba(0,0,0,1)),b.luma()>c.luma()){var g=c;c=b,b=g}return e="undefined"==typeof e?.43:d(e),a.luma()<e?c:b},argb:function(a){return new j(a.toARGB())},color:function(a){if(a instanceof i&&/^#([a-f0-9]{6}|[a-f0-9]{3})$/i.test(a.value))return new h(a.value.slice(1));if(a instanceof h||(a=h.fromKeyword(a.value)))return a.value=void 0,a;throw{type:"Argument",message:"argument must be a color keyword or 3/6 digit hex e.g. #FFF"}},tint:function(a,b){return f.mix(f.rgb(255,255,255),a,b)},shade:function(a,b){return f.mix(f.rgb(0,0,0),a,b)}},k.addMultiple(f)},{"../tree/anonymous":43,"../tree/color":47,"../tree/dimension":53,"../tree/quoted":70,"./function-registry":21}],18:[function(a,b){b.exports=function(b){var c=a("../tree/quoted"),d=a("../tree/url"),e=a("./function-registry"),f=function(a,b){return new d(b,a.index,a.currentFileInfo).eval(a.context)},g=a("../logger");e.add("data-uri",function(a,e){e||(e=a,a=null);var h=a&&a.value,i=e.value,j=this.currentFileInfo,k=j.relativeUrls?j.currentDirectory:j.entryPath,l=i.indexOf("#"),m="";-1!==l&&(m=i.slice(l),i=i.slice(0,l));var n=b.getFileManager(i,k,this.context,b,!0);if(!n)return f(this,e);var o=!1;if(a)o=/;base64$/.test(h);else{if(h=b.mimeLookup(i),"image/svg+xml"===h)o=!1;else{var p=b.charsetLookup(h);o=["US-ASCII","UTF-8"].indexOf(p)<0}o&&(h+=";base64")}var q=n.loadFileSync(i,k,this.context,b);if(!q.contents)return g.warn("Skipped data-uri embedding of "+i+" because file not found"),f(this,e||a);var r=q.contents;if(o&&!b.encodeBase64)return f(this,e);r=o?b.encodeBase64(r):encodeURIComponent(r);var s="data:"+h+","+r+m,t=32768;return s.length>=t&&this.context.ieCompat!==!1?(g.warn("Skipped data-uri embedding of "+i+" because its size ("+s.length+" characters) exceeds IE8-safe "+t+" characters!"),f(this,e||a)):new d(new c('"'+s+'"',s,!1,this.index,this.currentFileInfo),this.index,this.currentFileInfo)})}},{"../logger":31,"../tree/quoted":70,"../tree/url":77,"./function-registry":21}],19:[function(a,b){var c=a("../tree/keyword"),d=a("./function-registry"),e={eval:function(){var a=this.value_,b=this.error_;if(b)throw b;return null!=a?a?c.True:c.False:void 0},value:function(a){this.value_=a},error:function(a){this.error_=a},reset:function(){this.value_=this.error_=null}};d.add("default",e.eval.bind(e)),b.exports=e},{"../tree/keyword":62,"./function-registry":21}],20:[function(a,b){var c=a("./function-registry"),d=function(a,b,d,e){this.name=a.toLowerCase(),this.func=c.get(this.name),this.index=d,this.context=b,this.currentFileInfo=e};d.prototype.isValid=function(){return Boolean(this.func)},d.prototype.call=function(a){return this.func.apply(this,a)},b.exports=d},{"./function-registry":21}],21:[function(a,b){b.exports={_data:{},add:function(a,b){this._data.hasOwnProperty(a),this._data[a]=b},addMultiple:function(a){Object.keys(a).forEach(function(b){this.add(b,a[b])}.bind(this))},get:function(a){return this._data[a]}}},{}],22:[function(a,b){b.exports=function(b){var c={functionRegistry:a("./function-registry"),functionCaller:a("./function-caller")};return a("./default"),a("./color"),a("./color-blending"),a("./data-uri")(b),a("./math"),a("./number"),a("./string"),a("./svg")(b),a("./types"),c}},{"./color":17,"./color-blending":16,"./data-uri":18,"./default":19,"./function-caller":20,"./function-registry":21,"./math":23,"./number":24,"./string":25,"./svg":26,"./types":27}],23:[function(a){function b(a,b,d){if(!(d instanceof c))throw{type:"Argument",message:"argument must be a number"};return null==b?b=d.unit:d=d.unify(),new c(a(parseFloat(d.value)),b)}var c=a("../tree/dimension"),d=a("./function-registry"),e={ceil:null,floor:null,sqrt:null,abs:null,tan:"",sin:"",cos:"",atan:"rad",asin:"rad",acos:"rad"};for(var f in e)e.hasOwnProperty(f)&&(e[f]=b.bind(null,Math[f],e[f]));e.round=function(a,c){var d="undefined"==typeof c?0:c.value;return b(function(a){return a.toFixed(d)},null,a)},d.addMultiple(e)},{"../tree/dimension":53,"./function-registry":21}],24:[function(a){var b=a("../tree/dimension"),c=a("../tree/anonymous"),d=a("./function-registry"),e=function(a,d){switch(d=Array.prototype.slice.call(d),d.length){case 0:throw{type:"Argument",message:"one or more arguments required"}}var e,f,g,h,i,j,k,l,m=[],n={};for(e=0;d.length>e;e++)if(g=d[e],g instanceof b)if(h=""===g.unit.toString()&&void 0!==l?new b(g.value,l).unify():g.unify(),j=""===h.unit.toString()&&void 0!==k?k:h.unit.toString(),k=""!==j&&void 0===k||""!==j&&""===m[0].unify().unit.toString()?j:k,l=""!==j&&void 0===l?g.unit.toString():l,f=void 0!==n[""]&&""!==j&&j===k?n[""]:n[j],void 0!==f)i=""===m[f].unit.toString()&&void 0!==l?new b(m[f].value,l).unify():m[f].unify(),(a&&i.value>h.value||!a&&h.value>i.value)&&(m[f]=g);else{if(void 0!==k&&j!==k)throw{type:"Argument",message:"incompatible types"};n[j]=m.length,m.push(g)}else Array.isArray(d[e].value)&&Array.prototype.push.apply(d,Array.prototype.slice.call(d[e].value));return 1==m.length?m[0]:(d=m.map(function(a){return a.toCSS(this.context)}).join(this.context.compress?",":", "),new c((a?"min":"max")+"("+d+")"))};d.addMultiple({min:function(){return e(!0,arguments)},max:function(){return e(!1,arguments)},convert:function(a,b){return a.convertTo(b.value)},pi:function(){return new b(Math.PI)},mod:function(a,c){return new b(a.value%c.value,a.unit)},pow:function(a,c){if("number"==typeof a&&"number"==typeof c)a=new b(a),c=new b(c);else if(!(a instanceof b&&c instanceof b))throw{type:"Argument",message:"arguments must be numbers"};return new b(Math.pow(a.value,c.value),a.unit)},percentage:function(a){return new b(100*a.value,"%")}})},{"../tree/anonymous":43,"../tree/dimension":53,"./function-registry":21}],25:[function(a){var b=a("../tree/quoted"),c=a("../tree/anonymous"),d=a("../tree/javascript"),e=a("./function-registry");e.addMultiple({e:function(a){return new c(a instanceof d?a.evaluated:a.value)},escape:function(a){return new c(encodeURI(a.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},replace:function(a,c,d,e){var f=a.value;return f=f.replace(new RegExp(c.value,e?e.value:""),d.value),new b(a.quote||"",f,a.escaped)},"%":function(a){for(var c=Array.prototype.slice.call(arguments,1),d=a.value,e=0;c.length>e;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});return d=d.replace(/%%/g,"%"),new b(a.quote||"",d,a.escaped)}})},{"../tree/anonymous":43,"../tree/javascript":60,"../tree/quoted":70,"./function-registry":21}],26:[function(a,b){b.exports=function(){var b=a("../tree/dimension"),c=a("../tree/color"),d=a("../tree/expression"),e=a("../tree/quoted"),f=a("../tree/url"),g=a("./function-registry");g.add("svg-gradient",function(a){function g(){throw{type:"Argument",message:"svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position]"}}arguments.length<3&&g();var h,i,j,k,l,m,n,o=Array.prototype.slice.call(arguments,1),p="linear",q='x="0" y="0" width="1" height="1"',r={compress:!1},s=a.toCSS(r);switch(s){case"to bottom":h='x1="0%" y1="0%" x2="0%" y2="100%"';break;case"to right":h='x1="0%" y1="0%" x2="100%" y2="0%"';break;case"to bottom right":h='x1="0%" y1="0%" x2="100%" y2="100%"';break;case"to top right":h='x1="0%" y1="100%" x2="100%" y2="0%"';break;case"ellipse":case"ellipse at center":p="radial",h='cx="50%" cy="50%" r="75%"',q='x="-50" y="-50" width="101" height="101"';break;default:throw{type:"Argument",message:"svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center'"}}for(i='<?xml version="1.0" ?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none"><'+p+'Gradient id="gradient" gradientUnits="userSpaceOnUse" '+h+">",j=0;o.length>j;j+=1)o[j]instanceof d?(k=o[j].value[0],l=o[j].value[1]):(k=o[j],l=void 0),k instanceof c&&((0===j||j+1===o.length)&&void 0===l||l instanceof b)||g(),m=l?l.toCSS(r):0===j?"0%":"100%",n=k.alpha,i+='<stop offset="'+m+'" stop-color="'+k.toRGB()+'"'+(1>n?' stop-opacity="'+n+'"':"")+"/>";return i+="</"+p+"Gradient><rect "+q+' fill="url(#gradient)" /></svg>',i=encodeURIComponent(i),i="data:image/svg+xml,"+i,new f(new e("'"+i+"'",i,!1,this.index,this.currentFileInfo),this.index,this.currentFileInfo)})}},{"../tree/color":47,"../tree/dimension":53,"../tree/expression":56,"../tree/quoted":70,"../tree/url":77,"./function-registry":21}],27:[function(a){var b=a("../tree/keyword"),c=a("../tree/detached-ruleset"),d=a("../tree/dimension"),e=a("../tree/color"),f=a("../tree/quoted"),g=a("../tree/anonymous"),h=a("../tree/url"),i=a("../tree/operation"),j=a("./function-registry"),k=function(a,c){return a instanceof c?b.True:b.False},l=function(a,c){if(void 0===c)throw{type:"Argument",message:"missing the required second argument to isunit."};
+if(c="string"==typeof c.value?c.value:c,"string"!=typeof c)throw{type:"Argument",message:"Second argument to isunit should be a unit or a string."};return a instanceof d&&a.unit.is(c)?b.True:b.False};j.addMultiple({isruleset:function(a){return k(a,c)},iscolor:function(a){return k(a,e)},isnumber:function(a){return k(a,d)},isstring:function(a){return k(a,f)},iskeyword:function(a){return k(a,b)},isurl:function(a){return k(a,h)},ispixel:function(a){return l(a,"px")},ispercentage:function(a){return l(a,"%")},isem:function(a){return l(a,"em")},isunit:l,unit:function(a,c){if(!(a instanceof d))throw{type:"Argument",message:"the first argument to unit must be a number"+(a instanceof i?". Have you forgotten parenthesis?":"")};return c=c?c instanceof b?c.value:c.toCSS():"",new d(a.value,c)},"get-unit":function(a){return new g(a.unit)},extract:function(a,b){return b=b.value-1,Array.isArray(a.value)?a.value[b]:Array(a)[b]},length:function(a){var b=Array.isArray(a.value)?a.value.length:1;return new d(b)}})},{"../tree/anonymous":43,"../tree/color":47,"../tree/detached-ruleset":52,"../tree/dimension":53,"../tree/keyword":62,"../tree/operation":68,"../tree/quoted":70,"../tree/url":77,"./function-registry":21}],28:[function(a,b){var c=a("./contexts"),d=a("./parser/parser");b.exports=function(a){var b=function(a,b){this.rootFilename=b.filename,this.paths=a.paths||[],this.contents={},this.contentsIgnoredChars={},this.mime=a.mime,this.error=null,this.context=a,this.queue=[],this.files={}};return b.prototype.push=function(b,e,f,g,h){var i=this;this.queue.push(b);var j=function(a,c,d){i.queue.splice(i.queue.indexOf(b),1);var e=d===i.rootFilename;g.optional&&a?h(null,{rules:[]},!1,null):(i.files[d]=c,a&&!i.error&&(i.error=a),h(a,c,e,d))},k={relativeUrls:this.context.relativeUrls,entryPath:f.entryPath,rootpath:f.rootpath,rootFilename:f.rootFilename},l=a.getFileManager(b,f.currentDirectory,this.context,a);if(!l)return void j({message:"Could not find a file-manager for "+b});e&&(b=l.tryAppendLessExtension(b));var m=function(a){var b=a.filename,e=a.contents.replace(/^\uFEFF/,"");k.currentDirectory=l.getPath(b),k.relativeUrls&&(k.rootpath=l.join(i.context.rootpath||"",l.pathDiff(k.currentDirectory,k.entryPath)),!l.isPathAbsolute(k.rootpath)&&l.alwaysMakePathsAbsolute()&&(k.rootpath=l.join(k.entryPath,k.rootpath))),k.filename=b;var h=new c.Parse(i.context);h.processImports=!1,i.contents[b]=e,(f.reference||g.reference)&&(k.reference=!0),g.inline?j(null,e,b):new d(h,i,k).parse(e,function(a,c){j(a,c,b)})},n=l.loadFile(b,f.currentDirectory,this.context,a,function(a,b){a?j(a):m(b)});n&&n.then(m,j)},b}},{"./contexts":10,"./parser/parser":36}],29:[function(a,b){b.exports=function(b,c){var d,e,f,g,h,i={version:[2,3,1],data:a("./data"),tree:a("./tree"),Environment:h=a("./environment/environment"),AbstractFileManager:a("./environment/abstract-file-manager"),environment:b=new h(b,c),visitors:a("./visitors"),Parser:a("./parser/parser"),functions:a("./functions")(b),contexts:a("./contexts"),SourceMapOutput:d=a("./source-map-output")(b),SourceMapBuilder:e=a("./source-map-builder")(d,b),ParseTree:f=a("./parse-tree")(e),ImportManager:g=a("./import-manager")(b),render:a("./render")(b,f,g),parse:a("./parse")(b,f,g),LessError:a("./less-error"),transformTree:a("./transform-tree"),utils:a("./utils"),PluginManager:a("./plugin-manager"),logger:a("./logger")};return i}},{"./contexts":10,"./data":12,"./environment/abstract-file-manager":14,"./environment/environment":15,"./functions":22,"./import-manager":28,"./less-error":30,"./logger":31,"./parse":33,"./parse-tree":32,"./parser/parser":36,"./plugin-manager":37,"./render":38,"./source-map-builder":39,"./source-map-output":40,"./transform-tree":41,"./tree":59,"./utils":80,"./visitors":84}],30:[function(a,b){var c=a("./utils"),d=b.exports=function(a,b,d){Error.call(this);var e=a.filename||d;if(b&&e){var f=b.contents[e],g=c.getLocation(a.index,f),h=g.line,i=g.column,j=a.call&&c.getLocation(a.call,f).line,k=f.split("\n");this.type=a.type||"Syntax",this.filename=e,this.index=a.index,this.line="number"==typeof h?h+1:null,this.callLine=j+1,this.callExtract=k[j],this.column=i,this.extract=[k[h-1],k[h],k[h+1]]}this.message=a.message,this.stack=a.stack};if("undefined"==typeof Object.create){var e=function(){};e.prototype=Error.prototype,d.prototype=new e}else d.prototype=Object.create(Error.prototype);d.prototype.constructor=d},{"./utils":80}],31:[function(a,b){b.exports={error:function(a){this._fireEvent("error",a)},warn:function(a){this._fireEvent("warn",a)},info:function(a){this._fireEvent("info",a)},debug:function(a){this._fireEvent("debug",a)},addListener:function(a){this._listeners.push(a)},removeListener:function(a){for(var b=0;this._listeners.length>b;b++)if(this._listeners[b]===a)return void this._listeners.splice(b,1)},_fireEvent:function(a,b){for(var c=0;this._listeners.length>c;c++){var d=this._listeners[c][a];d&&d(b)}},_listeners:[]}},{}],32:[function(a,b){var c=a("./less-error"),d=a("./transform-tree"),e=a("./logger");b.exports=function(a){var b=function(a,b){this.root=a,this.imports=b};return b.prototype.toCSS=function(b){var f,g,h={};try{f=d(this.root,b)}catch(i){throw new c(i,this.imports)}try{var j=Boolean(b.compress);j&&e.warn("The compress option has been deprecated. We recommend you use a dedicated css minifier, for instance see less-plugin-clean-css.");var k={compress:j,dumpLineNumbers:b.dumpLineNumbers,strictUnits:Boolean(b.strictUnits),numPrecision:8};b.sourceMap?(g=new a(b.sourceMap),h.css=g.toCSS(f,k,this.imports)):h.css=f.toCSS(k)}catch(i){throw new c(i,this.imports)}if(b.pluginManager)for(var l=b.pluginManager.getPostProcessors(),m=0;l.length>m;m++)h.css=l[m].process(h.css,{sourceMap:g,options:b,imports:this.imports});b.sourceMap&&(h.map=g.getExternalSourceMap()),h.imports=[];for(var n in this.imports.files)this.imports.files.hasOwnProperty(n)&&n!==this.imports.rootFilename&&h.imports.push(n);return h},b}},{"./less-error":30,"./logger":31,"./transform-tree":41}],33:[function(a,b){var c="undefined"==typeof Promise?a("promise"):Promise,d=a("./contexts"),e=a("./parser/parser"),f=a("./plugin-manager");b.exports=function(a,b,g){var h=function(a,b,i){if(b=b||{},"function"==typeof b&&(i=b,b={}),!i){var j=this;return new c(function(c,d){h.call(j,a,b,function(a,b){a?d(a):c(b)})})}var k,l,m=new f(this);if(m.addPlugins(b.plugins),b.pluginManager=m,k=new d.Parse(b),b.rootFileInfo)l=b.rootFileInfo;else{var n=b.filename||"input",o=n.replace(/[^\/\\]*$/,"");l={filename:n,relativeUrls:k.relativeUrls,rootpath:k.rootpath||"",currentDirectory:o,entryPath:o,rootFilename:n},l.rootpath&&"/"!==l.rootpath.slice(-1)&&(l.rootpath+="/")}var p=new g(k,l);new e(k,p,l).parse(a,function(a,c){return a?i(a):void i(null,c,p,b)},b)};return h}},{"./contexts":10,"./parser/parser":36,"./plugin-manager":37,promise:void 0}],34:[function(a,b){b.exports=function(a,b){function c(b){var c=h-q;512>c&&!b||!c||(p.push(a.slice(q,h+1)),q=h+1)}var d,e,f,g,h,i,j,k,l,m=a.length,n=0,o=0,p=[],q=0;for(h=0;m>h;h++)if(j=a.charCodeAt(h),!(j>=97&&122>=j||34>j))switch(j){case 40:o++,e=h;continue;case 41:if(--o<0)return b("missing opening `(`",h);continue;case 59:o||c();continue;case 123:n++,d=h;continue;case 125:if(--n<0)return b("missing opening `{`",h);n||o||c();continue;case 92:if(m-1>h){h++;continue}return b("unescaped `\\`",h);case 34:case 39:case 96:for(l=0,i=h,h+=1;m>h;h++)if(k=a.charCodeAt(h),!(k>96)){if(k==j){l=1;break}if(92==k){if(h==m-1)return b("unescaped `\\`",h);h++}}if(l)continue;return b("unmatched `"+String.fromCharCode(j)+"`",i);case 47:if(o||h==m-1)continue;if(k=a.charCodeAt(h+1),47==k)for(h+=2;m>h&&(k=a.charCodeAt(h),!(13>=k)||10!=k&&13!=k);h++);else if(42==k){for(f=i=h,h+=2;m-1>h&&(k=a.charCodeAt(h),125==k&&(g=h),42!=k||47!=a.charCodeAt(h+1));h++);if(h==m-1)return b("missing closing `*/`",i);h++}continue;case 42:if(m-1>h&&47==a.charCodeAt(h+1))return b("unmatched `/*`",h);continue}return 0!==n?f>d&&g>f?b("missing closing `}` or `*/`",d):b("missing closing `}`",d):0!==o?b("missing closing `)`",e):(c(!0),p)}},{}],35:[function(a,b){var c=a("./chunker");b.exports=function(){function a(){k.i>i&&(h=h.slice(k.i-i),i=k.i)}var b,d,e,f,g,h,i,j=[],k={};k.save=function(){i=k.i,j.push({current:h,i:k.i,j:d})},k.restore=function(a){(k.i>e||k.i===e&&a&&!f)&&(e=k.i,f=a);var b=j.pop();h=b.current,i=k.i=b.i,d=b.j},k.forget=function(){j.pop()},k.isWhitespace=function(a){var c=k.i+(a||0),d=b.charCodeAt(c);return d===l||d===o||d===m||d===n},k.$=function(c){var d,e,f=typeof c;return"string"===f?b.charAt(k.i)!==c?null:(t(1),c):(a(),(d=c.exec(h))?(e=d[0].length,t(e),"string"==typeof d?d:1===d.length?d[0]:d):null)},k.$re=function(a){k.i>i&&(h=h.slice(k.i-i),i=k.i);var b=a.exec(h);return b?(t(b[0].length),"string"==typeof b?b:1===b.length?b[0]:b):null},k.$char=function(a){return b.charAt(k.i)!==a?null:(t(1),a)};var l=32,m=9,n=10,o=13,p=43,q=44,r=47,s=57;k.autoCommentAbsorb=!0,k.commentStore=[],k.finished=!1;var t=function(a){for(var c,e,f,j=k.i,p=d,q=k.i-i,s=k.i+h.length-q,u=k.i+=a,v=b;s>k.i;k.i++){if(c=v.charCodeAt(k.i),k.autoCommentAbsorb&&c===r){if(e=v.charAt(k.i+1),"/"===e){f={index:k.i,isLineComment:!0};var w=v.indexOf("\n",k.i+1);0>w&&(w=s),k.i=w,f.text=v.substr(f.i,k.i-f.i),k.commentStore.push(f);continue}if("*"===e){var x=v.substr(k.i),y=x.match(/^\/\*(?:[^*]|\*+[^\/*])*\*+\//);if(y){f={index:k.i,text:y[0],isLineComment:!1},k.i+=f.text.length-1,k.commentStore.push(f);continue}}break}if(c!==l&&c!==n&&c!==m&&c!==o)break}if(h=h.slice(a+k.i-u+q),i=k.i,!h.length){if(g.length-1>d)return h=g[++d],t(0),!0;k.finished=!0}return j!==k.i||p!==d};return k.peek=function(a){return"string"==typeof a?b.charAt(k.i)===a:a.test(h)},k.peekChar=function(a){return b.charAt(k.i)===a},k.currentChar=function(){return b.charAt(k.i)},k.getInput=function(){return b},k.peekNotNumeric=function(){var a=b.charCodeAt(k.i);return a>s||p>a||a===r||a===q},k.start=function(a,f,j){b=a,k.i=d=i=e=0,g=f?c(a,j):[a],h=g[0],t(0)},k.end=function(){var a,c=k.i>=b.length;return e>k.i&&(a=f,k.i=e),{isFinished:c,furthest:k.i,furthestPossibleErrorMessage:a,furthestReachedEnd:k.i>=b.length-1,furthestChar:b[k.i]}},k}},{"./chunker":34}],36:[function(a,b){var c=a("../less-error"),d=a("../tree"),e=a("../visitors"),f=a("./parser-input"),g=a("../utils"),h=function i(a,b,h){function j(a,b){var c="[object Function]"===Object.prototype.toString.call(a)?a.call(n):o.$(a);return c?c:void l(b||("string"==typeof a?"expected '"+a+"' got '"+o.currentChar()+"'":"unexpected token"))}function k(a,b){return o.$char(a)?a:void l(b||"expected '"+a+"' got '"+o.currentChar()+"'")}function l(a,d){throw new c({index:o.i,filename:h.filename,type:d||"Syntax",message:a},b)}function m(a){var b=h.filename;return{lineNumber:g.getLocation(a,o.getInput()).line+1,fileName:b}}var n,o=f();return{parse:function(f,g,j){var k,l,m,n=null,p="";l=j&&j.globalVars?i.serializeVars(j.globalVars)+"\n":"",m=j&&j.modifyVars?"\n"+i.serializeVars(j.modifyVars):"",(l||j&&j.banner)&&(p=(j&&j.banner?j.banner:"")+l,b.contentsIgnoredChars[h.filename]=p.length),f=f.replace(/\r\n/g,"\n"),f=p+f.replace(/^\uFEFF/,"")+m,b.contents[h.filename]=f;try{o.start(f,a.chunkInput,function(a,d){throw c({index:d,type:"Parse",message:a,filename:h.filename},b)}),k=new d.Ruleset(null,this.parsers.primary()),k.root=!0,k.firstRoot=!0}catch(q){return g(new c(q,b,h.filename))}var r=o.end();if(!r.isFinished){var s=r.furthestPossibleErrorMessage;s||(s="Unrecognised input","}"===r.furthestChar?s+=". Possibly missing opening '{'":")"===r.furthestChar?s+=". Possibly missing opening '('":r.furthestReachedEnd&&(s+=". Possibly missing something")),n=new c({type:"Parse",message:s,index:r.furthest,filename:h.filename},b)}var t=function(a){return a=n||a||b.error,a?(a instanceof c||(a=new c(a,b,h.filename)),g(a)):g(null,k)};return a.processImports===!1?t():void new e.ImportVisitor(b,t).run(k)},parsers:n={primary:function(){for(var a,b=this.mixin,c=[];;){for(;;){if(a=this.comment(),!a)break;c.push(a)}if(o.finished)break;if(o.peek("}"))break;if(a=this.extendRule())c=c.concat(a);else if(a=b.definition()||this.rule()||this.ruleset()||b.call()||this.rulesetCall()||this.directive())c.push(a);else if(!o.$re(/^[\s\n]+/)&&!o.$re(/^;+/))break}return c},comment:function(){if(o.commentStore.length){var a=o.commentStore.shift();return new d.Comment(a.text,a.isLineComment,a.index,h)}},entities:{quoted:function(){var a,b=o.i;return a=o.$re(/^(~)?("((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)')/),a?new d.Quoted(a[2],a[3]||a[4],Boolean(a[1]),b,h):void 0},keyword:function(){var a=o.$re(/^%|^[_A-Za-z-][_A-Za-z0-9-]*/);return a?d.Color.fromKeyword(a)||new d.Keyword(a):void 0},call:function(){var a,b,c,e,f=o.i;if(!o.peek(/^url\(/i))return o.save(),(a=o.$re(/^([\w-]+|%|progid:[\w\.]+)\(/))?(a=a[1],b=a.toLowerCase(),"alpha"===b&&(e=n.alpha())?e:(c=this.arguments(),o.$char(")")?(o.forget(),new d.Call(a,c,f,h)):void o.restore("Could not parse call arguments or missing ')'"))):void o.forget()},arguments:function(){for(var a,b=[];;){if(a=this.assignment()||n.expression(),!a)break;if(b.push(a),!o.$char(","))break}return b},literal:function(){return this.dimension()||this.color()||this.quoted()||this.unicodeDescriptor()},assignment:function(){var a,b;return a=o.$re(/^\w+(?=\s?=)/i),a&&o.$char("=")?(b=n.entity(),b?new d.Assignment(a,b):void 0):void 0},url:function(){var a,b=o.i;return o.autoCommentAbsorb=!1,"u"===o.currentChar()&&o.$re(/^url\(/)?(a=this.quoted()||this.variable()||o.$re(/^(?:(?:\\[\(\)'"])|[^\(\)'"])+/)||"",o.autoCommentAbsorb=!0,k(")"),new d.URL(null!=a.value||a instanceof d.Variable?a:new d.Anonymous(a),b,h)):void(o.autoCommentAbsorb=!0)},variable:function(){var a,b=o.i;return"@"===o.currentChar()&&(a=o.$re(/^@@?[\w-]+/))?new d.Variable(a,b,h):void 0},variableCurly:function(){var a,b=o.i;return"@"===o.currentChar()&&(a=o.$re(/^@\{([\w-]+)\}/))?new d.Variable("@"+a[1],b,h):void 0},color:function(){var a;if("#"===o.currentChar()&&(a=o.$re(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/))){var b=a.input.match(/^#([\w]+).*/);return b=b[1],b.match(/^[A-Fa-f0-9]+$/)||l("Invalid HEX color code"),new d.Color(a[1])}},dimension:function(){if(!o.peekNotNumeric()){var a=o.$re(/^([+-]?\d*\.?\d+)(%|[a-z]+)?/i);return a?new d.Dimension(a[1],a[2]):void 0}},unicodeDescriptor:function(){var a;return a=o.$re(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/),a?new d.UnicodeDescriptor(a[0]):void 0},javascript:function(){var a,b=o.i;return a=o.$re(/^(~)?`([^`]*)`/),a?new d.JavaScript(a[2],Boolean(a[1]),b,h):void 0}},variable:function(){var a;return"@"===o.currentChar()&&(a=o.$re(/^(@[\w-]+)\s*:/))?a[1]:void 0},rulesetCall:function(){var a;return"@"===o.currentChar()&&(a=o.$re(/^(@[\w-]+)\s*\(\s*\)\s*;/))?new d.RulesetCall(a[1]):void 0},extend:function(a){var b,c,e,f,g,h=o.i;if(o.$re(a?/^&:extend\(/:/^:extend\(/)){do{for(e=null,b=null;!(e=o.$re(/^(all)(?=\s*(\)|,))/))&&(c=this.element());)b?b.push(c):b=[c];e=e&&e[1],b||l("Missing target selector for :extend()."),g=new d.Extend(new d.Selector(b),e,h),f?f.push(g):f=[g]}while(o.$char(","));return j(/^\)/),a&&j(/^;/),f}},extendRule:function(){return this.extend(!0)},mixin:{call:function(){var a,b,c,e,f,g,i=o.currentChar(),j=!1,l=o.i;if("."===i||"#"===i){for(o.save();;){if(a=o.i,e=o.$re(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/),!e)break;c=new d.Element(f,e,a,h),b?b.push(c):b=[c],f=o.$char(">")}return b&&(o.$char("(")&&(g=this.args(!0).args,k(")")),n.important()&&(j=!0),n.end())?(o.forget(),new d.mixin.Call(b,g,l,h,j)):void o.restore()}},args:function(a){var b,c,e,f,g,h,i=n.entities,j={args:null,variadic:!1},k=[],m=[],p=[];for(o.save();;){if(a)h=n.detachedRuleset()||n.expression();else{if(o.commentStore.length=0,"."===o.currentChar()&&o.$re(/^\.{3}/)){j.variadic=!0,o.$char(";")&&!b&&(b=!0),(b?m:p).push({variadic:!0});break}h=i.variable()||i.literal()||i.keyword()}if(!h)break;f=null,h.throwAwayComments&&h.throwAwayComments(),g=h;var q=null;if(a?h.value&&1==h.value.length&&(q=h.value[0]):q=h,q&&q instanceof d.Variable)if(o.$char(":")){if(k.length>0&&(b&&l("Cannot mix ; and , as delimiter types"),c=!0),g=a&&n.detachedRuleset()||n.expression(),!g){if(!a)return o.restore(),j.args=[],j;l("could not understand value for named argument")}f=e=q.name}else{if(!a&&o.$re(/^\.{3}/)){j.variadic=!0,o.$char(";")&&!b&&(b=!0),(b?m:p).push({name:h.name,variadic:!0});break}a||(e=f=q.name,g=null)}g&&k.push(g),p.push({name:f,value:g}),o.$char(",")||(o.$char(";")||b)&&(c&&l("Cannot mix ; and , as delimiter types"),b=!0,k.length>1&&(g=new d.Value(k)),m.push({name:e,value:g}),e=null,k=[],c=!1)}return o.forget(),j.args=b?m:p,j},definition:function(){var a,b,c,e,f=[],g=!1;if(!("."!==o.currentChar()&&"#"!==o.currentChar()||o.peek(/^[^{]*\}/)))if(o.save(),b=o.$re(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/)){a=b[1];var h=this.args(!1);if(f=h.args,g=h.variadic,!o.$char(")"))return void o.restore("Missing closing ')'");if(o.commentStore.length=0,o.$re(/^when/)&&(e=j(n.conditions,"expected condition")),c=n.block())return o.forget(),new d.mixin.Definition(a,f,c,e,g);o.restore()}else o.forget()}},entity:function(){var a=this.entities;return this.comment()||a.literal()||a.variable()||a.url()||a.call()||a.keyword()||a.javascript()},end:function(){return o.$char(";")||o.peek("}")},alpha:function(){var a;if(o.$re(/^opacity=/i))return a=o.$re(/^\d+/),a||(a=j(this.entities.variable,"Could not parse alpha")),k(")"),new d.Alpha(a)},element:function(){var a,b,c,e=o.i;return b=this.combinator(),a=o.$re(/^(?:\d+\.\d+|\d+)%/)||o.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||o.$char("*")||o.$char("&")||this.attribute()||o.$re(/^\([^&()@]+\)/)||o.$re(/^[\.#:](?=@)/)||this.entities.variableCurly(),a||(o.save(),o.$char("(")?(c=this.selector())&&o.$char(")")?(a=new d.Paren(c),o.forget()):o.restore("Missing closing ')'"):o.forget()),a?new d.Element(b,a,e,h):void 0},combinator:function(){var a=o.currentChar();if("/"===a){o.save();var b=o.$re(/^\/[a-z]+\//i);if(b)return o.forget(),new d.Combinator(b);o.restore()}if(">"===a||"+"===a||"~"===a||"|"===a||"^"===a){for(o.i++,"^"===a&&"^"===o.currentChar()&&(a="^^",o.i++);o.isWhitespace();)o.i++;return new d.Combinator(a)}return new d.Combinator(o.isWhitespace(-1)?" ":null)},lessSelector:function(){return this.selector(!0)},selector:function(a){for(var b,c,e,f,g,i,k,m=o.i;(a&&(c=this.extend())||a&&(i=o.$re(/^when/))||(f=this.element()))&&(i?k=j(this.conditions,"expected condition"):k?l("CSS guard can only be used at the end of selector"):c?g=g?g.concat(c):c:(g&&l("Extend can only be used at the end of selector"),e=o.currentChar(),b?b.push(f):b=[f],f=null),"{"!==e&&"}"!==e&&";"!==e&&","!==e&&")"!==e););return b?new d.Selector(b,g,k,m,h):void(g&&l("Extend must be used to extend a selector, it cannot be used on its own"))},attribute:function(){if(o.$char("[")){var a,b,c,e=this.entities;return(a=e.variableCurly())||(a=j(/^(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/)),c=o.$re(/^[|~*$^]?=/),c&&(b=e.quoted()||o.$re(/^[0-9]+%/)||o.$re(/^[\w-]+/)||e.variableCurly()),k("]"),new d.Attribute(a,c,b)}},block:function(){var a;return o.$char("{")&&(a=this.primary())&&o.$char("}")?a:void 0},blockRuleset:function(){var a=this.block();return a&&(a=new d.Ruleset(null,a)),a},detachedRuleset:function(){var a=this.blockRuleset();return a?new d.DetachedRuleset(a):void 0},ruleset:function(){var b,c,e,f;for(o.save(),a.dumpLineNumbers&&(f=m(o.i));;){if(c=this.lessSelector(),!c)break;if(b?b.push(c):b=[c],o.commentStore.length=0,c.condition&&b.length>1&&l("Guards are only currently allowed on a single selector."),!o.$char(","))break;c.condition&&l("Guards are only currently allowed on a single selector."),o.commentStore.length=0}if(b&&(e=this.block())){o.forget();var g=new d.Ruleset(b,e,a.strictImports);return a.dumpLineNumbers&&(g.debugInfo=f),g}o.restore()},rule:function(b){var c,e,f,g,i,j=o.i,k=o.currentChar();if("."!==k&&"#"!==k&&"&"!==k)if(o.save(),c=this.variable()||this.ruleProperty()){if(i="string"==typeof c,i&&(e=this.detachedRuleset()),o.commentStore.length=0,!e){g=!i&&c.pop().value;var l=!b&&(a.compress||i);if(l&&(e=this.value()),!e&&(e=this.anonymousValue()))return o.forget(),new d.Rule(c,e,!1,g,j,h);l||e||(e=this.value()),f=this.important()}if(e&&this.end())return o.forget(),new d.Rule(c,e,f,g,j,h);if(o.restore(),e&&!b)return this.rule(!0)}else o.forget()},anonymousValue:function(){var a=o.$re(/^([^@+\/'"*`(;{}-]*);/);return a?new d.Anonymous(a[1]):void 0},"import":function(){var a,b,c=o.i,e=o.$re(/^@import?\s+/);if(e){var f=(e?this.importOptions():null)||{};if(a=this.entities.quoted()||this.entities.url())return b=this.mediaFeatures(),o.$(";")||(o.i=c,l("missing semi-colon or unrecognised media features on import")),b=b&&new d.Value(b),new d.Import(a,b,f,c,h);o.i=c,l("malformed import statement")}},importOptions:function(){var a,b,c,d={};if(!o.$char("("))return null;do if(a=this.importOption()){switch(b=a,c=!0,b){case"css":b="less",c=!1;break;case"once":b="multiple",c=!1}if(d[b]=c,!o.$char(","))break}while(a);return k(")"),d},importOption:function(){var a=o.$re(/^(less|css|multiple|once|inline|reference|optional)/);return a?a[1]:void 0},mediaFeature:function(){var a,b,c=this.entities,e=[];o.save();do if(a=c.keyword()||c.variable())e.push(a);else if(o.$char("(")){if(b=this.property(),a=this.value(),!o.$char(")"))return o.restore("Missing closing ')'"),null;if(b&&a)e.push(new d.Paren(new d.Rule(b,a,null,null,o.i,h,!0)));else{if(!a)return o.restore("badly formed media feature definition"),null;e.push(new d.Paren(a))}}while(a);return o.forget(),e.length>0?new d.Expression(e):void 0},mediaFeatures:function(){var a,b=this.entities,c=[];do if(a=this.mediaFeature()){if(c.push(a),!o.$char(","))break}else if(a=b.variable(),a&&(c.push(a),!o.$char(",")))break;while(a);return c.length>0?c:null},media:function(){var b,c,e,f;return a.dumpLineNumbers&&(f=m(o.i)),o.$re(/^@media/)&&(b=this.mediaFeatures(),c=this.block())?(e=new d.Media(c,b,o.i,h),a.dumpLineNumbers&&(e.debugInfo=f),e):void 0},directive:function(){var b,c,e,f,g,i,j,k=o.i,n=!0;if("@"===o.currentChar()){if(c=this["import"]()||this.media())return c;if(o.save(),b=o.$re(/^@[a-z-]+/)){switch(f=b,"-"==b.charAt(1)&&b.indexOf("-",2)>0&&(f="@"+b.slice(b.indexOf("-",2)+1)),f){case"@counter-style":g=!0,n=!0;break;case"@charset":g=!0,n=!1;break;case"@namespace":i=!0,n=!1;break;case"@keyframes":g=!0;break;case"@host":case"@page":case"@document":case"@supports":j=!0}return o.commentStore.length=0,g?(c=this.entity(),c||l("expected "+b+" identifier")):i?(c=this.expression(),c||l("expected "+b+" expression")):j&&(c=(o.$re(/^[^{;]+/)||"").trim(),c&&(c=new d.Anonymous(c))),n&&(e=this.blockRuleset()),e||!n&&c&&o.$char(";")?(o.forget(),new d.Directive(b,c,e,k,h,a.dumpLineNumbers?m(k):null)):void o.restore("directive options not recognised")}}},value:function(){var a,b=[];do if(a=this.expression(),a&&(b.push(a),!o.$char(",")))break;while(a);return b.length>0?new d.Value(b):void 0},important:function(){return"!"===o.currentChar()?o.$re(/^! *important/):void 0},sub:function(){var a,b;return o.save(),o.$char("(")?(a=this.addition(),a&&o.$char(")")?(o.forget(),b=new d.Expression([a]),b.parens=!0,b):void o.restore("Expected ')'")):void o.restore()},multiplication:function(){var a,b,c,e,f;if(a=this.operand()){for(f=o.isWhitespace(-1);;){if(o.peek(/^\/[*\/]/))break;if(o.save(),c=o.$char("/")||o.$char("*"),!c){o.forget();break}if(b=this.operand(),!b){o.restore();break}o.forget(),a.parensInOp=!0,b.parensInOp=!0,e=new d.Operation(c,[e||a,b],f),f=o.isWhitespace(-1)}return e||a}},addition:function(){var a,b,c,e,f;if(a=this.multiplication()){for(f=o.isWhitespace(-1);;){if(c=o.$re(/^[-+]\s+/)||!f&&(o.$char("+")||o.$char("-")),!c)break;if(b=this.multiplication(),!b)break;a.parensInOp=!0,b.parensInOp=!0,e=new d.Operation(c,[e||a,b],f),f=o.isWhitespace(-1)}return e||a}},conditions:function(){var a,b,c,e=o.i;if(a=this.condition()){for(;;){if(!o.peek(/^,\s*(not\s*)?\(/)||!o.$char(","))break;if(b=this.condition(),!b)break;c=new d.Condition("or",c||a,b,e)}return c||a}},condition:function(){var a,b,c,e,f=this.entities,g=o.i,h=!1;return o.$re(/^not/)&&(h=!0),k("("),a=this.addition()||f.keyword()||f.quoted(),a?(e=o.$re(/^(?:>=|<=|=<|[<=>])/),e?(b=this.addition()||f.keyword()||f.quoted(),b?c=new d.Condition(e,a,b,g,h):l("expected expression")):c=new d.Condition("=",a,new d.Keyword("true"),g,h),k(")"),o.$re(/^and/)?new d.Condition("and",c,this.condition()):c):void 0},operand:function(){var a,b=this.entities;o.peek(/^-[@\(]/)&&(a=o.$char("-"));var c=this.sub()||b.dimension()||b.color()||b.variable()||b.call();return a&&(c.parensInOp=!0,c=new d.Negative(c)),c},expression:function(){var a,b,c=[];do a=this.comment(),a?c.push(a):(a=this.addition()||this.entity(),a&&(c.push(a),o.peek(/^\/[\/*]/)||(b=o.$char("/"),b&&c.push(new d.Anonymous(b)))));while(a);return c.length>0?new d.Expression(c):void 0},property:function(){var a=o.$re(/^(\*?-?[_a-zA-Z0-9-]+)\s*:/);return a?a[1]:void 0},ruleProperty:function(){function a(a){var b=o.i,c=o.$re(a);return c?(f.push(b),e.push(c[1])):void 0}var b,c,e=[],f=[];for(o.save(),a(/^(\*?)/);;)if(!a(/^((?:[\w-]+)|(?:@\{[\w-]+\}))/))break;if(e.length>1&&a(/^((?:\+_|\+)?)\s*:/)){for(o.forget(),""===e[0]&&(e.shift(),f.shift()),c=0;e.length>c;c++)b=e[c],e[c]="@"!==b.charAt(0)?new d.Keyword(b):new d.Variable("@"+b.slice(2,-1),f[c],h);return e}o.restore()}}}};h.serializeVars=function(a){var b="";for(var c in a)if(Object.hasOwnProperty.call(a,c)){var d=a[c];b+=("@"===c[0]?"":"@")+c+": "+d+(";"===String(d).slice(-1)?"":";")}return b},b.exports=h},{"../less-error":30,"../tree":59,"../utils":80,"../visitors":84,"./parser-input":35}],37:[function(a,b){var c=function(a){this.less=a,this.visitors=[],this.postProcessors=[],this.installedPlugins=[],this.fileManagers=[]};c.prototype.addPlugins=function(a){if(a)for(var b=0;a.length>b;b++)this.addPlugin(a[b])},c.prototype.addPlugin=function(a){this.installedPlugins.push(a),a.install(this.less,this)},c.prototype.addVisitor=function(a){this.visitors.push(a)},c.prototype.addPostProcessor=function(a,b){var c;for(c=0;this.postProcessors.length>c&&!(this.postProcessors[c].priority>=b);c++);this.postProcessors.splice(c,0,{postProcessor:a,priority:b})},c.prototype.addFileManager=function(a){this.fileManagers.push(a)},c.prototype.getPostProcessors=function(){for(var a=[],b=0;this.postProcessors.length>b;b++)a.push(this.postProcessors[b].postProcessor);return a},c.prototype.getVisitors=function(){return this.visitors},c.prototype.getFileManagers=function(){return this.fileManagers},b.exports=c},{}],38:[function(a,b){var c="undefined"==typeof Promise?a("promise"):Promise;b.exports=function(a,b){var d=function(a,e,f){if("function"==typeof e&&(f=e,e={}),!f){var g=this;return new c(function(b,c){d.call(g,a,e,function(a,d){a?c(a):b(d)})})}this.parse(a,e,function(a,c,d,e){if(a)return f(a);var g;try{var h=new b(c,d);g=h.toCSS(e)}catch(a){return f(a)}f(null,g)})};return d}},{promise:void 0}],39:[function(a,b){b.exports=function(a,b){var c=function(a){this.options=a};return c.prototype.toCSS=function(b,c,d){var e=new a({contentsIgnoredCharsMap:d.contentsIgnoredChars,rootNode:b,contentsMap:d.contents,sourceMapFilename:this.options.sourceMapFilename,sourceMapURL:this.options.sourceMapURL,outputFilename:this.options.sourceMapOutputFilename,sourceMapBasepath:this.options.sourceMapBasepath,sourceMapRootpath:this.options.sourceMapRootpath,outputSourceFiles:this.options.outputSourceFiles,sourceMapGenerator:this.options.sourceMapGenerator,sourceMapFileInline:this.options.sourceMapFileInline}),f=e.toCSS(c);return this.sourceMap=e.sourceMap,this.sourceMapURL=e.sourceMapURL,this.options.sourceMapInputFilename&&(this.sourceMapInputFilename=e.normalizeFilename(this.options.sourceMapInputFilename)),f+this.getCSSAppendage()},c.prototype.getCSSAppendage=function(){var a=this.sourceMapURL;return this.options.sourceMapFileInline&&(a="data:application/json;base64,"+b.encodeBase64(this.sourceMap)),a?"/*# sourceMappingURL="+a+" */":""},c.prototype.getExternalSourceMap=function(){return this.sourceMap},c.prototype.setExternalSourceMap=function(a){this.sourceMap=a},c.prototype.isInline=function(){return this.options.sourceMapFileInline},c.prototype.getSourceMapURL=function(){return this.sourceMapURL},c.prototype.getOutputFilename=function(){return this.options.sourceMapOutputFilename},c.prototype.getInputFilename=function(){return this.sourceMapInputFilename},c}},{}],40:[function(a,b){b.exports=function(a){var b=function(b){this._css=[],this._rootNode=b.rootNode,this._contentsMap=b.contentsMap,this._contentsIgnoredCharsMap=b.contentsIgnoredCharsMap,b.sourceMapFilename&&(this._sourceMapFilename=b.sourceMapFilename.replace(/\\/g,"/")),this._outputFilename=b.outputFilename,this.sourceMapURL=b.sourceMapURL,b.sourceMapBasepath&&(this._sourceMapBasepath=b.sourceMapBasepath.replace(/\\/g,"/")),b.sourceMapRootpath?(this._sourceMapRootpath=b.sourceMapRootpath.replace(/\\/g,"/"),"/"!==this._sourceMapRootpath.charAt(this._sourceMapRootpath.length-1)&&(this._sourceMapRootpath+="/")):this._sourceMapRootpath="",this._outputSourceFiles=b.outputSourceFiles,this._sourceMapGeneratorConstructor=a.getSourceMapGenerator(),this._lineNumber=0,this._column=0};return b.prototype.normalizeFilename=function(a){return a=a.replace(/\\/g,"/"),this._sourceMapBasepath&&0===a.indexOf(this._sourceMapBasepath)&&(a=a.substring(this._sourceMapBasepath.length),("\\"===a.charAt(0)||"/"===a.charAt(0))&&(a=a.substring(1))),(this._sourceMapRootpath||"")+a},b.prototype.add=function(a,b,c,d){if(a){var e,f,g,h,i;if(b){var j=this._contentsMap[b.filename];this._contentsIgnoredCharsMap[b.filename]&&(c-=this._contentsIgnoredCharsMap[b.filename],0>c&&(c=0),j=j.slice(this._contentsIgnoredCharsMap[b.filename])),j=j.substring(0,c),f=j.split("\n"),h=f[f.length-1]}if(e=a.split("\n"),g=e[e.length-1],b)if(d)for(i=0;e.length>i;i++)this._sourceMapGenerator.addMapping({generated:{line:this._lineNumber+i+1,column:0===i?this._column:0},original:{line:f.length+i,column:0===i?h.length:0},source:this.normalizeFilename(b.filename)});else this._sourceMapGenerator.addMapping({generated:{line:this._lineNumber+1,column:this._column},original:{line:f.length,column:h.length},source:this.normalizeFilename(b.filename)});1===e.length?this._column+=g.length:(this._lineNumber+=e.length-1,this._column=g.length),this._css.push(a)}},b.prototype.isEmpty=function(){return 0===this._css.length},b.prototype.toCSS=function(a){if(this._sourceMapGenerator=new this._sourceMapGeneratorConstructor({file:this._outputFilename,sourceRoot:null}),this._outputSourceFiles)for(var b in this._contentsMap)if(this._contentsMap.hasOwnProperty(b)){var c=this._contentsMap[b];this._contentsIgnoredCharsMap[b]&&(c=c.slice(this._contentsIgnoredCharsMap[b])),this._sourceMapGenerator.setSourceContent(this.normalizeFilename(b),c)}if(this._rootNode.genCSS(a,this),this._css.length>0){var d,e=JSON.stringify(this._sourceMapGenerator.toJSON());this.sourceMapURL?d=this.sourceMapURL:this._sourceMapFilename&&(d=this._sourceMapFilename),this.sourceMapURL=d,this.sourceMap=e}return this._css.join("")},b}},{}],41:[function(a,b){var c=a("./contexts"),d=a("./visitors"),e=a("./tree");b.exports=function(a,b){b=b||{};var f,g=b.variables,h=new c.Eval(b);"object"!=typeof g||Array.isArray(g)||(g=Object.keys(g).map(function(a){var b=g[a];return b instanceof e.Value||(b instanceof e.Expression||(b=new e.Expression([b])),b=new e.Value([b])),new e.Rule("@"+a,b,!1,null,0)}),h.frames=[new e.Ruleset(null,g)]);var i,j=[],k=[new d.JoinSelectorVisitor,new d.ExtendVisitor,new d.ToCSSVisitor({compress:Boolean(b.compress)})];if(b.pluginManager){var l=b.pluginManager.getVisitors();for(i=0;l.length>i;i++){var m=l[i];m.isPreEvalVisitor?j.push(m):m.isPreVisitor?k.splice(0,0,m):k.push(m)}}for(i=0;j.length>i;i++)j[i].run(a);for(f=a.eval(h),i=0;k.length>i;i++)k[i].run(f);return f}},{"./contexts":10,"./tree":59,"./visitors":84}],42:[function(a,b){var c=a("./node"),d=function(a){this.value=a};d.prototype=new c,d.prototype.type="Alpha",d.prototype.accept=function(a){this.value=a.visit(this.value)
+},d.prototype.eval=function(a){return this.value.eval?new d(this.value.eval(a)):this},d.prototype.genCSS=function(a,b){b.add("alpha(opacity="),this.value.genCSS?this.value.genCSS(a,b):b.add(this.value),b.add(")")},b.exports=d},{"./node":67}],43:[function(a,b){var c=a("./node"),d=function(a,b,c,d,e){this.value=a,this.index=b,this.mapLines=d,this.currentFileInfo=c,this.rulesetLike="undefined"==typeof e?!1:e};d.prototype=new c,d.prototype.type="Anonymous",d.prototype.eval=function(){return new d(this.value,this.index,this.currentFileInfo,this.mapLines,this.rulesetLike)},d.prototype.compare=function(a){return a.toCSS&&this.toCSS()===a.toCSS()?0:void 0},d.prototype.isRulesetLike=function(){return this.rulesetLike},d.prototype.genCSS=function(a,b){b.add(this.value,this.currentFileInfo,this.index,this.mapLines)},b.exports=d},{"./node":67}],44:[function(a,b){var c=a("./node"),d=function(a,b){this.key=a,this.value=b};d.prototype=new c,d.prototype.type="Assignment",d.prototype.accept=function(a){this.value=a.visit(this.value)},d.prototype.eval=function(a){return this.value.eval?new d(this.key,this.value.eval(a)):this},d.prototype.genCSS=function(a,b){b.add(this.key+"="),this.value.genCSS?this.value.genCSS(a,b):b.add(this.value)},b.exports=d},{"./node":67}],45:[function(a,b){var c=a("./node"),d=function(a,b,c){this.key=a,this.op=b,this.value=c};d.prototype=new c,d.prototype.type="Attribute",d.prototype.eval=function(a){return new d(this.key.eval?this.key.eval(a):this.key,this.op,this.value&&this.value.eval?this.value.eval(a):this.value)},d.prototype.genCSS=function(a,b){b.add(this.toCSS(a))},d.prototype.toCSS=function(a){var b=this.key.toCSS?this.key.toCSS(a):this.key;return this.op&&(b+=this.op,b+=this.value.toCSS?this.value.toCSS(a):this.value),"["+b+"]"},b.exports=d},{"./node":67}],46:[function(a,b){var c=a("./node"),d=a("../functions/function-caller"),e=function(a,b,c,d){this.name=a,this.args=b,this.index=c,this.currentFileInfo=d};e.prototype=new c,e.prototype.type="Call",e.prototype.accept=function(a){this.args&&(this.args=a.visitArray(this.args))},e.prototype.eval=function(a){var b,c=this.args.map(function(b){return b.eval(a)}),f=new d(this.name,a,this.index,this.currentFileInfo);if(f.isValid())try{if(b=f.call(c),null!=b)return b}catch(g){throw{type:g.type||"Runtime",message:"error evaluating function `"+this.name+"`"+(g.message?": "+g.message:""),index:this.index,filename:this.currentFileInfo.filename}}return new e(this.name,c,this.index,this.currentFileInfo)},e.prototype.genCSS=function(a,b){b.add(this.name+"(",this.currentFileInfo,this.index);for(var c=0;this.args.length>c;c++)this.args[c].genCSS(a,b),this.args.length>c+1&&b.add(", ");b.add(")")},b.exports=e},{"../functions/function-caller":20,"./node":67}],47:[function(a,b){function c(a,b){return Math.min(Math.max(a,0),b)}function d(a){return"#"+a.map(function(a){return a=c(Math.round(a),255),(16>a?"0":"")+a.toString(16)}).join("")}var e=a("./node"),f=a("../data/colors"),g=function(a,b){this.rgb=Array.isArray(a)?a:6==a.length?a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha="number"==typeof b?b:1};g.prototype=new e,g.prototype.type="Color",g.prototype.luma=function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255;return a=.03928>=a?a/12.92:Math.pow((a+.055)/1.055,2.4),b=.03928>=b?b/12.92:Math.pow((b+.055)/1.055,2.4),c=.03928>=c?c/12.92:Math.pow((c+.055)/1.055,2.4),.2126*a+.7152*b+.0722*c},g.prototype.genCSS=function(a,b){b.add(this.toCSS(a))},g.prototype.toCSS=function(a,b){var d,e,f=a&&a.compress&&!b;if(this.value)return this.value;if(e=this.fround(a,this.alpha),1>e)return"rgba("+this.rgb.map(function(a){return c(Math.round(a),255)}).concat(c(e,1)).join(","+(f?"":" "))+")";if(d=this.toRGB(),f){var g=d.split("");g[1]===g[2]&&g[3]===g[4]&&g[5]===g[6]&&(d="#"+g[1]+g[3]+g[5])}return d},g.prototype.operate=function(a,b,c){for(var d=[],e=this.alpha*(1-c.alpha)+c.alpha,f=0;3>f;f++)d[f]=this._operate(a,b,this.rgb[f],c.rgb[f]);return new g(d,e)},g.prototype.toRGB=function(){return d(this.rgb)},g.prototype.toHSL=function(){var a,b,c=this.rgb[0]/255,d=this.rgb[1]/255,e=this.rgb[2]/255,f=this.alpha,g=Math.max(c,d,e),h=Math.min(c,d,e),i=(g+h)/2,j=g-h;if(g===h)a=b=0;else{switch(b=i>.5?j/(2-g-h):j/(g+h),g){case c:a=(d-e)/j+(e>d?6:0);break;case d:a=(e-c)/j+2;break;case e:a=(c-d)/j+4}a/=6}return{h:360*a,s:b,l:i,a:f}},g.prototype.toHSV=function(){var a,b,c=this.rgb[0]/255,d=this.rgb[1]/255,e=this.rgb[2]/255,f=this.alpha,g=Math.max(c,d,e),h=Math.min(c,d,e),i=g,j=g-h;if(b=0===g?0:j/g,g===h)a=0;else{switch(g){case c:a=(d-e)/j+(e>d?6:0);break;case d:a=(e-c)/j+2;break;case e:a=(c-d)/j+4}a/=6}return{h:360*a,s:b,v:i,a:f}},g.prototype.toARGB=function(){return d([255*this.alpha].concat(this.rgb))},g.prototype.compare=function(a){return a.rgb&&a.rgb[0]===this.rgb[0]&&a.rgb[1]===this.rgb[1]&&a.rgb[2]===this.rgb[2]&&a.alpha===this.alpha?0:void 0},g.fromKeyword=function(a){var b,c=a.toLowerCase();return f.hasOwnProperty(c)?b=new g(f[c].slice(1)):"transparent"===c&&(b=new g([0,0,0],0)),b?(b.value=a,b):void 0},b.exports=g},{"../data/colors":11,"./node":67}],48:[function(a,b){var c=a("./node"),d=function(a){" "===a?(this.value=" ",this.emptyOrWhitespace=!0):(this.value=a?a.trim():"",this.emptyOrWhitespace=""===this.value)};d.prototype=new c,d.prototype.type="Combinator";var e={"":!0," ":!0,"|":!0};d.prototype.genCSS=function(a,b){var c=a.compress||e[this.value]?"":" ";b.add(c+this.value+c)},b.exports=d},{"./node":67}],49:[function(a,b){var c=a("./node"),d=a("./debug-info"),e=function(a,b,c,d){this.value=a,this.isLineComment=b,this.currentFileInfo=d};e.prototype=new c,e.prototype.type="Comment",e.prototype.genCSS=function(a,b){this.debugInfo&&b.add(d(a,this),this.currentFileInfo,this.index),b.add(this.value)},e.prototype.isSilent=function(a){var b=this.currentFileInfo&&this.currentFileInfo.reference&&!this.isReferenced,c=a.compress&&"!"!==this.value[2];return this.isLineComment||b||c},e.prototype.markReferenced=function(){this.isReferenced=!0},e.prototype.isRulesetLike=function(a){return Boolean(a)},b.exports=e},{"./debug-info":51,"./node":67}],50:[function(a,b){var c=a("./node"),d=function(a,b,c,d,e){this.op=a.trim(),this.lvalue=b,this.rvalue=c,this.index=d,this.negate=e};d.prototype=new c,d.prototype.type="Condition",d.prototype.accept=function(a){this.lvalue=a.visit(this.lvalue),this.rvalue=a.visit(this.rvalue)},d.prototype.eval=function(a){var b=function(a,b,d){switch(a){case"and":return b&&d;case"or":return b||d;default:switch(c.compare(b,d)){case-1:return"<"===a||"=<"===a||"<="===a;case 0:return"="===a||">="===a||"=<"===a||"<="===a;case 1:return">"===a||">="===a;default:return!1}}}(this.op,this.lvalue.eval(a),this.rvalue.eval(a));return this.negate?!b:b},b.exports=d},{"./node":67}],51:[function(a,b){var c=function(a,b,d){var e="";if(a.dumpLineNumbers&&!a.compress)switch(a.dumpLineNumbers){case"comments":e=c.asComment(b);break;case"mediaquery":e=c.asMediaQuery(b);break;case"all":e=c.asComment(b)+(d||"")+c.asMediaQuery(b)}return e};c.asComment=function(a){return"/* line "+a.debugInfo.lineNumber+", "+a.debugInfo.fileName+" */\n"},c.asMediaQuery=function(a){var b=a.debugInfo.fileName;return/^[a-z]+:\/\//i.test(b)||(b="file://"+b),"@media -sass-debug-info{filename{font-family:"+b.replace(/([.:\/\\])/g,function(a){return"\\"==a&&(a="/"),"\\"+a})+"}line{font-family:\\00003"+a.debugInfo.lineNumber+"}}\n"},b.exports=c},{}],52:[function(a,b){var c=a("./node"),d=a("../contexts"),e=function(a,b){this.ruleset=a,this.frames=b};e.prototype=new c,e.prototype.type="DetachedRuleset",e.prototype.evalFirst=!0,e.prototype.accept=function(a){this.ruleset=a.visit(this.ruleset)},e.prototype.eval=function(a){var b=this.frames||a.frames.slice(0);return new e(this.ruleset,b)},e.prototype.callEval=function(a){return this.ruleset.eval(this.frames?new d.Eval(a,this.frames.concat(a.frames)):a)},b.exports=e},{"../contexts":10,"./node":67}],53:[function(a,b){var c=a("./node"),d=a("../data/unit-conversions"),e=a("./unit"),f=a("./color"),g=function(a,b){this.value=parseFloat(a),this.unit=b&&b instanceof e?b:new e(b?[b]:void 0)};g.prototype=new c,g.prototype.type="Dimension",g.prototype.accept=function(a){this.unit=a.visit(this.unit)},g.prototype.eval=function(){return this},g.prototype.toColor=function(){return new f([this.value,this.value,this.value])},g.prototype.genCSS=function(a,b){if(a&&a.strictUnits&&!this.unit.isSingular())throw new Error("Multiple units in dimension. Correct the units or use the unit function. Bad unit: "+this.unit.toString());var c=this.fround(a,this.value),d=String(c);if(0!==c&&1e-6>c&&c>-1e-6&&(d=c.toFixed(20).replace(/0+$/,"")),a&&a.compress){if(0===c&&this.unit.isLength())return void b.add(d);c>0&&1>c&&(d=d.substr(1))}b.add(d),this.unit.genCSS(a,b)},g.prototype.operate=function(a,b,c){var d=this._operate(a,b,this.value,c.value),e=this.unit.clone();if("+"===b||"-"===b)if(0===e.numerator.length&&0===e.denominator.length)e.numerator=c.unit.numerator.slice(0),e.denominator=c.unit.denominator.slice(0);else if(0===c.unit.numerator.length&&0===e.denominator.length);else{if(c=c.convertTo(this.unit.usedUnits()),a.strictUnits&&c.unit.toString()!==e.toString())throw new Error("Incompatible units. Change the units or use the unit function. Bad units: '"+e.toString()+"' and '"+c.unit.toString()+"'.");d=this._operate(a,b,this.value,c.value)}else"*"===b?(e.numerator=e.numerator.concat(c.unit.numerator).sort(),e.denominator=e.denominator.concat(c.unit.denominator).sort(),e.cancel()):"/"===b&&(e.numerator=e.numerator.concat(c.unit.denominator).sort(),e.denominator=e.denominator.concat(c.unit.numerator).sort(),e.cancel());return new g(d,e)},g.prototype.compare=function(a){var b,d;if(!(a instanceof g))return void 0;if(this.unit.isEmpty()||a.unit.isEmpty())b=this,d=a;else if(b=this.unify(),d=a.unify(),0!==b.unit.compare(d.unit))return void 0;return c.numericCompare(b.value,d.value)},g.prototype.unify=function(){return this.convertTo({length:"px",duration:"s",angle:"rad"})},g.prototype.convertTo=function(a){var b,c,e,f,h,i=this.value,j=this.unit.clone(),k={};if("string"==typeof a){for(b in d)d[b].hasOwnProperty(a)&&(k={},k[b]=a);a=k}h=function(a,b){return e.hasOwnProperty(a)?(b?i/=e[a]/e[f]:i*=e[a]/e[f],f):a};for(c in a)a.hasOwnProperty(c)&&(f=a[c],e=d[c],j.map(h));return j.cancel(),new g(i,j)},b.exports=g},{"../data/unit-conversions":13,"./color":47,"./node":67,"./unit":76}],54:[function(a,b){var c=a("./node"),d=a("./ruleset"),e=function(a,b,c,d,e,f,g){this.name=a,this.value=b,c&&(this.rules=c,this.rules.allowImports=!0),this.index=d,this.currentFileInfo=e,this.debugInfo=f,this.isReferenced=g};e.prototype=new c,e.prototype.type="Directive",e.prototype.accept=function(a){var b=this.value,c=this.rules;c&&(this.rules=a.visit(c)),b&&(this.value=a.visit(b))},e.prototype.isRulesetLike=function(){return this.rules||!this.isCharset()},e.prototype.isCharset=function(){return"@charset"===this.name},e.prototype.genCSS=function(a,b){var c=this.value,d=this.rules;b.add(this.name,this.currentFileInfo,this.index),c&&(b.add(" "),c.genCSS(a,b)),d?("Ruleset"===d.type&&(d=[d]),this.outputRuleset(a,b,d)):b.add(";")},e.prototype.eval=function(a){var b=this.value,c=this.rules;return b&&(b=b.eval(a)),c&&(c=c.eval(a),c.root=!0),new e(this.name,b,c,this.index,this.currentFileInfo,this.debugInfo,this.isReferenced)},e.prototype.variable=function(a){return this.rules?d.prototype.variable.call(this.rules,a):void 0},e.prototype.find=function(){return this.rules?d.prototype.find.apply(this.rules,arguments):void 0},e.prototype.rulesets=function(){return this.rules?d.prototype.rulesets.apply(this.rules):void 0},e.prototype.markReferenced=function(){var a,b;if(this.isReferenced=!0,this.rules)for(b=this.rules.rules,a=0;b.length>a;a++)b[a].markReferenced&&b[a].markReferenced()},e.prototype.getIsReferenced=function(){return!this.currentFileInfo||!this.currentFileInfo.reference||this.isReferenced},e.prototype.outputRuleset=function(a,b,c){var d,e=c.length;if(a.tabLevel=(0|a.tabLevel)+1,a.compress){for(b.add("{"),d=0;e>d;d++)c[d].genCSS(a,b);return b.add("}"),void a.tabLevel--}var f="\n"+Array(a.tabLevel).join("  "),g=f+"  ";if(e){for(b.add(" {"+g),c[0].genCSS(a,b),d=1;e>d;d++)b.add(g),c[d].genCSS(a,b);b.add(f+"}")}else b.add(" {"+f+"}");a.tabLevel--},b.exports=e},{"./node":67,"./ruleset":73}],55:[function(a,b){var c=a("./node"),d=a("./paren"),e=a("./combinator"),f=function(a,b,c,d){this.combinator=a instanceof e?a:new e(a),this.value="string"==typeof b?b.trim():b?b:"",this.index=c,this.currentFileInfo=d};f.prototype=new c,f.prototype.type="Element",f.prototype.accept=function(a){var b=this.value;this.combinator=a.visit(this.combinator),"object"==typeof b&&(this.value=a.visit(b))},f.prototype.eval=function(a){return new f(this.combinator,this.value.eval?this.value.eval(a):this.value,this.index,this.currentFileInfo)},f.prototype.genCSS=function(a,b){b.add(this.toCSS(a),this.currentFileInfo,this.index)},f.prototype.toCSS=function(a){a=a||{};var b=this.value,c=a.firstSelector;return b instanceof d&&(a.firstSelector=!0),b=b.toCSS?b.toCSS(a):b,a.firstSelector=c,""===b&&"&"===this.combinator.value.charAt(0)?"":this.combinator.toCSS(a)+b},b.exports=f},{"./combinator":48,"./node":67,"./paren":69}],56:[function(a,b){var c=a("./node"),d=a("./paren"),e=a("./comment"),f=function(a){if(this.value=a,!a)throw new Error("Expression requires an array parameter")};f.prototype=new c,f.prototype.type="Expression",f.prototype.accept=function(a){this.value=a.visitArray(this.value)},f.prototype.eval=function(a){var b,c=this.parens&&!this.parensInOp,e=!1;return c&&a.inParenthesis(),this.value.length>1?b=new f(this.value.map(function(b){return b.eval(a)})):1===this.value.length?(this.value[0].parens&&!this.value[0].parensInOp&&(e=!0),b=this.value[0].eval(a)):b=this,c&&a.outOfParenthesis(),this.parens&&this.parensInOp&&!a.isMathOn()&&!e&&(b=new d(b)),b},f.prototype.genCSS=function(a,b){for(var c=0;this.value.length>c;c++)this.value[c].genCSS(a,b),this.value.length>c+1&&b.add(" ")},f.prototype.throwAwayComments=function(){this.value=this.value.filter(function(a){return!(a instanceof e)})},b.exports=f},{"./comment":49,"./node":67,"./paren":69}],57:[function(a,b){var c=a("./node"),d=function e(a,b,c){switch(this.selector=a,this.option=b,this.index=c,this.object_id=e.next_id++,this.parent_ids=[this.object_id],b){case"all":this.allowBefore=!0,this.allowAfter=!0;break;default:this.allowBefore=!1,this.allowAfter=!1}};d.next_id=0,d.prototype=new c,d.prototype.type="Extend",d.prototype.accept=function(a){this.selector=a.visit(this.selector)},d.prototype.eval=function(a){return new d(this.selector.eval(a),this.option,this.index)},d.prototype.clone=function(){return new d(this.selector,this.option,this.index)},d.prototype.findSelfSelectors=function(a){var b,c,d=[];for(b=0;a.length>b;b++)c=a[b].elements,b>0&&c.length&&""===c[0].combinator.value&&(c[0].combinator.value=" "),d=d.concat(a[b].elements);this.selfSelectors=[{elements:d}]},b.exports=d},{"./node":67}],58:[function(a,b){var c=a("./node"),d=a("./media"),e=a("./url"),f=a("./quoted"),g=a("./ruleset"),h=a("./anonymous"),i=function(a,b,c,d,e){if(this.options=c,this.index=d,this.path=a,this.features=b,this.currentFileInfo=e,void 0!==this.options.less||this.options.inline)this.css=!this.options.less||this.options.inline;else{var f=this.getPath();f&&/[#\.\&\?\/]css([\?;].*)?$/.test(f)&&(this.css=!0)}};i.prototype=new c,i.prototype.type="Import",i.prototype.accept=function(a){this.features&&(this.features=a.visit(this.features)),this.path=a.visit(this.path),!this.options.inline&&this.root&&(this.root=a.visit(this.root))},i.prototype.genCSS=function(a,b){this.css&&(b.add("@import ",this.currentFileInfo,this.index),this.path.genCSS(a,b),this.features&&(b.add(" "),this.features.genCSS(a,b)),b.add(";"))},i.prototype.getPath=function(){return this.path instanceof f?this.path.value:this.path instanceof e?this.path.value.value:null},i.prototype.isVariableImport=function(){var a=this.path;return a instanceof e&&(a=a.value),a instanceof f?a.containsVariables():!0},i.prototype.evalForImport=function(a){var b=this.path;return b instanceof e&&(b=b.value),new i(b.eval(a),this.features,this.options,this.index,this.currentFileInfo)},i.prototype.evalPath=function(a){var b=this.path.eval(a),c=this.currentFileInfo&&this.currentFileInfo.rootpath;if(!(b instanceof e)){if(c){var d=b.value;d&&a.isPathRelative(d)&&(b.value=c+d)}b.value=a.normalizePath(b.value)}return b},i.prototype.eval=function(a){var b,c=this.features&&this.features.eval(a);if(this.skip&&("function"==typeof this.skip&&(this.skip=this.skip()),this.skip))return[];if(this.options.inline){var e=new h(this.root,0,{filename:this.importedFilename},!0,!0);return this.features?new d([e],this.features.value):[e]}if(this.css){var f=new i(this.evalPath(a),c,this.options,this.index);if(!f.css&&this.error)throw this.error;return f}return b=new g(null,this.root.rules.slice(0)),b.evalImports(a),this.features?new d(b.rules,this.features.value):b.rules},b.exports=i},{"./anonymous":43,"./media":63,"./node":67,"./quoted":70,"./ruleset":73,"./url":77}],59:[function(a,b){var c={};c.Node=a("./node"),c.Alpha=a("./alpha"),c.Color=a("./color"),c.Directive=a("./directive"),c.DetachedRuleset=a("./detached-ruleset"),c.Operation=a("./operation"),c.Dimension=a("./dimension"),c.Unit=a("./unit"),c.Keyword=a("./keyword"),c.Variable=a("./variable"),c.Ruleset=a("./ruleset"),c.Element=a("./element"),c.Attribute=a("./attribute"),c.Combinator=a("./combinator"),c.Selector=a("./selector"),c.Quoted=a("./quoted"),c.Expression=a("./expression"),c.Rule=a("./rule"),c.Call=a("./call"),c.URL=a("./url"),c.Import=a("./import"),c.mixin={Call:a("./mixin-call"),Definition:a("./mixin-definition")},c.Comment=a("./comment"),c.Anonymous=a("./anonymous"),c.Value=a("./value"),c.JavaScript=a("./javascript"),c.Assignment=a("./assignment"),c.Condition=a("./condition"),c.Paren=a("./paren"),c.Media=a("./media"),c.UnicodeDescriptor=a("./unicode-descriptor"),c.Negative=a("./negative"),c.Extend=a("./extend"),c.RulesetCall=a("./ruleset-call"),b.exports=c},{"./alpha":42,"./anonymous":43,"./assignment":44,"./attribute":45,"./call":46,"./color":47,"./combinator":48,"./comment":49,"./condition":50,"./detached-ruleset":52,"./dimension":53,"./directive":54,"./element":55,"./expression":56,"./extend":57,"./import":58,"./javascript":60,"./keyword":62,"./media":63,"./mixin-call":64,"./mixin-definition":65,"./negative":66,"./node":67,"./operation":68,"./paren":69,"./quoted":70,"./rule":71,"./ruleset":73,"./ruleset-call":72,"./selector":74,"./unicode-descriptor":75,"./unit":76,"./url":77,"./value":78,"./variable":79}],60:[function(a,b){var c=a("./js-eval-node"),d=a("./dimension"),e=a("./quoted"),f=a("./anonymous"),g=function(a,b,c,d){this.escaped=b,this.expression=a,this.index=c,this.currentFileInfo=d};g.prototype=new c,g.prototype.type="JavaScript",g.prototype.eval=function(a){var b=this.evaluateJavaScript(this.expression,a);return"number"==typeof b?new d(b):"string"==typeof b?new e('"'+b+'"',b,this.escaped,this.index):new f(Array.isArray(b)?b.join(", "):b)},b.exports=g},{"./anonymous":43,"./dimension":53,"./js-eval-node":61,"./quoted":70}],61:[function(a,b){var c=a("./node"),d=a("./variable"),e=function(){};e.prototype=new c,e.prototype.evaluateJavaScript=function(a,b){var c,e=this,f={};if(void 0!==b.javascriptEnabled&&!b.javascriptEnabled)throw{message:"You are using JavaScript, which has been disabled.",filename:this.currentFileInfo.filename,index:this.index};a=a.replace(/@\{([\w-]+)\}/g,function(a,c){return e.jsify(new d("@"+c,e.index,e.currentFileInfo).eval(b))});try{a=new Function("return ("+a+")")}catch(g){throw{message:"JavaScript evaluation error: "+g.message+" from `"+a+"`",filename:this.currentFileInfo.filename,index:this.index}}var h=b.frames[0].variables();for(var i in h)h.hasOwnProperty(i)&&(f[i.slice(1)]={value:h[i].value,toJS:function(){return this.value.eval(b).toCSS()}});try{c=a.call(f)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message.replace(/["]/g,"'")+"'",filename:this.currentFileInfo.filename,index:this.index}}return c},e.prototype.jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS()}).join(", ")+"]":a.toCSS()},b.exports=e},{"./node":67,"./variable":79}],62:[function(a,b){var c=a("./node"),d=function(a){this.value=a};d.prototype=new c,d.prototype.type="Keyword",d.prototype.genCSS=function(a,b){if("%"===this.value)throw{type:"Syntax",message:"Invalid % without number"};b.add(this.value)},d.True=new d("true"),d.False=new d("false"),b.exports=d},{"./node":67}],63:[function(a,b){var c=a("./ruleset"),d=a("./value"),e=a("./element"),f=a("./selector"),g=a("./anonymous"),h=a("./expression"),i=a("./directive"),j=function(a,b,e,f){this.index=e,this.currentFileInfo=f;var g=this.emptySelectors();this.features=new d(b),this.rules=[new c(g,a)],this.rules[0].allowImports=!0};j.prototype=new i,j.prototype.type="Media",j.prototype.isRulesetLike=!0,j.prototype.accept=function(a){this.features&&(this.features=a.visit(this.features)),this.rules&&(this.rules=a.visitArray(this.rules))},j.prototype.genCSS=function(a,b){b.add("@media ",this.currentFileInfo,this.index),this.features.genCSS(a,b),this.outputRuleset(a,b,this.rules)},j.prototype.eval=function(a){a.mediaBlocks||(a.mediaBlocks=[],a.mediaPath=[]);var b=new j(null,[],this.index,this.currentFileInfo);this.debugInfo&&(this.rules[0].debugInfo=this.debugInfo,b.debugInfo=this.debugInfo);var c=!1;a.strictMath||(c=!0,a.strictMath=!0);try{b.features=this.features.eval(a)}finally{c&&(a.strictMath=!1)}return a.mediaPath.push(b),a.mediaBlocks.push(b),a.frames.unshift(this.rules[0]),b.rules=[this.rules[0].eval(a)],a.frames.shift(),a.mediaPath.pop(),0===a.mediaPath.length?b.evalTop(a):b.evalNested(a)},j.prototype.variable=function(a){return c.prototype.variable.call(this.rules[0],a)},j.prototype.find=function(){return c.prototype.find.apply(this.rules[0],arguments)},j.prototype.rulesets=function(){return c.prototype.rulesets.apply(this.rules[0])},j.prototype.emptySelectors=function(){var a=new e("","&",this.index,this.currentFileInfo),b=[new f([a],null,null,this.index,this.currentFileInfo)];return b[0].mediaEmpty=!0,b},j.prototype.markReferenced=function(){var a,b=this.rules[0].rules;for(this.rules[0].markReferenced(),this.isReferenced=!0,a=0;b.length>a;a++)b[a].markReferenced&&b[a].markReferenced()},j.prototype.evalTop=function(a){var b=this;if(a.mediaBlocks.length>1){var d=this.emptySelectors();b=new c(d,a.mediaBlocks),b.multiMedia=!0}return delete a.mediaBlocks,delete a.mediaPath,b},j.prototype.evalNested=function(a){var b,e,f=a.mediaPath.concat([this]);for(b=0;f.length>b;b++)e=f[b].features instanceof d?f[b].features.value:f[b].features,f[b]=Array.isArray(e)?e:[e];return this.features=new d(this.permute(f).map(function(a){for(a=a.map(function(a){return a.toCSS?a:new g(a)}),b=a.length-1;b>0;b--)a.splice(b,0,new g("and"));return new h(a)})),new c([],[])},j.prototype.permute=function(a){if(0===a.length)return[];if(1===a.length)return a[0];for(var b=[],c=this.permute(a.slice(1)),d=0;c.length>d;d++)for(var e=0;a[0].length>e;e++)b.push([a[0][e]].concat(c[d]));return b},j.prototype.bubbleSelectors=function(a){a&&(this.rules=[new c(a.slice(0),[this.rules[0]])])},b.exports=j},{"./anonymous":43,"./directive":54,"./element":55,"./expression":56,"./ruleset":73,"./selector":74,"./value":78}],64:[function(a,b){var c=a("./node"),d=a("./selector"),e=a("./mixin-definition"),f=a("../functions/default"),g=function(a,b,c,e,f){this.selector=new d(a),this.arguments=b&&b.length?b:null,this.index=c,this.currentFileInfo=e,this.important=f};g.prototype=new c,g.prototype.type="MixinCall",g.prototype.accept=function(a){this.selector&&(this.selector=a.visit(this.selector)),this.arguments&&(this.arguments=a.visitArray(this.arguments))},g.prototype.eval=function(a){function b(b,c){var d,e;for(k=0;2>k;k++){for(w[k]=!0,f.value(k),d=0;c.length>d&&w[k];d++)e=c[d],e.matchCondition&&(w[k]=w[k]&&e.matchCondition(null,a));b.matchCondition&&(w[k]=w[k]&&b.matchCondition(h,a))}return w[0]||w[1]?w[0]!=w[1]?w[1]?z:A:y:x}var c,d,g,h,i,j,k,l,m,n,o,p,q,r,s,t=[],u=!1,v=[],w=[],x=-1,y=0,z=1,A=2;for(h=this.arguments&&this.arguments.map(function(b){return{name:b.name,value:b.value.eval(a)}}),s=function(b){return b.matchArgs(null,a)},i=0;a.frames.length>i;i++)if((c=a.frames[i].find(this.selector,null,s)).length>0){for(m=!0,j=0;c.length>j;j++){for(d=c[j].rule,g=c[j].path,l=!1,k=0;a.frames.length>k;k++)if(!(d instanceof e)&&d===(a.frames[k].originalRuleset||a.frames[k])){l=!0;break}l||d.matchArgs(h,a)&&(o={mixin:d,group:b(d,g)},o.group!==x&&v.push(o),u=!0)}for(f.reset(),q=[0,0,0],j=0;v.length>j;j++)q[v[j].group]++;if(q[y]>0)p=A;else if(p=z,q[z]+q[A]>1)throw{type:"Runtime",message:"Ambiguous use of `default()` found when matching for `"+this.format(h)+"`",index:this.index,filename:this.currentFileInfo.filename};for(j=0;v.length>j;j++)if(o=v[j].group,o===y||o===p)try{d=v[j].mixin,d instanceof e||(r=d.originalRuleset||d,d=new e("",[],d.rules,null,!1),d.originalRuleset=r),Array.prototype.push.apply(t,d.evalCall(a,h,this.important).rules)}catch(B){throw{message:B.message,index:this.index,filename:this.currentFileInfo.filename,stack:B.stack}}if(u){if(!this.currentFileInfo||!this.currentFileInfo.reference)for(i=0;t.length>i;i++)n=t[i],n.markReferenced&&n.markReferenced();return t}}throw m?{type:"Runtime",message:"No matching definition was found for `"+this.format(h)+"`",index:this.index,filename:this.currentFileInfo.filename}:{type:"Name",message:this.selector.toCSS().trim()+" is undefined",index:this.index,filename:this.currentFileInfo.filename}},g.prototype.format=function(a){return this.selector.toCSS().trim()+"("+(a?a.map(function(a){var b="";return a.name&&(b+=a.name+":"),b+=a.value.toCSS?a.value.toCSS():"???"}).join(", "):"")+")"},b.exports=g},{"../functions/default":19,"./mixin-definition":65,"./node":67,"./selector":74}],65:[function(a,b){var c=a("./selector"),d=a("./element"),e=a("./ruleset"),f=a("./rule"),g=a("./expression"),h=a("../contexts"),i=function(a,b,e,f,g,h){this.name=a,this.selectors=[new c([new d(null,a,this.index,this.currentFileInfo)])],this.params=b,this.condition=f,this.variadic=g,this.arity=b.length,this.rules=e,this._lookups={},this.required=b.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.frames=h};i.prototype=new e,i.prototype.type="MixinDefinition",i.prototype.evalFirst=!0,i.prototype.accept=function(a){this.params&&this.params.length&&(this.params=a.visitArray(this.params)),this.rules=a.visitArray(this.rules),this.condition&&(this.condition=a.visit(this.condition))},i.prototype.evalParams=function(a,b,c,d){var i,j,k,l,m,n,o,p,q=new e(null,null),r=this.params.slice(0),s=0;if(b=new h.Eval(b,[q].concat(b.frames)),c)for(c=c.slice(0),s=c.length,k=0;s>k;k++)if(j=c[k],n=j&&j.name){for(o=!1,l=0;r.length>l;l++)if(!d[l]&&n===r[l].name){d[l]=j.value.eval(a),q.prependRule(new f(n,j.value.eval(a))),o=!0;break}if(o){c.splice(k,1),k--;continue}throw{type:"Runtime",message:"Named argument for "+this.name+" "+c[k].name+" not found"}}for(p=0,k=0;r.length>k;k++)if(!d[k]){if(j=c&&c[p],n=r[k].name)if(r[k].variadic){for(i=[],l=p;s>l;l++)i.push(c[l].value.eval(a));q.prependRule(new f(n,new g(i).eval(a)))}else{if(m=j&&j.value)m=m.eval(a);else{if(!r[k].value)throw{type:"Runtime",message:"wrong number of arguments for "+this.name+" ("+s+" for "+this.arity+")"};m=r[k].value.eval(b),q.resetCache()}q.prependRule(new f(n,m)),d[k]=m}if(r[k].variadic&&c)for(l=p;s>l;l++)d[l]=c[l].value.eval(a);p++}return q},i.prototype.eval=function(a){return new i(this.name,this.params,this.rules,this.condition,this.variadic,this.frames||a.frames.slice(0))},i.prototype.evalCall=function(a,b,c){var d,i,j=[],k=this.frames?this.frames.concat(a.frames):a.frames,l=this.evalParams(a,new h.Eval(a,k),b,j);return l.prependRule(new f("@arguments",new g(j).eval(a))),d=this.rules.slice(0),i=new e(null,d),i.originalRuleset=this,i=i.eval(new h.Eval(a,[this,l].concat(k))),c&&(i=this.makeImportant.apply(i)),i},i.prototype.matchCondition=function(a,b){return this.condition&&!this.condition.eval(new h.Eval(b,[this.evalParams(b,new h.Eval(b,this.frames?this.frames.concat(b.frames):b.frames),a,[])].concat(this.frames).concat(b.frames)))?!1:!0},i.prototype.matchArgs=function(a,b){var c,d=a&&a.length||0;if(this.variadic){if(this.required-1>d)return!1}else{if(this.required>d)return!1;if(d>this.params.length)return!1}c=Math.min(d,this.arity);for(var e=0;c>e;e++)if(!this.params[e].name&&!this.params[e].variadic&&a[e].value.eval(b).toCSS()!=this.params[e].value.eval(b).toCSS())return!1;return!0},b.exports=i},{"../contexts":10,"./element":55,"./expression":56,"./rule":71,"./ruleset":73,"./selector":74}],66:[function(a,b){var c=a("./node"),d=a("./operation"),e=a("./dimension"),f=function(a){this.value=a};f.prototype=new c,f.prototype.type="Negative",f.prototype.genCSS=function(a,b){b.add("-"),this.value.genCSS(a,b)},f.prototype.eval=function(a){return a.isMathOn()?new d("*",[new e(-1),this.value]).eval(a):new f(this.value.eval(a))},b.exports=f},{"./dimension":53,"./node":67,"./operation":68}],67:[function(a,b){var c=function(){};c.prototype.toCSS=function(a){var b=[];return this.genCSS(a,{add:function(a){b.push(a)},isEmpty:function(){return 0===b.length}}),b.join("")},c.prototype.genCSS=function(a,b){b.add(this.value)},c.prototype.accept=function(a){this.value=a.visit(this.value)},c.prototype.eval=function(){return this},c.prototype._operate=function(a,b,c,d){switch(b){case"+":return c+d;case"-":return c-d;case"*":return c*d;case"/":return c/d}},c.prototype.fround=function(a,b){var c=a&&a.numPrecision;return null==c?b:Number((b+2e-16).toFixed(c))},c.compare=function(a,b){if(a.compare&&"Quoted"!==b.type&&"Anonymous"!==b.type)return a.compare(b);if(b.compare)return-b.compare(a);if(a.type!==b.type)return void 0;if(a=a.value,b=b.value,!Array.isArray(a))return a===b?0:void 0;if(a.length!==b.length)return void 0;for(var d=0;a.length>d;d++)if(0!==c.compare(a[d],b[d]))return void 0;return 0},c.numericCompare=function(a,b){return b>a?-1:a===b?0:a>b?1:void 0},b.exports=c},{}],68:[function(a,b){var c=a("./node"),d=a("./color"),e=a("./dimension"),f=function(a,b,c){this.op=a.trim(),this.operands=b,this.isSpaced=c};f.prototype=new c,f.prototype.type="Operation",f.prototype.accept=function(a){this.operands=a.visit(this.operands)},f.prototype.eval=function(a){var b=this.operands[0].eval(a),c=this.operands[1].eval(a);if(a.isMathOn()){if(b instanceof e&&c instanceof d&&(b=b.toColor()),c instanceof e&&b instanceof d&&(c=c.toColor()),!b.operate)throw{type:"Operation",message:"Operation on an invalid type"};return b.operate(a,this.op,c)}return new f(this.op,[b,c],this.isSpaced)},f.prototype.genCSS=function(a,b){this.operands[0].genCSS(a,b),this.isSpaced&&b.add(" "),b.add(this.op),this.isSpaced&&b.add(" "),this.operands[1].genCSS(a,b)},b.exports=f},{"./color":47,"./dimension":53,"./node":67}],69:[function(a,b){var c=a("./node"),d=function(a){this.value=a};d.prototype=new c,d.prototype.type="Paren",d.prototype.genCSS=function(a,b){b.add("("),this.value.genCSS(a,b),b.add(")")},d.prototype.eval=function(a){return new d(this.value.eval(a))},b.exports=d},{"./node":67}],70:[function(a,b){var c=a("./node"),d=a("./js-eval-node"),e=a("./variable"),f=function(a,b,c,d,e){this.escaped=null==c?!0:c,this.value=b||"",this.quote=a.charAt(0),this.index=d,this.currentFileInfo=e};f.prototype=new d,f.prototype.type="Quoted",f.prototype.genCSS=function(a,b){this.escaped||b.add(this.quote,this.currentFileInfo,this.index),b.add(this.value),this.escaped||b.add(this.quote)},f.prototype.containsVariables=function(){return this.value.match(/(`([^`]+)`)|@\{([\w-]+)\}/)},f.prototype.eval=function(a){function b(a,b,c){var d=a;do a=d,d=a.replace(b,c);while(a!==d);return d}var c=this,d=this.value,g=function(b,d){return String(c.evaluateJavaScript(d,a))},h=function(b,d){var g=new e("@"+d,c.index,c.currentFileInfo).eval(a,!0);
+return g instanceof f?g.value:g.toCSS()};return d=b(d,/`([^`]+)`/g,g),d=b(d,/@\{([\w-]+)\}/g,h),new f(this.quote+d+this.quote,d,this.escaped,this.index,this.currentFileInfo)},f.prototype.compare=function(a){return"Quoted"!==a.type||this.escaped||a.escaped?a.toCSS&&this.toCSS()===a.toCSS()?0:void 0:c.numericCompare(this.value,a.value)},b.exports=f},{"./js-eval-node":61,"./node":67,"./variable":79}],71:[function(a,b){function c(a,b){var c,d="",e=b.length,f={add:function(a){d+=a}};for(c=0;e>c;c++)b[c].eval(a).genCSS(a,f);return d}var d=a("./node"),e=a("./value"),f=a("./keyword"),g=function(a,b,c,f,g,h,i,j){this.name=a,this.value=b instanceof d?b:new e([b]),this.important=c?" "+c.trim():"",this.merge=f,this.index=g,this.currentFileInfo=h,this.inline=i||!1,this.variable=void 0!==j?j:a.charAt&&"@"===a.charAt(0)};g.prototype=new d,g.prototype.type="Rule",g.prototype.genCSS=function(a,b){b.add(this.name+(a.compress?":":": "),this.currentFileInfo,this.index);try{this.value.genCSS(a,b)}catch(c){throw c.index=this.index,c.filename=this.currentFileInfo.filename,c}b.add(this.important+(this.inline||a.lastRule&&a.compress?"":";"),this.currentFileInfo,this.index)},g.prototype.eval=function(a){var b,d=!1,e=this.name,h=this.variable;"string"!=typeof e&&(e=1===e.length&&e[0]instanceof f?e[0].value:c(a,e),h=!1),"font"!==e||a.strictMath||(d=!0,a.strictMath=!0);try{if(a.importantScope.push({}),b=this.value.eval(a),!this.variable&&"DetachedRuleset"===b.type)throw{message:"Rulesets cannot be evaluated on a property.",index:this.index,filename:this.currentFileInfo.filename};var i=this.important,j=a.importantScope.pop();return!i&&j.important&&(i=j.important),new g(e,b,i,this.merge,this.index,this.currentFileInfo,this.inline,h)}catch(k){throw"number"!=typeof k.index&&(k.index=this.index,k.filename=this.currentFileInfo.filename),k}finally{d&&(a.strictMath=!1)}},g.prototype.makeImportant=function(){return new g(this.name,this.value,"!important",this.merge,this.index,this.currentFileInfo,this.inline)},b.exports=g},{"./keyword":62,"./node":67,"./value":78}],72:[function(a,b){var c=a("./node"),d=a("./variable"),e=function(a){this.variable=a};e.prototype=new c,e.prototype.type="RulesetCall",e.prototype.eval=function(a){var b=new d(this.variable).eval(a);return b.callEval(a)},b.exports=e},{"./node":67,"./variable":79}],73:[function(a,b){var c=a("./node"),d=a("./rule"),e=a("./selector"),f=a("./element"),g=a("./paren"),h=a("../contexts"),i=a("../functions/default"),j=a("./debug-info"),k=function(a,b,c){this.selectors=a,this.rules=b,this._lookups={},this.strictImports=c};k.prototype=new c,k.prototype.type="Ruleset",k.prototype.isRuleset=!0,k.prototype.isRulesetLike=!0,k.prototype.accept=function(a){this.paths?a.visitArray(this.paths,!0):this.selectors&&(this.selectors=a.visitArray(this.selectors)),this.rules&&this.rules.length&&(this.rules=a.visitArray(this.rules))},k.prototype.eval=function(a){var b,c,e,f,g=this.selectors,h=!1;if(g&&(c=g.length)){for(b=[],i.error({type:"Syntax",message:"it is currently only allowed in parametric mixin guards,"}),f=0;c>f;f++)e=g[f].eval(a),b.push(e),e.evaldCondition&&(h=!0);i.reset()}else h=!0;var j,l,m=this.rules?this.rules.slice(0):null,n=new k(b,m,this.strictImports);n.originalRuleset=this,n.root=this.root,n.firstRoot=this.firstRoot,n.allowImports=this.allowImports,this.debugInfo&&(n.debugInfo=this.debugInfo),h||(m.length=0);var o=a.frames;o.unshift(n);var p=a.selectors;p||(a.selectors=p=[]),p.unshift(this.selectors),(n.root||n.allowImports||!n.strictImports)&&n.evalImports(a);var q=n.rules,r=q?q.length:0;for(f=0;r>f;f++)q[f].evalFirst&&(q[f]=q[f].eval(a));var s=a.mediaBlocks&&a.mediaBlocks.length||0;for(f=0;r>f;f++)"MixinCall"===q[f].type?(m=q[f].eval(a).filter(function(a){return a instanceof d&&a.variable?!n.variable(a.name):!0}),q.splice.apply(q,[f,1].concat(m)),r+=m.length-1,f+=m.length-1,n.resetCache()):"RulesetCall"===q[f].type&&(m=q[f].eval(a).rules.filter(function(a){return a instanceof d&&a.variable?!1:!0}),q.splice.apply(q,[f,1].concat(m)),r+=m.length-1,f+=m.length-1,n.resetCache());for(f=0;q.length>f;f++)j=q[f],j.evalFirst||(q[f]=j=j.eval?j.eval(a):j);for(f=0;q.length>f;f++)if(j=q[f],j instanceof k&&j.selectors&&1===j.selectors.length&&j.selectors[0].isJustParentSelector()){q.splice(f--,1);for(var t=0;j.rules.length>t;t++)l=j.rules[t],l instanceof d&&l.variable||q.splice(++f,0,l)}if(o.shift(),p.shift(),a.mediaBlocks)for(f=s;a.mediaBlocks.length>f;f++)a.mediaBlocks[f].bubbleSelectors(b);return n},k.prototype.evalImports=function(a){var b,c,d=this.rules;if(d)for(b=0;d.length>b;b++)"Import"===d[b].type&&(c=d[b].eval(a),c&&c.length?(d.splice.apply(d,[b,1].concat(c)),b+=c.length-1):d.splice(b,1,c),this.resetCache())},k.prototype.makeImportant=function(){return this.rules=this.rules.map(function(a){return a.makeImportant?a.makeImportant():a}),this},k.prototype.matchArgs=function(a){return!a||0===a.length},k.prototype.matchCondition=function(a,b){var c=this.selectors[this.selectors.length-1];return c.evaldCondition?c.condition&&!c.condition.eval(new h.Eval(b,b.frames))?!1:!0:!1},k.prototype.resetCache=function(){this._rulesets=null,this._variables=null,this._lookups={}},k.prototype.variables=function(){return this._variables||(this._variables=this.rules?this.rules.reduce(function(a,b){if(b instanceof d&&b.variable===!0&&(a[b.name]=b),"Import"===b.type&&b.root&&b.root.variables){var c=b.root.variables();for(var e in c)c.hasOwnProperty(e)&&(a[e]=c[e])}return a},{}):{}),this._variables},k.prototype.variable=function(a){return this.variables()[a]},k.prototype.rulesets=function(){if(!this.rules)return null;var a,b,c=[],d=this.rules,e=d.length;for(a=0;e>a;a++)b=d[a],b.isRuleset&&c.push(b);return c},k.prototype.prependRule=function(a){var b=this.rules;b?b.unshift(a):this.rules=[a]},k.prototype.find=function(a,b,c){b=b||this;var d,f,g=[],h=a.toCSS();return h in this._lookups?this._lookups[h]:(this.rulesets().forEach(function(h){if(h!==b)for(var i=0;h.selectors.length>i;i++)if(d=a.match(h.selectors[i])){if(a.elements.length>d){if(!c||c(h)){f=h.find(new e(a.elements.slice(d)),b,c);for(var j=0;f.length>j;++j)f[j].path.push(h);Array.prototype.push.apply(g,f)}}else g.push({rule:h,path:[]});break}}),this._lookups[h]=g,g)},k.prototype.genCSS=function(a,b){function c(a,b){return"boolean"==typeof a.isRulesetLike?a.isRulesetLike:"function"==typeof a.isRulesetLike?a.isRulesetLike(b):!1}var d,e,f,g,h,i,k=[],l=[],m=[];a.tabLevel=a.tabLevel||0,this.root||a.tabLevel++;var n,o=a.compress?"":Array(a.tabLevel+1).join("  "),p=a.compress?"":Array(a.tabLevel).join("  ");for(d=0;this.rules.length>d;d++)h=this.rules[d],c(h,this.root)?m.push(h):h.isCharset&&h.isCharset()?k.push(h):l.push(h);if(l=k.concat(l),!this.root){g=j(a,this,p),g&&(b.add(g),b.add(p));var q,r=this.paths,s=r.length;for(n=a.compress?",":",\n"+p,d=0;s>d;d++)if(i=r[d],q=i.length)for(d>0&&b.add(n),a.firstSelector=!0,i[0].genCSS(a,b),a.firstSelector=!1,e=1;q>e;e++)i[e].genCSS(a,b);b.add((a.compress?"{":" {\n")+o)}for(d=0;l.length>d;d++)h=l[d],d+1!==l.length||this.root&&0!==m.length&&!this.firstRoot||(a.lastRule=!0),h.genCSS?h.genCSS(a,b):h.value&&b.add(h.value.toString()),a.lastRule?a.lastRule=!1:b.add(a.compress?"":"\n"+o);if(this.root||(b.add(a.compress?"}":"\n"+p+"}"),a.tabLevel--),n=(a.compress?"":"\n")+(this.root?o:p),f=m.length)for(l.length&&n&&b.add(n),m[0].genCSS(a,b),d=1;f>d;d++)n&&b.add(n),m[d].genCSS(a,b);b.isEmpty()||a.compress||!this.firstRoot||b.add("\n")},k.prototype.markReferenced=function(){var a;if(this.selectors)for(a=0;this.selectors.length>a;a++)this.selectors[a].markReferenced();if(this.rules)for(a=0;this.rules.length>a;a++)this.rules[a].markReferenced&&this.rules[a].markReferenced()},k.prototype.getIsReferenced=function(){var a,b,c,d;if(this.paths)for(a=0;this.paths.length>a;a++)for(c=this.paths[a],b=0;c.length>b;b++)if(c[b].getIsReferenced&&c[b].getIsReferenced())return!0;if(this.selectors)for(a=0;this.selectors.length>a;a++)if(d=this.selectors[a],d.getIsReferenced&&d.getIsReferenced())return!0;return!1},k.prototype.joinSelectors=function(a,b,c){for(var d=0;c.length>d;d++)this.joinSelector(a,b,c[d])},k.prototype.joinSelector=function(a,b,c){function d(a,b){var c,d;if(0===a.length)c=new g(a[0]);else{var h=[];for(d=0;a.length>d;d++)h.push(new f(null,a[d],b.index,b.currentFileInfo));c=new g(new e(h))}return c}function h(a,b){var c,d;return c=new f(null,a,b.index,b.currentFileInfo),d=new e([c])}function i(a,b,c){function e(a){var b;return"Paren"!==a.value.type?null:(b=a.value.value,"Selector"!==b.type?null:b)}var g,m,n,o,p,q,r,s,t=!1;for(o=[],p=[[]],g=0;c.elements.length>g;g++)if(s=c.elements[g],"&"!==s.value){var u=e(s);if(null!=u){l(o,p);var v,w=[],x=[];for(v=i(w,b,u),t=t||v,n=0;w.length>n;n++){var y=h(d(w[n],s),s);k(p,[y],s,c,x)}p=x,o=[]}else o.push(s)}else{for(t=!0,q=[],l(o,p),m=0;p.length>m;m++)if(r=p[m],0===b.length)r.length>0&&r[0].elements.push(new f(s.combinator,"",s.index,s.currentFileInfo)),q.push(r);else for(n=0;b.length>n;n++){var z=j(r,b[n],s,c);q.push(z)}p=q,o=[]}for(l(o,p),g=0;p.length>g;g++)p[g].length>0&&a.push(p[g]);return t}function j(a,b,c,d){var e,g,h;if(e=[],a.length>0?(e=a.slice(0),g=e.pop(),h=d.createDerived(g.elements.slice(0))):h=d.createDerived([]),b.length>0){var i=c.combinator,j=b[0].elements[0];i.emptyOrWhitespace&&!j.combinator.emptyOrWhitespace&&(i=j.combinator),h.elements.push(new f(i,j.value,c.index,c.currentFileInfo)),h.elements=h.elements.concat(b[0].elements.slice(1))}return 0!==h.elements.length&&e.push(h),b.length>1&&(e=e.concat(b.slice(1))),e}function k(a,b,c,d,e){var f;for(f=0;a.length>f;f++){var g=j(a[f],b,c,d);e.push(g)}return e}function l(a,b){var c,d;if(0!==a.length){if(0===b.length)return void b.push([new e(a)]);for(c=0;b.length>c;c++)d=b[c],d.length>0?d[d.length-1]=d[d.length-1].createDerived(d[d.length-1].elements.concat(a)):d.push(new e(a))}}var m,n,o;if(n=[],o=i(n,b,c),!o)if(b.length>0)for(n=[],m=0;b.length>m;m++)n.push(b[m].concat(c));else n=[[c]];for(m=0;n.length>m;m++)a.push(n[m])},b.exports=k},{"../contexts":10,"../functions/default":19,"./debug-info":51,"./element":55,"./node":67,"./paren":69,"./rule":71,"./selector":74}],74:[function(a,b){var c=a("./node"),d=function(a,b,c,d,e,f){this.elements=a,this.extendList=b,this.condition=c,this.currentFileInfo=e||{},this.isReferenced=f,c||(this.evaldCondition=!0)};d.prototype=new c,d.prototype.type="Selector",d.prototype.accept=function(a){this.elements&&(this.elements=a.visitArray(this.elements)),this.extendList&&(this.extendList=a.visitArray(this.extendList)),this.condition&&(this.condition=a.visit(this.condition))},d.prototype.createDerived=function(a,b,c){c=null!=c?c:this.evaldCondition;var e=new d(a,b||this.extendList,null,this.index,this.currentFileInfo,this.isReferenced);return e.evaldCondition=c,e.mediaEmpty=this.mediaEmpty,e},d.prototype.match=function(a){var b,c,d=this.elements,e=d.length;if(a.CacheElements(),b=a._elements.length,0===b||b>e)return 0;for(c=0;b>c;c++)if(d[c].value!==a._elements[c])return 0;return b},d.prototype.CacheElements=function(){if(!this._elements){var a=this.elements.map(function(a){return a.combinator.value+(a.value.value||a.value)}).join("").match(/[,&#\*\.\w-]([\w-]|(\\.))*/g);a?"&"===a[0]&&a.shift():a=[],this._elements=a}},d.prototype.isJustParentSelector=function(){return!this.mediaEmpty&&1===this.elements.length&&"&"===this.elements[0].value&&(" "===this.elements[0].combinator.value||""===this.elements[0].combinator.value)},d.prototype.eval=function(a){var b=this.condition&&this.condition.eval(a),c=this.elements,d=this.extendList;return c=c&&c.map(function(b){return b.eval(a)}),d=d&&d.map(function(b){return b.eval(a)}),this.createDerived(c,d,b)},d.prototype.genCSS=function(a,b){var c,d;if(a&&a.firstSelector||""!==this.elements[0].combinator.value||b.add(" ",this.currentFileInfo,this.index),!this._css)for(c=0;this.elements.length>c;c++)d=this.elements[c],d.genCSS(a,b)},d.prototype.markReferenced=function(){this.isReferenced=!0},d.prototype.getIsReferenced=function(){return!this.currentFileInfo.reference||this.isReferenced},d.prototype.getIsOutput=function(){return this.evaldCondition},b.exports=d},{"./node":67}],75:[function(a,b){var c=a("./node"),d=function(a){this.value=a};d.prototype=new c,d.prototype.type="UnicodeDescriptor",b.exports=d},{"./node":67}],76:[function(a,b){var c=a("./node"),d=a("../data/unit-conversions"),e=function(a,b,c){this.numerator=a?a.slice(0).sort():[],this.denominator=b?b.slice(0).sort():[],c?this.backupUnit=c:a&&a.length&&(this.backupUnit=a[0])};e.prototype=new c,e.prototype.type="Unit",e.prototype.clone=function(){return new e(this.numerator.slice(0),this.denominator.slice(0),this.backupUnit)},e.prototype.genCSS=function(a,b){var c=a&&a.strictUnits;1===this.numerator.length?b.add(this.numerator[0]):!c&&this.backupUnit&&b.add(this.backupUnit)},e.prototype.toString=function(){var a,b=this.numerator.join("*");for(a=0;this.denominator.length>a;a++)b+="/"+this.denominator[a];return b},e.prototype.compare=function(a){return this.is(a.toString())?0:void 0},e.prototype.is=function(a){return this.toString().toUpperCase()===a.toUpperCase()},e.prototype.isLength=function(){return Boolean(this.toCSS().match(/px|em|%|in|cm|mm|pc|pt|ex/))},e.prototype.isEmpty=function(){return 0===this.numerator.length&&0===this.denominator.length},e.prototype.isSingular=function(){return 1>=this.numerator.length&&0===this.denominator.length},e.prototype.map=function(a){var b;for(b=0;this.numerator.length>b;b++)this.numerator[b]=a(this.numerator[b],!1);for(b=0;this.denominator.length>b;b++)this.denominator[b]=a(this.denominator[b],!0)},e.prototype.usedUnits=function(){var a,b,c={};b=function(b){return a.hasOwnProperty(b)&&!c[e]&&(c[e]=b),b};for(var e in d)d.hasOwnProperty(e)&&(a=d[e],this.map(b));return c},e.prototype.cancel=function(){var a,b,c={};for(b=0;this.numerator.length>b;b++)a=this.numerator[b],c[a]=(c[a]||0)+1;for(b=0;this.denominator.length>b;b++)a=this.denominator[b],c[a]=(c[a]||0)-1;this.numerator=[],this.denominator=[];for(a in c)if(c.hasOwnProperty(a)){var d=c[a];if(d>0)for(b=0;d>b;b++)this.numerator.push(a);else if(0>d)for(b=0;-d>b;b++)this.denominator.push(a)}this.numerator.sort(),this.denominator.sort()},b.exports=e},{"../data/unit-conversions":13,"./node":67}],77:[function(a,b){var c=a("./node"),d=function(a,b,c,d){this.value=a,this.currentFileInfo=c,this.index=b,this.isEvald=d};d.prototype=new c,d.prototype.type="Url",d.prototype.accept=function(a){this.value=a.visit(this.value)},d.prototype.genCSS=function(a,b){b.add("url("),this.value.genCSS(a,b),b.add(")")},d.prototype.eval=function(a){var b,c=this.value.eval(a);if(!this.isEvald&&(b=this.currentFileInfo&&this.currentFileInfo.rootpath,b&&"string"==typeof c.value&&a.isPathRelative(c.value)&&(c.quote||(b=b.replace(/[\(\)'"\s]/g,function(a){return"\\"+a})),c.value=b+c.value),c.value=a.normalizePath(c.value),a.urlArgs&&!c.value.match(/^\s*data:/))){var e=-1===c.value.indexOf("?")?"?":"&",f=e+a.urlArgs;-1!==c.value.indexOf("#")?c.value=c.value.replace("#",f+"#"):c.value+=f}return new d(c,this.index,this.currentFileInfo,!0)},b.exports=d},{"./node":67}],78:[function(a,b){var c=a("./node"),d=function(a){if(this.value=a,!a)throw new Error("Value requires an array argument")};d.prototype=new c,d.prototype.type="Value",d.prototype.accept=function(a){this.value&&(this.value=a.visitArray(this.value))},d.prototype.eval=function(a){return 1===this.value.length?this.value[0].eval(a):new d(this.value.map(function(b){return b.eval(a)}))},d.prototype.genCSS=function(a,b){var c;for(c=0;this.value.length>c;c++)this.value[c].genCSS(a,b),this.value.length>c+1&&b.add(a&&a.compress?",":", ")},b.exports=d},{"./node":67}],79:[function(a,b){var c=a("./node"),d=function(a,b,c){this.name=a,this.index=b,this.currentFileInfo=c||{}};d.prototype=new c,d.prototype.type="Variable",d.prototype.eval=function(a){var b,c=this.name;if(0===c.indexOf("@@")&&(c="@"+new d(c.slice(1),this.index,this.currentFileInfo).eval(a).value),this.evaluating)throw{type:"Name",message:"Recursive variable definition for "+c,filename:this.currentFileInfo.filename,index:this.index};if(this.evaluating=!0,b=this.find(a.frames,function(b){var d=b.variable(c);if(d){if(d.important){var e=a.importantScope[a.importantScope.length-1];e.important=d.important}return d.value.eval(a)}}))return this.evaluating=!1,b;throw{type:"Name",message:"variable "+c+" is undefined",filename:this.currentFileInfo.filename,index:this.index}},d.prototype.find=function(a,b){for(var c,d=0;a.length>d;d++)if(c=b.call(a,a[d]))return c;return null},b.exports=d},{"./node":67}],80:[function(a,b){b.exports={getLocation:function(a,b){for(var c=a+1,d=null,e=-1;--c>=0&&"\n"!==b.charAt(c);)e++;return"number"==typeof a&&(d=(b.slice(0,a).match(/\n/g)||"").length),{line:d,column:e}}}},{}],81:[function(a,b){var c=a("../tree"),d=a("./visitor"),e=a("../logger"),f=function(){this._visitor=new d(this),this.contexts=[],this.allExtendsStack=[[]]};f.prototype={run:function(a){return a=this._visitor.visit(a),a.allExtends=this.allExtendsStack[0],a},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitRuleset:function(a){if(!a.root){var b,d,e,f,g=[],h=a.rules,i=h?h.length:0;for(b=0;i>b;b++)a.rules[b]instanceof c.Extend&&(g.push(h[b]),a.extendOnEveryPath=!0);var j=a.paths;for(b=0;j.length>b;b++){var k=j[b],l=k[k.length-1],m=l.extendList;for(f=m?m.slice(0).concat(g):g,f&&(f=f.map(function(a){return a.clone()})),d=0;f.length>d;d++)this.foundExtends=!0,e=f[d],e.findSelfSelectors(k),e.ruleset=a,0===d&&(e.firstExtendOnThisSelectorPath=!0),this.allExtendsStack[this.allExtendsStack.length-1].push(e)}this.contexts.push(a.selectors)}},visitRulesetOut:function(a){a.root||(this.contexts.length=this.contexts.length-1)},visitMedia:function(a){a.allExtends=[],this.allExtendsStack.push(a.allExtends)},visitMediaOut:function(){this.allExtendsStack.length=this.allExtendsStack.length-1},visitDirective:function(a){a.allExtends=[],this.allExtendsStack.push(a.allExtends)},visitDirectiveOut:function(){this.allExtendsStack.length=this.allExtendsStack.length-1}};var g=function(){this._visitor=new d(this)};g.prototype={run:function(a){var b=new f;if(this.extendIndicies={},b.run(a),!b.foundExtends)return a;a.allExtends=a.allExtends.concat(this.doExtendChaining(a.allExtends,a.allExtends)),this.allExtendsStack=[a.allExtends];var c=this._visitor.visit(a);return this.checkExtendsForNonMatched(a.allExtends),c},checkExtendsForNonMatched:function(a){var b=this.extendIndicies;a.filter(function(a){return!a.hasFoundMatches&&1==a.parent_ids.length}).forEach(function(a){var c="_unknown_";try{c=a.selector.toCSS({})}catch(d){}b[a.index+" "+c]||(b[a.index+" "+c]=!0,e.warn("extend '"+c+"' has no matches"))})},doExtendChaining:function(a,b,d){var e,f,g,h,i,j,k,l,m=[],n=this;for(d=d||0,e=0;a.length>e;e++)for(f=0;b.length>f;f++)j=a[e],k=b[f],j.parent_ids.indexOf(k.object_id)>=0||(i=[k.selfSelectors[0]],g=n.findMatch(j,i),g.length&&(j.hasFoundMatches=!0,j.selfSelectors.forEach(function(a){h=n.extendSelector(g,i,a),l=new c.Extend(k.selector,k.option,0),l.selfSelectors=h,h[h.length-1].extendList=[l],m.push(l),l.ruleset=k.ruleset,l.parent_ids=l.parent_ids.concat(k.parent_ids,j.parent_ids),k.firstExtendOnThisSelectorPath&&(l.firstExtendOnThisSelectorPath=!0,k.ruleset.paths.push(h))})));if(m.length){if(this.extendChainCount++,d>100){var o="{unable to calculate}",p="{unable to calculate}";try{o=m[0].selfSelectors[0].toCSS(),p=m[0].selector.toCSS()}catch(q){}throw{message:"extend circular reference detected. One of the circular extends is currently:"+o+":extend("+p+")"}}return m.concat(n.doExtendChaining(m,b,d+1))}return m},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitSelector:function(a,b){b.visitDeeper=!1},visitRuleset:function(a){if(!a.root){var b,c,d,e,f=this.allExtendsStack[this.allExtendsStack.length-1],g=[],h=this;for(d=0;f.length>d;d++)for(c=0;a.paths.length>c;c++)if(e=a.paths[c],!a.extendOnEveryPath){var i=e[e.length-1].extendList;i&&i.length||(b=this.findMatch(f[d],e),b.length&&(f[d].hasFoundMatches=!0,f[d].selfSelectors.forEach(function(a){g.push(h.extendSelector(b,e,a))})))}a.paths=a.paths.concat(g)}},findMatch:function(a,b){var c,d,e,f,g,h,i,j=this,k=a.selector.elements,l=[],m=[];for(c=0;b.length>c;c++)for(d=b[c],e=0;d.elements.length>e;e++)for(f=d.elements[e],(a.allowBefore||0===c&&0===e)&&l.push({pathIndex:c,index:e,matched:0,initialCombinator:f.combinator}),h=0;l.length>h;h++)i=l[h],g=f.combinator.value,""===g&&0===e&&(g=" "),!j.isElementValuesEqual(k[i.matched].value,f.value)||i.matched>0&&k[i.matched].combinator.value!==g?i=null:i.matched++,i&&(i.finished=i.matched===k.length,i.finished&&!a.allowAfter&&(d.elements.length>e+1||b.length>c+1)&&(i=null)),i?i.finished&&(i.length=k.length,i.endPathIndex=c,i.endPathElementIndex=e+1,l.length=0,m.push(i)):(l.splice(h,1),h--);return m},isElementValuesEqual:function(a,b){if("string"==typeof a||"string"==typeof b)return a===b;if(a instanceof c.Attribute)return a.op!==b.op||a.key!==b.key?!1:a.value&&b.value?(a=a.value.value||a.value,b=b.value.value||b.value,a===b):a.value||b.value?!1:!0;if(a=a.value,b=b.value,a instanceof c.Selector){if(!(b instanceof c.Selector)||a.elements.length!==b.elements.length)return!1;for(var d=0;a.elements.length>d;d++){if(a.elements[d].combinator.value!==b.elements[d].combinator.value&&(0!==d||(a.elements[d].combinator.value||" ")!==(b.elements[d].combinator.value||" ")))return!1;if(!this.isElementValuesEqual(a.elements[d].value,b.elements[d].value))return!1}return!0}return!1},extendSelector:function(a,b,d){var e,f,g,h,i,j=0,k=0,l=[];for(e=0;a.length>e;e++)h=a[e],f=b[h.pathIndex],g=new c.Element(h.initialCombinator,d.elements[0].value,d.elements[0].index,d.elements[0].currentFileInfo),h.pathIndex>j&&k>0&&(l[l.length-1].elements=l[l.length-1].elements.concat(b[j].elements.slice(k)),k=0,j++),i=f.elements.slice(k,h.index).concat([g]).concat(d.elements.slice(1)),j===h.pathIndex&&e>0?l[l.length-1].elements=l[l.length-1].elements.concat(i):(l=l.concat(b.slice(j,h.pathIndex)),l.push(new c.Selector(i))),j=h.endPathIndex,k=h.endPathElementIndex,k>=b[j].elements.length&&(k=0,j++);return b.length>j&&k>0&&(l[l.length-1].elements=l[l.length-1].elements.concat(b[j].elements.slice(k)),j++),l=l.concat(b.slice(j,b.length))},visitRulesetOut:function(){},visitMedia:function(a){var b=a.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);b=b.concat(this.doExtendChaining(b,a.allExtends)),this.allExtendsStack.push(b)},visitMediaOut:function(){var a=this.allExtendsStack.length-1;this.checkExtendsForNonMatched(this.allExtendsStack[a]),this.allExtendsStack.length=a},visitDirective:function(a){var b=a.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);b=b.concat(this.doExtendChaining(b,a.allExtends)),this.allExtendsStack.push(b)},visitDirectiveOut:function(){var a=this.allExtendsStack.length-1;this.checkExtendsForNonMatched(this.allExtendsStack[a]),this.allExtendsStack.length=a}},b.exports=g},{"../logger":31,"../tree":59,"./visitor":87}],82:[function(a,b){function c(a){this.imports=[],this.variableImports=[],this._onSequencerEmpty=a,this._currentDepth=0}c.prototype.addImport=function(a){var b=this,c={callback:a,args:null,isReady:!1};return this.imports.push(c),function(){c.args=Array.prototype.slice.call(arguments,0),c.isReady=!0,b.tryRun()}},c.prototype.addVariableImport=function(a){this.variableImports.push(a)},c.prototype.tryRun=function(){this._currentDepth++;try{for(;;){for(;this.imports.length>0;){var a=this.imports[0];if(!a.isReady)return;this.imports=this.imports.slice(1),a.callback.apply(null,a.args)}if(0===this.variableImports.length)break;var b=this.variableImports[0];this.variableImports=this.variableImports.slice(1),b()}}finally{this._currentDepth--}0===this._currentDepth&&this._onSequencerEmpty&&this._onSequencerEmpty()},b.exports=c},{}],83:[function(a,b){var c=a("../contexts"),d=a("./visitor"),e=a("./import-sequencer"),f=function(a,b){this._visitor=new d(this),this._importer=a,this._finish=b,this.context=new c.Eval,this.importCount=0,this.onceFileDetectionMap={},this.recursionDetector={},this._sequencer=new e(this._onSequencerEmpty.bind(this))};f.prototype={isReplacing:!1,run:function(a){try{this._visitor.visit(a)}catch(b){this.error=b}this.isFinished=!0,this._sequencer.tryRun()},_onSequencerEmpty:function(){this.isFinished&&this._finish(this.error)},visitImport:function(a,b){var d=a.options.inline;if(!a.css||d){var e=new c.Eval(this.context,this.context.frames.slice(0)),f=e.frames[0];this.importCount++,a.isVariableImport()?this._sequencer.addVariableImport(this.processImportNode.bind(this,a,e,f)):this.processImportNode(a,e,f)}b.visitDeeper=!1},processImportNode:function(a,b,c){var d,e=a.options.inline;try{d=a.evalForImport(b)}catch(f){f.filename||(f.index=a.index,f.filename=a.currentFileInfo.filename),a.css=!0,a.error=f}if(!d||d.css&&!e)this.importCount--,this.isFinished&&this._sequencer.tryRun();else{d.options.multiple&&(b.importMultiple=!0);for(var g=void 0===d.css,h=0;c.rules.length>h;h++)if(c.rules[h]===a){c.rules[h]=d;break}var i=this.onImported.bind(this,d,b),j=this._sequencer.addImport(i);this._importer.push(d.getPath(),g,d.currentFileInfo,d.options,j)}},onImported:function(a,b,c,d,e,f){c&&(c.filename||(c.index=a.index,c.filename=a.currentFileInfo.filename),this.error=c);var g=this,h=a.options.inline,i=e||f in g.recursionDetector;if(b.importMultiple||(a.skip=i?!0:function(){return f in g.onceFileDetectionMap?!0:(g.onceFileDetectionMap[f]=!0,!1)}),d&&(a.root=d,a.importedFilename=f,!h&&(b.importMultiple||!i))){g.recursionDetector[f]=!0;var j=this.context;this.context=b;try{this._visitor.visit(d)}catch(c){this.error=c}this.context=j}g.importCount--,g.isFinished&&g._sequencer.tryRun()},visitRule:function(a,b){b.visitDeeper=!1},visitDirective:function(a){this.context.frames.unshift(a)},visitDirectiveOut:function(){this.context.frames.shift()},visitMixinDefinition:function(a){this.context.frames.unshift(a)},visitMixinDefinitionOut:function(){this.context.frames.shift()},visitRuleset:function(a){this.context.frames.unshift(a)},visitRulesetOut:function(){this.context.frames.shift()},visitMedia:function(a){this.context.frames.unshift(a.rules[0])},visitMediaOut:function(){this.context.frames.shift()}},b.exports=f},{"../contexts":10,"./import-sequencer":82,"./visitor":87}],84:[function(a,b){var c={Visitor:a("./visitor"),ImportVisitor:a("./import-visitor"),ExtendVisitor:a("./extend-visitor"),JoinSelectorVisitor:a("./join-selector-visitor"),ToCSSVisitor:a("./to-css-visitor")};b.exports=c},{"./extend-visitor":81,"./import-visitor":83,"./join-selector-visitor":85,"./to-css-visitor":86,"./visitor":87}],85:[function(a,b){var c=a("./visitor"),d=function(){this.contexts=[[]],this._visitor=new c(this)};d.prototype={run:function(a){return this._visitor.visit(a)},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitRuleset:function(a){var b,c=this.contexts[this.contexts.length-1],d=[];this.contexts.push(d),a.root||(b=a.selectors,b&&(b=b.filter(function(a){return a.getIsOutput()}),a.selectors=b.length?b:b=null,b&&a.joinSelectors(d,c,b)),b||(a.rules=null),a.paths=d)},visitRulesetOut:function(){this.contexts.length=this.contexts.length-1},visitMedia:function(a){var b=this.contexts[this.contexts.length-1];a.rules[0].root=0===b.length||b[0].multiMedia}},b.exports=d},{"./visitor":87}],86:[function(a,b){var c=a("../tree"),d=a("./visitor"),e=function(a){this._visitor=new d(this),this._context=a};e.prototype={isReplacing:!0,run:function(a){return this._visitor.visit(a)},visitRule:function(a){return a.variable?void 0:a},visitMixinDefinition:function(a){a.frames=[]},visitExtend:function(){},visitComment:function(a){return a.isSilent(this._context)?void 0:a},visitMedia:function(a,b){return a.accept(this._visitor),b.visitDeeper=!1,a.rules.length?a:void 0},visitDirective:function(a,b){if("@charset"===a.name){if(!a.getIsReferenced())return;if(this.charset){if(a.debugInfo){var d=new c.Comment("/* "+a.toCSS(this._context).replace(/\n/g,"")+" */\n");return d.debugInfo=a.debugInfo,this._visitor.visit(d)}return}this.charset=!0}if(a.rules&&a.rules.rules){if(this._mergeRules(a.rules.rules),a.accept(this._visitor),b.visitDeeper=!1,a.getIsReferenced())return a;if(!a.rules.rules)return;for(var e=0;a.rules.rules.length>e;e++){var f=a.rules.rules[e];if(f.getIsReferenced&&f.getIsReferenced())return a.markReferenced(),a}}else if(a.getIsReferenced())return a},checkPropertiesInRoot:function(a){for(var b,d=0;a.length>d;d++)if(b=a[d],b instanceof c.Rule&&!b.variable)throw{message:"properties must be inside selector blocks, they cannot be in the root.",index:b.index,filename:b.currentFileInfo?b.currentFileInfo.filename:null}},visitRuleset:function(a,b){var d,e=[];if(a.firstRoot&&this.checkPropertiesInRoot(a.rules),a.root)a.accept(this._visitor),b.visitDeeper=!1,(a.firstRoot||a.rules&&a.rules.length>0)&&e.splice(0,0,a);else{a.paths&&(a.paths=a.paths.filter(function(a){var b;for(" "===a[0].elements[0].combinator.value&&(a[0].elements[0].combinator=new c.Combinator("")),b=0;a.length>b;b++)if(a[b].getIsReferenced()&&a[b].getIsOutput())return!0;return!1}));for(var f=a.rules,g=f?f.length:0,h=0;g>h;)d=f[h],d&&d.rules?(e.push(this._visitor.visit(d)),f.splice(h,1),g--):h++;g>0?a.accept(this._visitor):a.rules=null,b.visitDeeper=!1,f=a.rules,f&&(this._mergeRules(f),f=a.rules),f&&(this._removeDuplicateRules(f),f=a.rules),f&&f.length>0&&a.paths.length>0&&e.splice(0,0,a)}return 1===e.length?e[0]:e},_removeDuplicateRules:function(a){if(a){var b,d,e,f={};for(e=a.length-1;e>=0;e--)if(d=a[e],d instanceof c.Rule)if(f[d.name]){b=f[d.name],b instanceof c.Rule&&(b=f[d.name]=[f[d.name].toCSS(this._context)]);var g=d.toCSS(this._context);-1!==b.indexOf(g)?a.splice(e,1):b.push(g)}else f[d.name]=d}},_mergeRules:function(a){if(a){for(var b,d,e,f={},g=0;a.length>g;g++)d=a[g],d instanceof c.Rule&&d.merge&&(e=[d.name,d.important?"!":""].join(","),f[e]?a.splice(g--,1):f[e]=[],f[e].push(d));Object.keys(f).map(function(a){function e(a){return new c.Expression(a.map(function(a){return a.value}))}function g(a){return new c.Value(a.map(function(a){return a}))}if(b=f[a],b.length>1){d=b[0];var h=[],i=[];b.map(function(a){"+"===a.merge&&(i.length>0&&h.push(e(i)),i=[]),i.push(a)}),h.push(e(i)),d.value=g(h)}})}}},b.exports=e},{"../tree":59,"./visitor":87}],87:[function(a,b){function c(a){return a}function d(a,b){var c,e;for(c in a)if(a.hasOwnProperty(c))switch(e=a[c],typeof e){case"function":e.prototype&&e.prototype.type&&(e.prototype.typeIndex=b++);break;case"object":b=d(e,b)}return b}var e=a("../tree"),f={visitDeeper:!0},g=!1,h=function(a){this._implementation=a,this._visitFnCache=[],g||(d(e,1),g=!0)};h.prototype={visit:function(a){if(!a)return a;var b=a.typeIndex;if(!b)return a;var d,e=this._visitFnCache,g=this._implementation,h=b<<1,i=1|h,j=e[h],k=e[i],l=f;if(l.visitDeeper=!0,j||(d="visit"+a.type,j=g[d]||c,k=g[d+"Out"]||c,e[h]=j,e[i]=k),j!==c){var m=j.call(g,a,l);g.isReplacing&&(a=m)}return l.visitDeeper&&a&&a.accept&&a.accept(this),k!=c&&k.call(g,a),a},visitArray:function(a,b){if(!a)return a;var c,d=a.length;if(b||!this._implementation.isReplacing){for(c=0;d>c;c++)this.visit(a[c]);return a}var e=[];for(c=0;d>c;c++){var f=this.visit(a[c]);void 0!==f&&(f.splice?f.length&&this.flatten(f,e):e.push(f))}return e},flatten:function(a,b){b||(b=[]);var c,d,e,f,g,h;for(d=0,c=a.length;c>d;d++)if(e=a[d],void 0!==e)if(e.splice)for(g=0,f=e.length;f>g;g++)h=e[g],void 0!==h&&(h.splice?h.length&&this.flatten(h,b):b.push(h));else b.push(e);return b}},b.exports=h},{"../tree":59}],88:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.MutationObserver,c="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};var d=[];if(b){var e=document.createElement("div"),f=new MutationObserver(function(){var a=d.slice();
+d.length=0,a.forEach(function(a){a()})});return f.observe(e,{attributes:!0}),function(a){d.length||e.setAttribute("yes","no"),d.push(a)}}return c?(window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),d.length>0)){var c=d.shift();c()}},!0),function(a){d.push(a),window.postMessage("process-tick","*")}):function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],89:[function(a,b){"use strict";function c(a){function b(a){return null===i?void k.push(a):void f(function(){var b=i?a.onFulfilled:a.onRejected;if(null===b)return void(i?a.resolve:a.reject)(j);var c;try{c=b(j)}catch(d){return void a.reject(d)}a.resolve(c)})}function c(a){try{if(a===l)throw new TypeError("A promise cannot be resolved with itself.");if(a&&("object"==typeof a||"function"==typeof a)){var b=a.then;if("function"==typeof b)return void e(b.bind(a),c,g)}i=!0,j=a,h()}catch(d){g(d)}}function g(a){i=!1,j=a,h()}function h(){for(var a=0,c=k.length;c>a;a++)b(k[a]);k=null}if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof a)throw new TypeError("not a function");var i=null,j=null,k=[],l=this;this.then=function(a,c){return new l.constructor(function(e,f){b(new d(a,c,e,f))})},e(a,c,g)}function d(a,b,c,d){this.onFulfilled="function"==typeof a?a:null,this.onRejected="function"==typeof b?b:null,this.resolve=c,this.reject=d}function e(a,b,c){var d=!1;try{a(function(a){d||(d=!0,b(a))},function(a){d||(d=!0,c(a))})}catch(e){if(d)return;d=!0,c(e)}}var f=a("asap");b.exports=c},{asap:91}],90:[function(a,b){"use strict";function c(a){this.then=function(b){return"function"!=typeof b?this:new d(function(c,d){e(function(){try{c(b(a))}catch(e){d(e)}})})}}var d=a("./core.js"),e=a("asap");b.exports=d,c.prototype=d.prototype;var f=new c(!0),g=new c(!1),h=new c(null),i=new c(void 0),j=new c(0),k=new c("");d.resolve=function(a){if(a instanceof d)return a;if(null===a)return h;if(void 0===a)return i;if(a===!0)return f;if(a===!1)return g;if(0===a)return j;if(""===a)return k;if("object"==typeof a||"function"==typeof a)try{var b=a.then;if("function"==typeof b)return new d(b.bind(a))}catch(e){return new d(function(a,b){b(e)})}return new c(a)},d.all=function(a){var b=Array.prototype.slice.call(a);return new d(function(a,c){function d(f,g){try{if(g&&("object"==typeof g||"function"==typeof g)){var h=g.then;if("function"==typeof h)return void h.call(g,function(a){d(f,a)},c)}b[f]=g,0===--e&&a(b)}catch(i){c(i)}}if(0===b.length)return a([]);for(var e=b.length,f=0;b.length>f;f++)d(f,b[f])})},d.reject=function(a){return new d(function(b,c){c(a)})},d.race=function(a){return new d(function(b,c){a.forEach(function(a){d.resolve(a).then(b,c)})})},d.prototype["catch"]=function(a){return this.then(null,a)}},{"./core.js":89,asap:91}],91:[function(a,b){(function(a){function c(){for(;e.next;){e=e.next;var a=e.task;e.task=void 0;var b=e.domain;b&&(e.domain=void 0,b.enter());try{a()}catch(d){if(i)throw b&&b.exit(),setTimeout(c,0),b&&b.enter(),d;setTimeout(function(){throw d},0)}b&&b.exit()}g=!1}function d(b){f=f.next={task:b,domain:i&&a.domain,next:null},g||(g=!0,h())}var e={task:void 0,next:null},f=e,g=!1,h=void 0,i=!1;if("undefined"!=typeof a&&a.nextTick)i=!0,h=function(){a.nextTick(c)};else if("function"==typeof setImmediate)h="undefined"!=typeof window?setImmediate.bind(window,c):function(){setImmediate(c)};else if("undefined"!=typeof MessageChannel){var j=new MessageChannel;j.port1.onmessage=c,h=function(){j.port2.postMessage(0)}}else h=function(){setTimeout(c,0)};b.exports=d}).call(this,a("_process"))},{_process:88}],92:[function(){"function"!=typeof Promise.prototype.done&&(Promise.prototype.done=function(){var a=arguments.length?this.then.apply(this,arguments):this;a.then(null,function(a){setTimeout(function(){throw a},0)})})},{}],"promise/polyfill.js":[function(a){a("asap");"undefined"==typeof Promise&&(Promise=a("./lib/core.js"),a("./lib/es6-extensions.js")),a("./polyfill-done.js")},{"./lib/core.js":89,"./lib/es6-extensions.js":90,"./polyfill-done.js":92,asap:91}]},{},[2])(2)});
\ No newline at end of file