Comment: 10.04->12.04 LTS syslinux incompatibilities.
[[http://rudd-o.com/new-projects/portablelinux|Portable Linux]] lets you install Ubuntu on an USB drive. Unlike Live USB creator, with this application, the free space on your USB drive is available to move files around, you get GRUB for free (so you can run MS-DOS or Memtest directly from the USB drive), and the ISO image is hidden so it's not possible to damage or delete it. You can run this application on any Linux distribution, like Fedora, not just Ubuntu.
It is possible to have Ubuntu or Kubuntu on a USB drive (AKA USB Stick or Thumb drive or Flash drive) or USB hard disk drive with persistent mode. This means that you can boot from a USB drive and keep customisations such as keyboard layout, numlock, preferences, additional packages saved on the drive. This can be done using linux or windows. You will need a USB drive of 1 GB or more. This page is written after having tested the instructions on a Peak III 1 GB drive. The preparation of the drive is explained using 'fdisk' because I had errors with 'gparted' and i could not give the partitions a volume name. I used Ubuntu to make the drive. In Kubuntu it is more or less the same. Where you see 'ubuntu' replace it by 'kubuntu'. I will mark the other differences.
If you are looking for help in putting the 'alternate' cd on a pen drive, then try the instructions here: https://help.ubuntu.com/community/Installation/FromUSBStick . They're for feisty, but more or less work for gutsy too. Note that you may need to add "vesa vga=771" to the append= line in syslinux.cfg in order to get the installer to display properly.
Then choose the desired ubuntu .iso image, the usb device you want to use, erase the disk and set the degree of persistence (the slider) you need. Note that the maximum space that can be allocated for persistence is limited to 4GB (maximum file size on a FAT32 filesystem is 4GB). This limit can be overcome and is explained later on. If you do want a larger degree of persistence, set persistence to 128mb for now and continue. Hit Make Startup Disk and wait till it finishes. You are now in possession of a USB drive that can be used to run/install ubuntu on most computers. Persistence gives you the freedom to save changes, in the form of settings or files etc, during the live session and the changes are available the next time you boot via the usb drive.
There will be a single partition only. Resize it so that you can have two partitions. You only need the current partition to be as large as it is already. You can safely move the resizing slider all the way to the left until there is just enough breathing space between the slider and the end of the first partition (coloured block). Make the newly created free space an ext4 or ext3 or ext2 partition and label it "casper-rw" without the double quotes. Hit apply changes. So now you have two partitions, the fat32 partition and the ext4 partition called casper-rw. This partition can be of any size and will be responsible for saving your data between boots. You can now boot using the usb drive and any changes you make will remain.
WARNING: Does NOT create persistent installs on Hardy (8.04 LTS) or earlier; works only with Intrepid 8.10.
Live USB creator automates the process of creating a bootable Live USB system from a running Ubuntu Live CD. Simply run the Live CD, install the tool and start the Live USB installation from the System administration menu.
You can directly install Ubuntu 8.04 Hardy Heron to a USB drive using the Live CD. Simply select the USB drive as the installation target instead of the local hard disk.
Note: This will use the USB drive for /tmp, which will cause extra wear on the flash memory. If you're booting from a system with enough RAM, it would be more desirable to use a tmpfs in RAM for /tmp, in which case you'd want to copy the ISO CD image to the USB drive and add a persistent partition (see next section). On the other hand, if you're not concerned with your USB drive wearing out (lifetime warranty, wear leveling, etc), continue in this section.
Ensure in the "Installation Summary" screen that you choose to install GRUB to the USB key stick, and not the computer's hard disk (click the Advanced button to do so). Choose to install GRUB to the first USB partition (i.e. /dev/sdb1, rather than simply /dev/sdb). Failure to do this will cause the GRUB on your hard disk to be changed and render the system unbootable from the hard disk, requiring you to boot from a CD and reinstall GRUB to the hard disk (possibly requiring a chroot to the hard disk filesystem first).
You will also need to manually edit the menu.lst file of the new USB installation to change the boot references to /dev/sda, rather than /dev/sdb (or /dev/sdc etc.). This can be done by booting to the live distro mode of the Ubuntu install CD and editing the /boot/grub/menu.lst file on the USB stick. You can mount the USB stick using the Places menu -- once mounted, it can be found at /media/disk. Note: This step may not always be necessary.
Note that this should be fixed in the Ubuntu 8.04.1 install CD.
If you'd like to understand how the process works, the page A better way to create a customized Ubuntu Live USB drive has instructions to build a bootable, persistent USB drive with Linux.
These instructions have been tested to work correctly with Ubuntu Intrepid Ibex (8.10), and should work correctly with any distribution that uses Casper and supports persistency.
8.04 Hardy: Unfortunately, there is a bug in the versions of casper in Hardy that cause the persistent partition to not be mounted on boot. There is a workaround available, and you can download a replacement initrd.gz for 8.04.1 (place in casper directory on first partition of USB key).
Caution: Be careful using any disk utility to partition or format dives as a small error could damage your operating system or overwrite a whole partition of files. Remove any external drives, cameras or other storage devices connected to your computer (except for the USB drive you wish to repartition). Get familiar with the difference between 1 KB, 1 MB and 1 GB; as well as the difference between a drive (e.g. /dev/sda) and a partition (e.g. /dev/sda2). Get familiar with the drives and partitions on your computer: What are the sizes? Which is root, '/'? Which is the USB device?
Use 'disk utility' or 'gparted' to unmount the USB device, and then to delete any existing partition(s). Create a 750 MB FAT partition named 'ubuntu' (or whatever); then an ext2 partition named 'casper-rw' (exactly) on the remaining space. Select the 750 MB ubuntu partition, click "edit partition" and check "bootable". If you were successful, skip down to #Installing Ubuntu on the USB drive. If you prefer to work with 'fdisk' on the command line, keep reading below.
The preparation of the drive is explained below using 'fdisk'. You could use 'gparted' or 'disk utility' as well.
However I had errors with 'gparted' and I could not give the partitions a volume name. I tested 'qtparted' as well and it worked fine.
Another issue in my case was that 'fdisk' recognised a fat32 filesystem as linux. So I checked it with gparted and it was OK.
Assuming you have your Ubuntu set up to automatically mount your USB stick, this should show you what /media/drive or whatever it's called corresponds to on the device level.
but if you have multiple devices on your system, it will print a fair amount of fairly technical information.
Now we are going to create 2 partitions: 1 partition of 750 MB with a fat32 filesystem and 1 partition with the rest of the drive space with volume name "casper-rw" and ext2 filesystem. The first partition will be made active.
This will give you the fdisk prompt. Look to what you have on the drive. Check if you have to backup the data you have on it. 'p' will print the content of /dev/sdX. If you have partitions on it remove them ('d', 'partition number').
6. Save and quit fdisk with 'w' to write the new settings.
WARNING: Re-reading the partition table failed with error22: Invalid argument.
The kernel still uses old table.
The new table will be available at the next reboot.
You should see the 2 partitions with the first marked with a * because it is active.
Please note that Windows will only mount the first partition of any removable media - which includes USB flash drives. While you can get around this, it requires some highly kludgy driver procedures, which you are unlikely to be able to pull off on any machine where you are not an admin.
In short, having the Ubuntu Live as your first partition reduces the utility of your USB stick for what is statistically it's most likely task - transferring files to and from Windows machines.
Follow the instructions, but use /dev/sdX2 instead of /dev/sdX1, and make sure you make /dev/sdX2 bootable in fdisk.
For persistence, follow the instructions to create a loopback file at LiveCDPersistence. This feature works fine from a loopback file inside a FAT32 filesystem, just as long as the file contains a supported unionfs filesystem like ext2.
Now you have (mostly) the best of both worlds.
You can enlarge or shrink your casper-rw partition without having to repartition your thumb, just make a new loopback filesystem, mount them both, and copy the files across.
If the persistent boot automatically mounted the root of the FAT32 filesystem as well as the casper-rw filesystem, it would be ideal.
On recent Ubuntu versions, the USB stick's partitions should simply appear under /media/ubuntu and /media/casper-rw if you have followed the proposed naming convention.
Download the Ubuntu image (for example, ubuntu-11.04-desktop-i386.iso) or put in an Ubuntu install CD if you have it.
You can now access the files via the 'ubuntuCD' folder.
Open the CD's top-level folder and make sure that you see the hidden files too. (verify that View-->Show Hidden Files is checked).
Rename the file 'syslinux/isolinux.bin' to 'syslinux/syslinux.bin'.
Alternately, you can run the following commands in 'terminal'. If you copy/paste, take care to make your browser window large enough to not have accidental line breaks inserted. And remember to replace /media/ubuntu with /media/whatmountpointyouhave1 if you used a different name for the mount point.
Add the -v option to cp to get some progress indication. The casper/filesystem.squashfs file in particular is large, and takes a long time to copy.
The FAT32 file system will not allow symbolic links to be copied over. You will get a warning about this, but it is harmless.
Unmount the iso image that you mounted above, using 'terminal'.
Optionally, change the 'default' to the label name used above (e.g. 'persistent').
The menu choice called 'persistent' was made the default so that when booting up you can just hit 'Enter' to start your customized session.
The last thing to do is install the bootloader. Make sure you have the 'syslinux' and 'mtools' packages installed. If not, open 'synaptic' and select them from the package list to mark them to be installed, then "apply" the changes.
Or use 'aptitude' or 'apt-get' from the command line. For example, the following command should be harmless if they are already installed.
According to this page1 syslinux 3.35 should be used to get support for fat32, edgy ships with 3.11. According to the changelog 3.35 only seems to introduce support for subdirectories.
then you will need to install the 'mtools' package.
Boot on the USB drive, change some settings, reboot again and check if the changes are kept (persistence check).
Do not forget to check if the computer you are going to use, boots USB devices first (look in BIOS settings).
So that is it. Enjoy (k)ubuntu where ever you go.
there are a couple of work-arounds (eg, typing 'help' at the prompt and then hitting 'enter') but the bug has been triaged and labeled WONTFIX since Maverick and as late as March 2012.
UNetbootin automates this task by providing a GUI to create a bootable Ubuntu Live USB drive from an ISO file, and can be run from both an installed Windows or Linux system, or from a liveCD.
Download a copy of the HP format utility for USB drives, this utility makes it as easy to format USB pen drives as it is to format floppies.
Plug in your USB pen drive and use the HP format utility to format it with a FAT32 filesystem.
This is the same as described in the Linux section except for accessing the downloaded image. The way to do this is to mount the iso image file and copy the files that way. You can do this with NERO or Windows VirtualCD. You might want to do it this way if you don't want to burn a CD.
Go to http://syslinux.zytor.com/iso.php and download a copy of syslinux-3.11.zip for Windows. Extract the zip file contents and move the extracted folder to your favorite location on your hard drive.
Open WordPad and edit the file syslinux.cfg as described in the Linux section.
Open a command prompt and change directory to the location of the syslinux folder. For example, if you placed the folder on your desktop then: cd C:\Documents and Settings\(your user name)\Desktop\syslinux-3.11\win32 (by the way you DO know that command prompt has command completion just like in Linux (start entering characters and then press the TAB key to complete the entry)).
where X: is replaced by the drive letter of your USB key. Be careful to pick the correct drive letter!
This will write the Master Boot Record (MBR), as well as mark the partition active.


This week on Promoter 101 features Live Nation New York's Jason Miller, he shares his views and history, current success as well as he even does an impression. Journalist Ricardo Baca founder of The Cannabist and an industry-leading expert on the legal marijuana industry talks about the growth in the Weed Biz. This week's War Story is from the St. Louis Fox Theatre's Steve Litman. Plus Steiny and Luke catch up on the News of the Week.


Back in October I posted Cluster Software Update Essentials which outlined 3 different upgrade methods (really, methods 1 & 2 were the same, just GUI v CLI.) In this post I'm going to run through the method I'd use - "cluster image update" (for anything other than single node clusters.) Upgrading from 8.3.0 to 9.1 is a one step process.
- and make remediation's where required.
5) Verify cluster health in OnCommand Unified Manager.
6) Thoroughly go over the Upgrade Advisor outputs and do the appropriate!
8) Serve the 91P1_q_image.tgz file on a web server.
Note: 9.1P1 is the recommend release at the time of writing.
There are no packages in the repository.
"To prevent SnapMirror transfers from failing, you must suspend (Quiesce) SnapMirror operations and upgrade destination nodes before upgrading source nodes.
autosupport invoke -node * -type all -message "maint=4h upgrading to ONTAP 9.1P1"
Note: You don't need to do 1 HA-pair at a time, "cluster image update" is designed to update the entire cluster.
You should be connected to Service-Processors to observe the update process.
Follow the above to update subsequent HA Pairs as required.
Verify the cluster version has increased (the cluster version only updates when all nodes are upgraded).
If you suspended SnapMirrors re-enable them.
autosupport invoke -node * -type all -message "maint=END finished upgrade to ONTAP 9.1P1"


Wide range of products . Grocery items.. Clothes.. Shoes.. Kitchen appliances..all the households products.. And in the best cheap prices.. This place is worth spending your every penny.. You get a lot of discounts on the mrp price..
I have shopped at various departmental store in . stores offer the best value of money that I have come across. though the place can get bit crowded on But, It is still a amazing place for . is not an issue as there is amble parking space for both four and two wheeler. there is a offered on most of the products sold. the collection of the items is also very best and they even have and . the is also very super as the store is air conditioned and ..
electronic city . Today I had visited to get the tin of rassogollas . It has some amazing offers every month Just for Rs 89 . Which is like wow. Where do you get that 15 pieces for 89 D-Mart is one of the best places to buy basic supply things. Above all else, it is roomy and there is abundant space for parking.Secondly, you can get incredible rebates on staple things and wind up sparing a ton of cash.
They had so many amazing products that were of great quality. I saw myself buying all the goods I needed and more. I had a fantastic time browsing through their products and getting to know many products that I hadn't known was even there. It is a great supermarket.
Nitesh , 👑 #GoldMagician Foodie, enthusiast and an extrovert. I love to try out different cuisines and love hanging out with friends.
Kamal Vyas , Guitarist and singer by passion. Loves random walk and chats on Chai with aalu pyaaz ke pakodey.


text:
First-ever National Cyber Drill on Saturday
SAJIBUR RAHMAN | Published: December 11, 2020 15:22:02 | Updated: December 11, 2020 21:51:07
A total of 234 registered teams are set to take part in the country's first-ever National Cyber Drill (NCD 2020) on Saturday.
The teams have already registered from the different financial and non-financial institutions, regulatory bodies, corporations, law enforcement agencies, different universities and IT firms. They were registered between November 18 and December 7.
The drill, which aims to enhance the skills of cybersecurity personnel and prepare them for possible disasters, will be organised on the occasion of Digital Bangladesh Day, by the state-run Bangladesh e-Government Computer Incident Response Team (BGD e-Gov CIRT) under the Ministry of Posts, Telecommunications and Information Technology.
The day is celebrated across the country on December 12 every year to highlight the incumbent Awami League-led government's tech-bound vision.
At first, on December 12, 2017, the day was observed as National Information and Communication Technology (ICT) Day. It was later renamed to Digital Bangladesh Day on November 26, 2018.
The drill is to help build resilience against growing cyberthreats. It will help create cybersecurity awareness and cultivate new crop of cyber-experts, said Tarique M Barkatullah, project director, the BGD e-GOV CIRT, and also director of the National Data Centre.
The drill will be the simulation of multiple incidents and issues that exist in real-life while the participants will handle the simulated cases of malware, ransomware and digital forensic, Mr Barkatullah told The Financial Express.
From 2021, the BGD e-GOV CIRT will arrange at least one drill in every two months.
The government formed the BGD e-GOV CIRT just after the incident of the Bangladesh Bank's reserve heist, in a bid to combat such incidents in future.
According to a study of the BIBM, only 38 per cent of the banks are fully equipped to combat cyberattacks, 34 per cent are partially prepared, and 28 per cent are totally vulnerable.
The incidents of cyberattacks are on rise at different commercial and service-providing outlets despite taking various preventive measures. It happens so, as the country has achieved good progress especially on the socio-economic front in the era of digitisation.
Due to a leap in IT-related crimes, the issue of cybersecurity has become a matter of serious concern among most of the government and private entities.
According to the BGD e-Gov CIRT, the number of cybersecurity-related incidents registered with the organisation increased to 870 in 2018 from 683 in 2017, while the number was 379 in 2016.
Of the attacks, vulnerability accounts for 63.2 per cent, intrusion or hacking 5.7 per cent, malicious code 22.5 per cent, abusive content 4.5, and the rest comprise fraudulence, intrusion attempts, service request, information security and others.
But the actual number of attacks is much higher, as a good number of commercial or service-providing outlets do not report such incidents to the state-owned special unit, insiders said.
Capitalising on weaknesses in the security system of the central bank, including the possible involvement of some of its employees, perpetrators were able to steal US$81 million, which was transferred to the Philippines on February 05, 2016.
Since the largest cyber-heist in the history of global financial forgery, the government took the issue very seriously, considering its damage to the economy, and formed the CIRT. After that, no major cybercrime took place in the state-run financial institutions.

redpajama_set_name: RedPajamaCommonCrawl


text:
import { NgGrid, NgGridItem } from '../dist/NgGrid';

export function main() {
	describe("NgGridItem Directive", () => {
		it("should generate a ngGrid item", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
		});

		it("should set the element class on init", () => {
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementClass', 'setElementStyle']);
			var ngEl: any = {};
			var ngGrid: any = {
				autoStyle: false
			};
			var ngGridItem: NgGridItem = new NgGridItem(ngEl, renderSpy, ngGrid);
			spyOn(ngGridItem, '_recalculateDimensions');
			spyOn(ngGridItem, '_recalculatePosition');
			ngGridItem.ngOnInit();
			expect(renderSpy.setElementClass).toHaveBeenCalledWith(ngEl, 'grid-item', true);
			expect(renderSpy.setElementStyle).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._recalculateDimensions).toHaveBeenCalled();
			expect((<any>ngGridItem)._recalculatePosition).toHaveBeenCalled();
		});

		it("should set the element style on init if autoStyle is enabled", () => {
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementClass', 'setElementStyle']);
			var ngEl: any = {};
			var ngGrid: any = {
				autoStyle: true
			};
			var ngGridItem: NgGridItem = new NgGridItem(ngEl, renderSpy, ngGrid);
			spyOn(ngGridItem, '_recalculateDimensions');
			spyOn(ngGridItem, '_recalculatePosition');
			ngGridItem.ngOnInit();
			expect(renderSpy.setElementClass).toHaveBeenCalledWith(ngEl, 'grid-item', true);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'position', 'absolute');
			expect((<any>ngGridItem)._recalculateDimensions).toHaveBeenCalled();
			expect((<any>ngGridItem)._recalculatePosition).toHaveBeenCalled();
		});

		it("should drag", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			expect(ngGridItem.canDrag(null)).toBe(true);

			var target: any = {
				parentElement: jasmine.createSpyObj('parentElement', ['querySelector'])
			};
			target.parentElement.querySelector.and.returnValue(target);

			(<any>ngGridItem)._dragHandle = "#id";
			expect(ngGridItem.canDrag({ target: target })).toBe(true);
			expect(target.parentElement.querySelector).toHaveBeenCalledWith('#id');

			target.parentElement.querySelector.and.returnValue({});
			expect(ngGridItem.canDrag({ target: target })).toBe(false);
			expect(target.parentElement.querySelector).toHaveBeenCalledWith('#id');
		});

		it("should resize", () => {
			var target: any = {
				parentElement: jasmine.createSpyObj('parentElement', ['querySelector'])
			};
			target.parentElement.querySelector.and.returnValue(target);
			var e: any = { target: target };

			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			var getMousePositionSpy = spyOn(ngGridItem, '_getMousePosition');
			getMousePositionSpy.and.returnValue({ left: 0, top: 0 });

			for (let size of [5, 10, 15]) {

				(<any>ngGridItem)._borderSize = size;
				(<any>ngGridItem)._elemHeight = -150;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemHeight = 0;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemHeight = 1;
				expect(ngGridItem.canResize(e)).toBe('height');

				(<any>ngGridItem)._elemHeight = size - 1;
				expect(ngGridItem.canResize(e)).toBe('height');

				(<any>ngGridItem)._elemHeight = size;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemHeight = 150;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = -150;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = 0;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = 1;
				expect(ngGridItem.canResize(e)).toBe('width');

				(<any>ngGridItem)._elemWidth = size - 1;
				expect(ngGridItem.canResize(e)).toBe('width');

				(<any>ngGridItem)._elemWidth = size;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = 150;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = -150;
				(<any>ngGridItem)._elemHeight = 150;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = 0;
				(<any>ngGridItem)._elemHeight = 0;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = 1;
				(<any>ngGridItem)._elemHeight = 1;
				expect(ngGridItem.canResize(e)).toBe('both');

				(<any>ngGridItem)._elemWidth = size - 1;
				(<any>ngGridItem)._elemHeight = size - 1;
				expect(ngGridItem.canResize(e)).toBe('both');

				(<any>ngGridItem)._elemWidth = size;
				(<any>ngGridItem)._elemHeight = size;
				expect(ngGridItem.canResize(e)).toBe(null);

				(<any>ngGridItem)._elemWidth = 150;
				(<any>ngGridItem)._elemHeight = 150;
				expect(ngGridItem.canResize(e)).toBe(null);
			}

			(<any>ngGridItem)._resizeHandle = "#id";
			expect(ngGridItem.canResize(e)).toBe('both');

			target.parentElement.querySelector.and.returnValue({});
			expect(ngGridItem.canResize(e)).toBe(null);
		});

		it("should update the cursor", () => {
			var e: any = {};
			var ngEl: any = {};
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementStyle']);
			var ngGrid: any = {
				autoStyle: false,
				dragEnable: false,
				resizeEnable: false,
			};
			var ngGridItem: NgGridItem = new NgGridItem(ngEl, renderSpy, ngGrid);
			spyOn(ngGridItem, 'canDrag');
			spyOn(ngGridItem, 'canResize');
			spyOn(ngGridItem, '_getMousePosition');

			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).not.toHaveBeenCalled();
			expect(renderSpy.setElementStyle).not.toHaveBeenCalled();
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			ngGrid.autoStyle = true;
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).not.toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'default');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			(<any>ngGridItem)._resizeHandle = true;
			ngGrid.resizeEnable = true;
			(<any>ngGridItem.canResize).and.returnValue(true);
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).not.toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'nwse-resize');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			(<any>ngGridItem)._resizeHandle = false;
			(<any>ngGridItem)._elemWidth = 0;
			(<any>ngGridItem)._elemHeight = 0;
			(<any>ngGridItem)._borderSize = 15;
			ngGrid.resizeEnable = true;
			(<any>ngGridItem)._getMousePosition.and.returnValue({});
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'default');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			(<any>ngGridItem)._resizeHandle = false;
			(<any>ngGridItem)._elemWidth = 0;
			(<any>ngGridItem)._elemHeight = 10;
			(<any>ngGridItem)._borderSize = 15;
			ngGrid.resizeEnable = true;
			(<any>ngGridItem)._getMousePosition.and.returnValue({ left: 0, top: 0 });
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'ns-resize');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			(<any>ngGridItem)._resizeHandle = false;
			(<any>ngGridItem)._elemWidth = 10;
			(<any>ngGridItem)._elemHeight = 0;
			(<any>ngGridItem)._borderSize = 15;
			ngGrid.resizeEnable = true;
			(<any>ngGridItem)._getMousePosition.and.returnValue({ left: 0, top: 0 });
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'ew-resize');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			(<any>ngGridItem)._resizeHandle = false;
			(<any>ngGridItem)._elemWidth = 10;
			(<any>ngGridItem)._elemHeight = 10;
			(<any>ngGridItem)._borderSize = 15;
			ngGrid.resizeEnable = true;
			(<any>ngGridItem)._getMousePosition.and.returnValue({ left: 0, top: 0 });
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).not.toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'nwse-resize');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();

			(<any>ngGridItem)._resizeHandle = false;
			ngGrid.dragEnable = true;
			(<any>ngGridItem.canDrag).and.returnValue(true);
			ngGridItem.onMouseMove(e);
			expect(ngGridItem.canDrag).toHaveBeenCalled();
			expect(ngGridItem.canResize).not.toHaveBeenCalled();
			expect((<any>ngGridItem)._getMousePosition).not.toHaveBeenCalled();
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'cursor', 'move');
			(<any>ngGridItem.canDrag).calls.reset();
			(<any>ngGridItem.canResize).calls.reset();
			(<any>ngGridItem)._getMousePosition.calls.reset();
			renderSpy.setElementStyle.calls.reset();
		});

		it("should remove the item", () => {
			var ngGridSpy: any = jasmine.createSpyObj('ngGridSpy', ['removeItem'])
			var ngGridItem: NgGridItem = new NgGridItem(null, null, ngGridSpy);
			(<any>ngGridItem)._added = false;
			ngGridItem.ngOnDestroy();
			expect(ngGridSpy.removeItem).not.toHaveBeenCalled();

			(<any>ngGridItem)._added = true;
			ngGridItem.ngOnDestroy();
			expect(ngGridSpy.removeItem).toHaveBeenCalledWith(ngGridItem);
		});

		it("should get element", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			var ngEl: any = {};
			(<any>ngGridItem)._ngEl = ngEl;
			expect(ngGridItem.getElement()).toBe(ngEl);
			(<any>ngGridItem)._ngEl = null;
			expect(ngGridItem.getElement()).toBe(null);
		});

		it("should get the drag handle", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			var dragHandle: string = "dragHandle";
			(<any>ngGridItem)._dragHandle = dragHandle;
			expect(ngGridItem.getDragHandle()).toBe(dragHandle);
			(<any>ngGridItem)._dragHandle = null;
			expect(ngGridItem.getDragHandle()).toBe(null);
		});

		it("should get the resize handle", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			var resizeHandle: string = "resizeHandle";
			(<any>ngGridItem)._resizeHandle = resizeHandle;
			expect(ngGridItem.getResizeHandle()).toBe(resizeHandle);
			(<any>ngGridItem)._resizeHandle = null;
			expect(ngGridItem.getResizeHandle()).toBe(null);
		});

		it("should get the dimensions", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			(<any>ngGridItem)._elemWidth = 100;
			(<any>ngGridItem)._elemHeight = 200;
			expect(ngGridItem.getDimensions().width).toBe(100);
			expect(ngGridItem.getDimensions().height).toBe(200);
			(<any>ngGridItem)._elemWidth = null;
			(<any>ngGridItem)._elemHeight = null;
			expect(ngGridItem.getDimensions().width).toBe(null);
			expect(ngGridItem.getDimensions().height).toBe(null);
		});

		it("should get the size", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			(<any>ngGridItem)._sizex = 100;
			(<any>ngGridItem)._sizey = 200;
			expect(ngGridItem.getSize().x).toBe(100);
			expect(ngGridItem.getSize().y).toBe(200);
			(<any>ngGridItem)._sizex = null;
			(<any>ngGridItem)._sizey = null;
			expect(ngGridItem.getSize().x).toBe(null);
			expect(ngGridItem.getSize().y).toBe(null);
		});

		it("should get the position", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			(<any>ngGridItem)._elemLeft = 100;
			(<any>ngGridItem)._elemTop = 200;
			expect(ngGridItem.getPosition().left).toBe(100);
			expect(ngGridItem.getPosition().top).toBe(200);
			(<any>ngGridItem)._elemLeft = null;
			(<any>ngGridItem)._elemTop = null;
			expect(ngGridItem.getPosition().left).toBe(null);
			expect(ngGridItem.getPosition().top).toBe(null);
		});

		it("should get the grid position", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			(<any>ngGridItem)._col = 100;
			(<any>ngGridItem)._row = 200;
			expect(ngGridItem.getGridPosition().col).toBe(100);
			expect(ngGridItem.getGridPosition().row).toBe(200);
			(<any>ngGridItem)._col = null;
			(<any>ngGridItem)._row = null;
			expect(ngGridItem.getGridPosition().col).toBe(null);
			expect(ngGridItem.getGridPosition().row).toBe(null);
		});

		it("should set the config", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			spyOn(ngGridItem, '_recalculatePosition');
			spyOn(ngGridItem, '_recalculateDimensions');
			var config: any = {
				col: 1,
				row: 2,
				sizex: 3,
				sizey: 4,
				dragHandle: '5',
				resizeHandle: '6'
			};
			ngGridItem.setConfig(config);
			expect((<any>ngGridItem)._col).toBe(1);
			expect((<any>ngGridItem)._row).toBe(2);
			expect((<any>ngGridItem)._sizex).toBe(3);
			expect((<any>ngGridItem)._sizey).toBe(4);
			expect((<any>ngGridItem)._dragHandle).toBe('5');
			expect((<any>ngGridItem)._resizeHandle).toBe('6');
			expect((<any>ngGridItem)._recalculatePosition).toHaveBeenCalled();
			expect((<any>ngGridItem)._recalculateDimensions).toHaveBeenCalled();
		});

		it("should set the size", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			spyOn(ngGridItem, '_recalculateDimensions');
			var newSizeX = 31;
			var newSizeY = 27;
			ngGridItem.setSize(newSizeX, newSizeY);
			expect((<any>ngGridItem)._sizex).toBe(newSizeX);
			expect((<any>ngGridItem)._sizey).toBe(newSizeY);
			expect((<any>ngGridItem)._recalculateDimensions).toHaveBeenCalled();
		});

		it("should set the grid position", () => {
			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);
			spyOn(ngGridItem, '_recalculatePosition');
			var newCol = 31;
			var newRow = 27;
			ngGridItem.setGridPosition(newCol, newRow);
			expect((<any>ngGridItem)._col).toBe(newCol);
			expect((<any>ngGridItem)._row).toBe(newRow);
			expect((<any>ngGridItem)._recalculatePosition).toHaveBeenCalled();
		});

		it("should set the position according to the cascade type", () => {
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementStyle']);
			var ngEl: any = {};
			var ngGrid: any = {};
			var ngGridItem: NgGridItem = new NgGridItem(ngEl, renderSpy, ngGrid);
			var newX = 31;
			var newY = 27;

			(<any>ngGridItem).setPosition(newX, newY);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'left', "31px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'top', "27px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'right', null);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'bottom', null);
			(<any>renderSpy.setElementStyle).calls.reset();

			ngGrid.cascade = 'up';
			(<any>ngGridItem).setPosition(newX, newY);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'left', "31px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'top', "27px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'right', null);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'bottom', null);
			(<any>renderSpy.setElementStyle).calls.reset();

			ngGrid.cascade = 'left';
			(<any>ngGridItem).setPosition(newX, newY);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'left', "31px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'top', "27px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'right', null);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'bottom', null);
			(<any>renderSpy.setElementStyle).calls.reset();

			ngGrid.cascade = 'right';
			(<any>ngGridItem).setPosition(newX, newY);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'right', "31px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'top', "27px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'left', null);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'bottom', null);
			(<any>renderSpy.setElementStyle).calls.reset();

			ngGrid.cascade = 'down';
			(<any>ngGridItem).setPosition(newX, newY);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'left', "31px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'bottom', "27px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'right', null);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'top', null);
			(<any>renderSpy.setElementStyle).calls.reset();
		});

		it("should set the dimensions", () => {
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementStyle']);
			var ngEl: any = {};
			var ngGridItem: NgGridItem = new NgGridItem(ngEl, renderSpy, null);
			var newWidth = 31;
			var newHeight = 27;
			(<any>ngGridItem).setDimensions(newWidth, newHeight);
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'width', "31px");
			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(ngEl, 'height', "27px");
		});

		it("should recalculate the position", () => {
			var ngGrid: any = {
				marginLeft: 1,
				marginRight: 2,
				colWidth: 3,
				marginTop: 4,
				marginBottom: 5,
				rowHeight: 6
			};
			var ngGridItem: NgGridItem = new NgGridItem(null, null, ngGrid);
			spyOn(ngGridItem, 'setPosition');
			(<any>ngGridItem)._col = 7;
			(<any>ngGridItem)._row = 8;

			(<any>ngGridItem)._recalculatePosition();
			expect((<any>ngGridItem).setPosition).toHaveBeenCalledWith(37, 109);
		});

		it("should recalculate dimensions", () => {
			var ngGrid: any = {
				marginLeft: 1,
				marginRight: 2,
				colWidth: 3,
				marginTop: 4,
				marginBottom: 5,
				rowHeight: 6,
				minCols: 1,
				minRows: 1,
			};
			var ngGridItem: NgGridItem = new NgGridItem(null, null, ngGrid);
			spyOn(ngGridItem, 'setDimensions');
			(<any>ngGridItem)._sizex = 7;
			(<any>ngGridItem)._sizey = 8;

			(<any>ngGridItem)._recalculateDimensions();
			expect((<any>ngGridItem).setDimensions).toHaveBeenCalledWith(39, 111);

			ngGrid.minCols = 7;
			ngGrid.minRows = 8;

			(<any>ngGridItem)._sizex = 1;
			(<any>ngGridItem)._sizey = 1;

			(<any>ngGridItem)._recalculateDimensions();
			expect((<any>ngGridItem).setDimensions).toHaveBeenCalledWith(39, 111);
		});

		it("should recalculate position and dimensions when recalculating self", () => {
			spyOn(NgGridItem.prototype, "_recalculateDimensions");
			spyOn(NgGridItem.prototype, "_recalculatePosition");

			var ngGridItem: NgGridItem = new NgGridItem(null, null, null);

			ngGridItem.recalculateSelf();

			expect((<any>ngGridItem)._recalculatePosition).toHaveBeenCalled();
			expect((<any>ngGridItem)._recalculateDimensions).toHaveBeenCalled();
		});

		it("should add moving class and styles on startMoving", () => {
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementStyle', 'setElementClass']);
			var styleSpy = jasmine.createSpyObj('styleSpy', ['getPropertyValue']);
			styleSpy.getPropertyValue.and.returnValue(100);
			var oldGetCompStyle = window.getComputedStyle;
			(<any>window).getComputedStyle = jasmine.createSpy("getComputedStyle").and.returnValue(styleSpy);

			var ngGrid: any = { 'autoStyle': false };
			var elem: any = { 'nativeElement': {} };

			var ngGridItem: NgGridItem = new NgGridItem(elem, renderSpy, ngGrid);
			ngGridItem.startMoving();

			expect(window.getComputedStyle).toHaveBeenCalledWith(elem.nativeElement);
			expect(renderSpy.setElementClass).toHaveBeenCalledWith(elem, 'moving', true);
			expect(renderSpy.setElementStyle).not.toHaveBeenCalled();
			expect(styleSpy.getPropertyValue).not.toHaveBeenCalled();

			ngGrid.autoStyle = true;
			ngGridItem.startMoving();

			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(elem, 'z-index', '101');
			expect(styleSpy.getPropertyValue).toHaveBeenCalledWith('z-index');

			(<any>window).getComputedStyle = oldGetCompStyle;
		});

		it("should remove moving class and styles on stopMoving", () => {
			var renderSpy = jasmine.createSpyObj('renderSpy', ['setElementStyle', 'setElementClass']);
			var styleSpy = jasmine.createSpyObj('styleSpy', ['getPropertyValue']);
			styleSpy.getPropertyValue.and.returnValue(100);
			var oldGetCompStyle = window.getComputedStyle;
			(<any>window).getComputedStyle = jasmine.createSpy("getComputedStyle").and.returnValue(styleSpy);

			var ngGrid: any = { 'autoStyle': false };
			var elem: any = { 'nativeElement': {} };

			var ngGridItem: NgGridItem = new NgGridItem(elem, renderSpy, ngGrid);
			ngGridItem.stopMoving();

			expect(window.getComputedStyle).toHaveBeenCalledWith(elem.nativeElement);
			expect(renderSpy.setElementClass).toHaveBeenCalledWith(elem, 'moving', false);
			expect(renderSpy.setElementStyle).not.toHaveBeenCalled();
			expect(styleSpy.getPropertyValue).not.toHaveBeenCalled();

			ngGrid.autoStyle = true;
			ngGridItem.stopMoving();

			expect(renderSpy.setElementStyle).toHaveBeenCalledWith(elem, 'z-index', '99');
			expect(styleSpy.getPropertyValue).toHaveBeenCalledWith('z-index');

			(<any>window).getComputedStyle = oldGetCompStyle;
		});

		it("should attempt to calculate the mouse position", () => {
			var event: any = {
				clientX: 14234,
				clientY: 24323,
				'originalEvent': {
					'touches': null,
					'changedTouches': null
				}
			};
			var elem: any = {
				'nativeElement': {
					'getBoundingClientRect': jasmine.createSpy('elemSpy').and.returnValue({ 'left': 4353, 'top': 3554 })
				}
			}

			var ngGridItem: NgGridItem = new NgGridItem(elem, null, null);

			expect((<any>ngGridItem)._getMousePosition(event)).toEqual({ 'left': 9881, 'top': 20769 });

			event.originalEvent.touches = [];
			event.originalEvent.changedTouches = [{ 'clientX': 8658, 'clientY': 9757 }];

			expect((<any>ngGridItem)._getMousePosition(event)).toEqual({ 'left': 4305, 'top': 6203 });

			event.originalEvent.touches = [{ 'clientX': 34523, 'clientY': 7898 }];
			expect((<any>ngGridItem)._getMousePosition(event)).toEqual({ 'left': 30170, 'top': 4344 });
		});

		it("should add self to ngGrid, store config and recalculate when config is set", () => {
			spyOn(NgGridItem.prototype, '_recalculatePosition');
			spyOn(NgGridItem.prototype, '_recalculateDimensions');
			spyOn(NgGridItem.prototype, 'setConfig');

			var ngGrid: any = jasmine.createSpyObj('NgGridSpy', ['addItem']);
			var ngGridItem: NgGridItem = new NgGridItem(null, null, ngGrid);

			ngGridItem.config = { 'col': 5, 'row': 2 };

			expect(ngGridItem.setConfig).toHaveBeenCalled();
			expect(ngGrid.addItem).toHaveBeenCalledWith(ngGridItem);
			expect((<any>ngGridItem)._recalculatePosition).toHaveBeenCalled();
			expect((<any>ngGridItem)._recalculateDimensions).toHaveBeenCalled();
			expect((<any>ngGridItem)._added).toBe(true);

			ngGrid.addItem.calls.reset();
			ngGridItem.config = {};

			expect(ngGrid.addItem).not.toHaveBeenCalledWith(ngGridItem);
		});
	});
}

redpajama_set_name: RedPajamaGithub


Free snowboarding papers, essays, and research papers. ... existence in the late 1970's, to one of the most watched action sports in a matter of thirty-five years.
Two towers thesis. Literature reviews to purchase. Persuasive essay on snowboarding. Easy way write 5 paragraph essay. Essays on otherness laplanche pdf.


Who becomes suspicious of Dmitri and follows Dmitri's trail of theft?
How does Grushenka react when Dmitri is accused of murdering Fyodor?
During questioning, Dmitri refuses to explain how he acquired what?
What is the reasoning behind the officers taking Dmitri's clothes?
When Grushenka makes a final visit to Dmitri, what does she say to him?


text:
Government Advocacy: ASA is the subcontractor's voice in California & Washington DC. Legislators & decision makers hear ASA on issues that affect business conditions.
Victories in California!
Win in critical "Pay When Paid" California Case (April 2020): The American Subcontractors Association made a significant win for subcontractors in Crosno Construction, Inc. et al v. Travelers Casualty and Surety of America. In 2019 ASA/ASAC produced a friend-of-the-court brief affirming a California Superior Court's judgment regarding "pay when paid" provisions used to withhold payment from a subcontractor. On April 17, 2020, the California Court of Appeals ruled in favor of subcontractors to limit enforcement of "pay-when-paid" clauses that delay those payments to subcontractors.
Public Contracts Payment - AB 1223 (2017) Effective 1/1/18: Requires within 10 days of making a construction contract payment, a state agency that maintains an Internet Web site to post on its Internet Web site the project for which the payment was made, the name of the construction contractor or company paid, the date the payment was made or the date the state agency transmitted instructions to the Controller or other payer to make the payment, the payment application number or other identifying information, and the amount of the payment. Exempt from these provisions are construction contracts valued below $25,000 and specified progress payments published in the California State Contracts Register under existing law.
Retention Reform-Public Works - AB 92 (2017) Effective 1/1/18: Extends SB 293 (2011) through 1/1/2023 A huge victory was won in 2011 when SB 293 was signed by Governor Brown capping retention at 5% (for non-substantially complex projects-see AB 1705).
Public Contracts Payment - AB 1705 (2013) Effective 1/1/15: In 2014 ASAC successfully sponsored this bill which closed a loophole in SB 293 (2011, effective 1/1/12), to define/delete what public project is "substantially complex." Without a clear definition any project could be deemed "substantially complex" and the 5% cap on retention could be exceeded. The bill requires agencies to explain why they determined a project to be substantially complex and to disclose that to bidders along with the increase in retention if applicable. The bill also extended the "sunset" to Jan.1, 2018. Governor Brown signed the bill, which became effective January 1, 2015. NECA co-sponsored this legislation.
Payment Protection - AB 164 (2013) Effective 1/1/14: Governor Jerry Brown signed this ASAC bill requiring the developer to provide payment and performance bonds, in a manner similar to the Little Miller Act, on Public/Private Partnerships (3Ps) in California.
3Ps, is an emerging trend whereby the public provides lands that are being developed by private companies that have no legal obligation to pay contractors. The contractors have no lien rights because the land is publically owned, there is no public money to go after with a Stop Notice, and payment and performance bonds WERE not required to be in place.
Much of the money for these 3Pprojects comes from outside the United States. The developers are forming LLCs and other protected entities. If the project goes bad or gets canceled, the developer can bankrupt the LLC and move on without paying anybody -- there was no recourse for the contractors.
Beginning 1/1/2014, payment and performance bonds must be in place, providing payment remedies for subcontractors and suppliers, and ensuring that the project will be completed for the public entity.
Indemnification Reform - SB 474 (2012) Effective 1/1/13: ASAC has always supported the idea that the person indemnifying has no obligation to defend actions or proceedings prior to a preliminary or final determination of liability. Neither should that person be liable in any amount that exceeds the finally determined percentage of liability, based upon comparative fault.
In 2012 Governor Brown signed SB 474, which establishes a proportionate, or comparative, liability standard that holds each party responsible only for the damage it causes and defense costs for that damage. The new law improves California's statute, which, when other parties are not solely at fault in the past allowed subs to be held responsible for 100% of the injuries, damage, and defense costs arising from other parties' mistakes. The new law applies to public and private construction contracts entered into on or after Jan.1, 2013. One of the principal supporters of this bill was ASAC. Bottom line is if a claim has nothing to do with your work you will not have to pay for someone else's mistakes.
Payment Protection - Amicus Brief in Eggers Industries v. Flintco, Inc. (2012): 2nd tier supplier is "subcontractor" when providing manufactured items pursuant to specifications entitled to lien, payment bond and stop payment notice rights. ASA submitted Amicus Brief in support of contractors in this case and it resulted in a published opinion supporting contractors.
Retention Reform-Public Works - SB 293 (2011) Effective 1/1/12: Retention reform has always been an important issue for ASAC. There is no quick solution to this problem that has developed over the years, but ASAC persists in chipping away at it as the occasion arises. A huge victory was won in 2011 when SB 293 was signed by Governor Brown, effective 1/1/12 capping retention at 5% (for non-substantially complex projects-see AB 1705 above). AB 92 (2017) Effective 1/1/18: Extended through 1/1/213.
SB 293 caps retainage from the owner to the prime contractor at 5% on state and local public contracts entered into between Jan. 1, 2012 and Jan. 1, 2016. State law already prohibits a prime contractor from retaining more from a sub than the owner retains from the prime. The new statute also improves the state's prompt payment law by requiring upper-tier contractors on public projects to pay lower-tier contractors within 7 days of receiving a progress payment. Previously, upper-tier contractors had 10 days to pay. This bill was supported by ASAC, AGC and many construction trade organizations. While ASAC didn't sponsor this bill, we did get language added that helps preserve subcontractors' late bond claim rights.
Mechanics Lien Law – SB 189 (2010) Effective 7/1/12: In 2011 ASAC monitored the California Law Revision Commission (CLRC) as they reviewed and proposed revisions to the state Mechanics Lien Law. The resulting changes were presented to the legislature in SB 189 (Lowenthal), with additional changes presented in SB 190.
SB 189 was a complete overhaul of all Mechanic Lien statutes. A massive 244 pages long, it recodified code sections, made substantive changes in law, and might have inadvertently overruled or called into question recent court rulings that are beneficial to sub-trades.
A group of construction associations, ASAC included, determined that the measure needed thorough analysis in order to accept, support or oppose the proposed revision to the codes. A team of eminently qualified attorneys agreed to represent the sub-trades and trade associations and take on this task. This team delivered to the CLRC a 25-page executive summary (supported by over 100 pages of detailed analysis) setting forth trades' concerns and recommendations about the draft bill. These concerns were accepted by the CLRC and the bill was amended accordingly.
Obviously ML's protect our businesses. We must defend our members in this issue. ASAC helped organize the "SB 189 – Trade Contractor Legal Analysis Group", recruited other associations to the cause, and helped fund the work done by the attorneys. SB 189, was signed by Governor Schwarzenegger in September 2010 and became law with a much needed implementation delay to July of 2012. That date gives the organizations time to educate members so they can comply with the ML law from the start.
Owner Implied Warranty - Amicus Brief in Great American v. LAUSD (2010): Owners implied warranty of plans. ASA submitted Amicus Brief in support of contractors in this case and it resulted in a published opinion supporting contractors.
Insurance - Amicus Brief in Vandenberg v. Superior Court (1999): Insurance obligation in CGL insurance policy, may provide an insured coverage for losses pleaded as contractual damages (as opposed to only if plead as negligence claim). ASA submitted Amicus Brief in support of contractors in this case and it resulted in a published opinion supporting contractors.
Payment Protection (1997): In 1997 ASA formed SLDF and wins first case – eliminating pay-if-paid clauses in California. The California Supreme Court Declares A Pay If Paid Clauses Are Void: The leading opinion on pay if paid clauses in California contracts was issued by the Supreme Court of California in 1997 for the case Wm. R. Clarke Corp. v. Safeco Insurance Company (15 Cal.4th 882).
Subcontractors Legal Defense Fund:
Each year, courts across the country hand down hundreds of decisions on federal and state laws, as well as court-made or "case" law, that apply to subcontractors' businesses. Many of the decisions impacting subcontractors interpret the contract provisions of subcontract agreements—provisions like pay-if-paid, hold-harmless, duty-to-defend, and no-damages-for-delay. Some of these decisions are precedent-setting and carry significance for subcontractors across state lines.
ASA's Subcontractors Legal Defense Fund supports ASA's critical legal activities in precedent-setting cases to protect the interests of all subcontractors. ASA taps the SLDF to fund amicus curiae, or "friend-of-the-court," briefs in appellate-level cases that would have a significant impact on subcontractor rights.
From its inception, the SLDF has been involved in many landmark decisions, starting with its first case in 1997, Wm. R. Clarke Corporation v. Safeco Ins., which prohibited pay-if-paid clauses in California, to cases as recent as this year. For a summary of recent cases ASA has been involved in, read ASA's SLDF Activity Report.
Know of a decision that is causing you concern or could set a precedent impacting subcontractors, and want ASA to get involved? Send your completed SLDF application to ASAOffice@asa-hq.com.
Read SLDF Briefs and Other Related Materials
California:
"Pay When Paid" Press Release
Crawford v Weather Shield Amicus
Crawford v Weather Shield Letter
Crawford v Weather Shield Supreme Court Decision
Crosno Construction, Inc. et al v. Travelers Casualty and Surety of America
Eggers Brief
Golden State Boring Letter
Great American v. LAUSD Brief
Great American v. LAUSD
Hernandezcueva Letter
Hernandezcueva
Intra-American - Letter
Moorefield Construction Letter
Donate to the SLDF
Donations help to ensure subcontractor's rights are not abrogated.
© ASA - Bay Area American Subcontractors Association. All Rights Reserved.| Links | Privacy Policy |Admin |
Website Created and Maintained By:
For All Your Online Needs, Contact JDog Enterprises:
Responsive Web Design | Mobilize your Website!| SEO | SEM | Social Media | Online Advertising | PPC | Site Analytics | Custom Reporting
LinkedIn | Facebook | Twitter | JDog Enterprises - JDog Blog