Full Code of SnapKit/Masonry for AI

master 8bd77ea92bbe cached
221 files
577.0 KB
170.0k tokens
12 symbols
1 requests
Download .txt
Showing preview only (635K chars total). Download the full file or copy to clipboard to get everything.
Repository: SnapKit/Masonry
Branch: master
Commit: 8bd77ea92bbe
Files: 221
Total size: 577.0 KB

Directory structure:
gitextract_pa1zs8l1/

├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CodeSnippets/
│   ├── Masonry Constraint Make.codesnippet
│   ├── Masonry Constraint Remake.codesnippet
│   └── Masonry Constraint Update.codesnippet
├── Examples/
│   ├── Masonry iOS Examples/
│   │   ├── Images.xcassets/
│   │   │   └── Contents.json
│   │   ├── Launch Screen.storyboard
│   │   ├── MASAppDelegate.h
│   │   ├── MASAppDelegate.m
│   │   ├── MASExampleAnimatedView.h
│   │   ├── MASExampleAnimatedView.m
│   │   ├── MASExampleArrayView.h
│   │   ├── MASExampleArrayView.m
│   │   ├── MASExampleAspectFitView.h
│   │   ├── MASExampleAspectFitView.m
│   │   ├── MASExampleAttributeChainingView.h
│   │   ├── MASExampleAttributeChainingView.m
│   │   ├── MASExampleBasicView.h
│   │   ├── MASExampleBasicView.m
│   │   ├── MASExampleConstantsView.h
│   │   ├── MASExampleConstantsView.m
│   │   ├── MASExampleDebuggingView.h
│   │   ├── MASExampleDebuggingView.m
│   │   ├── MASExampleDistributeView.h
│   │   ├── MASExampleDistributeView.m
│   │   ├── MASExampleLabelView.h
│   │   ├── MASExampleLabelView.m
│   │   ├── MASExampleLayoutGuideViewController.h
│   │   ├── MASExampleLayoutGuideViewController.m
│   │   ├── MASExampleListViewController.h
│   │   ├── MASExampleListViewController.m
│   │   ├── MASExampleMarginView.h
│   │   ├── MASExampleMarginView.m
│   │   ├── MASExampleRemakeView.h
│   │   ├── MASExampleRemakeView.m
│   │   ├── MASExampleSafeAreaLayoutGuideViewController.h
│   │   ├── MASExampleSafeAreaLayoutGuideViewController.m
│   │   ├── MASExampleScrollView.h
│   │   ├── MASExampleScrollView.m
│   │   ├── MASExampleSidesView.h
│   │   ├── MASExampleSidesView.m
│   │   ├── MASExampleUpdateView.h
│   │   ├── MASExampleUpdateView.m
│   │   ├── MASExampleViewController.h
│   │   ├── MASExampleViewController.m
│   │   ├── Masonry iOS Examples-Info.plist
│   │   ├── Masonry iOS Examples-Prefix.pch
│   │   ├── en.lproj/
│   │   │   └── InfoPlist.strings
│   │   └── main.m
│   └── Masonry iOS Examples.xcodeproj/
│       ├── project.pbxproj
│       ├── project.xcworkspace/
│       │   └── contents.xcworkspacedata
│       └── xcshareddata/
│           └── xcschemes/
│               └── Masonry iOS Examples.xcscheme
├── ISSUE_TEMPLATE.md
├── LICENSE
├── Masonry/
│   ├── Info.plist
│   ├── MASCompositeConstraint.h
│   ├── MASCompositeConstraint.m
│   ├── MASConstraint+Private.h
│   ├── MASConstraint.h
│   ├── MASConstraint.m
│   ├── MASConstraintMaker.h
│   ├── MASConstraintMaker.m
│   ├── MASLayoutConstraint.h
│   ├── MASLayoutConstraint.m
│   ├── MASUtilities.h
│   ├── MASViewAttribute.h
│   ├── MASViewAttribute.m
│   ├── MASViewConstraint.h
│   ├── MASViewConstraint.m
│   ├── Masonry.h
│   ├── NSArray+MASAdditions.h
│   ├── NSArray+MASAdditions.m
│   ├── NSArray+MASShorthandAdditions.h
│   ├── NSLayoutConstraint+MASDebugAdditions.h
│   ├── NSLayoutConstraint+MASDebugAdditions.m
│   ├── View+MASAdditions.h
│   ├── View+MASAdditions.m
│   ├── View+MASShorthandAdditions.h
│   ├── ViewController+MASAdditions.h
│   └── ViewController+MASAdditions.m
├── Masonry.podspec
├── Masonry.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── Masonry.xccheckout
│   └── xcshareddata/
│       └── xcschemes/
│           ├── Masonry OSX.xcscheme
│           └── Masonry iOS.xcscheme
├── Masonry.xcworkspace/
│   └── contents.xcworkspacedata
├── Podfile
├── Pods/
│   ├── Expecta/
│   │   ├── Expecta/
│   │   │   ├── EXPBlockDefinedMatcher.h
│   │   │   ├── EXPBlockDefinedMatcher.m
│   │   │   ├── EXPDefines.h
│   │   │   ├── EXPDoubleTuple.h
│   │   │   ├── EXPDoubleTuple.m
│   │   │   ├── EXPExpect.h
│   │   │   ├── EXPExpect.m
│   │   │   ├── EXPFloatTuple.h
│   │   │   ├── EXPFloatTuple.m
│   │   │   ├── EXPMatcher.h
│   │   │   ├── EXPUnsupportedObject.h
│   │   │   ├── EXPUnsupportedObject.m
│   │   │   ├── Expecta.h
│   │   │   ├── ExpectaObject.h
│   │   │   ├── ExpectaObject.m
│   │   │   ├── ExpectaSupport.h
│   │   │   ├── ExpectaSupport.m
│   │   │   ├── Matchers/
│   │   │   │   ├── EXPMatcherHelpers.h
│   │   │   │   ├── EXPMatcherHelpers.m
│   │   │   │   ├── EXPMatchers+beCloseTo.h
│   │   │   │   ├── EXPMatchers+beCloseTo.m
│   │   │   │   ├── EXPMatchers+beFalsy.h
│   │   │   │   ├── EXPMatchers+beFalsy.m
│   │   │   │   ├── EXPMatchers+beGreaterThan.h
│   │   │   │   ├── EXPMatchers+beGreaterThan.m
│   │   │   │   ├── EXPMatchers+beGreaterThanOrEqualTo.h
│   │   │   │   ├── EXPMatchers+beGreaterThanOrEqualTo.m
│   │   │   │   ├── EXPMatchers+beIdenticalTo.h
│   │   │   │   ├── EXPMatchers+beIdenticalTo.m
│   │   │   │   ├── EXPMatchers+beInTheRangeOf.h
│   │   │   │   ├── EXPMatchers+beInTheRangeOf.m
│   │   │   │   ├── EXPMatchers+beInstanceOf.h
│   │   │   │   ├── EXPMatchers+beInstanceOf.m
│   │   │   │   ├── EXPMatchers+beKindOf.h
│   │   │   │   ├── EXPMatchers+beKindOf.m
│   │   │   │   ├── EXPMatchers+beLessThan.h
│   │   │   │   ├── EXPMatchers+beLessThan.m
│   │   │   │   ├── EXPMatchers+beLessThanOrEqualTo.h
│   │   │   │   ├── EXPMatchers+beLessThanOrEqualTo.m
│   │   │   │   ├── EXPMatchers+beNil.h
│   │   │   │   ├── EXPMatchers+beNil.m
│   │   │   │   ├── EXPMatchers+beSubclassOf.h
│   │   │   │   ├── EXPMatchers+beSubclassOf.m
│   │   │   │   ├── EXPMatchers+beSupersetOf.h
│   │   │   │   ├── EXPMatchers+beSupersetOf.m
│   │   │   │   ├── EXPMatchers+beTruthy.h
│   │   │   │   ├── EXPMatchers+beTruthy.m
│   │   │   │   ├── EXPMatchers+beginWith.h
│   │   │   │   ├── EXPMatchers+beginWith.m
│   │   │   │   ├── EXPMatchers+conformTo.h
│   │   │   │   ├── EXPMatchers+conformTo.m
│   │   │   │   ├── EXPMatchers+contain.h
│   │   │   │   ├── EXPMatchers+contain.m
│   │   │   │   ├── EXPMatchers+endWith.h
│   │   │   │   ├── EXPMatchers+endWith.m
│   │   │   │   ├── EXPMatchers+equal.h
│   │   │   │   ├── EXPMatchers+equal.m
│   │   │   │   ├── EXPMatchers+haveCountOf.h
│   │   │   │   ├── EXPMatchers+haveCountOf.m
│   │   │   │   ├── EXPMatchers+match.h
│   │   │   │   ├── EXPMatchers+match.m
│   │   │   │   ├── EXPMatchers+postNotification.h
│   │   │   │   ├── EXPMatchers+postNotification.m
│   │   │   │   ├── EXPMatchers+raise.h
│   │   │   │   ├── EXPMatchers+raise.m
│   │   │   │   ├── EXPMatchers+raiseWithReason.h
│   │   │   │   ├── EXPMatchers+raiseWithReason.m
│   │   │   │   ├── EXPMatchers+respondTo.h
│   │   │   │   ├── EXPMatchers+respondTo.m
│   │   │   │   └── EXPMatchers.h
│   │   │   ├── NSObject+Expecta.h
│   │   │   ├── NSValue+Expecta.h
│   │   │   └── NSValue+Expecta.m
│   │   ├── LICENSE
│   │   └── README.md
│   ├── Local Podspecs/
│   │   └── Masonry.podspec.json
│   ├── Pods.xcodeproj/
│   │   └── project.pbxproj
│   └── Target Support Files/
│       ├── Expecta/
│       │   ├── Expecta-dummy.m
│       │   ├── Expecta-prefix.pch
│       │   └── Expecta.xcconfig
│       ├── Masonry/
│       │   ├── Masonry-dummy.m
│       │   ├── Masonry-prefix.pch
│       │   └── Masonry.xcconfig
│       ├── Pods-Masonry iOS Examples/
│       │   ├── Pods-Masonry iOS Examples-acknowledgements.markdown
│       │   ├── Pods-Masonry iOS Examples-acknowledgements.plist
│       │   ├── Pods-Masonry iOS Examples-dummy.m
│       │   ├── Pods-Masonry iOS Examples-frameworks.sh
│       │   ├── Pods-Masonry iOS Examples-resources.sh
│       │   ├── Pods-Masonry iOS Examples.debug.xcconfig
│       │   └── Pods-Masonry iOS Examples.release.xcconfig
│       ├── Pods-Masonry iOS Tests/
│       │   ├── Pods-Masonry iOS Tests-acknowledgements.markdown
│       │   ├── Pods-Masonry iOS Tests-acknowledgements.plist
│       │   ├── Pods-Masonry iOS Tests-dummy.m
│       │   ├── Pods-Masonry iOS Tests-frameworks.sh
│       │   ├── Pods-Masonry iOS Tests-resources.sh
│       │   ├── Pods-Masonry iOS Tests.debug.xcconfig
│       │   └── Pods-Masonry iOS Tests.release.xcconfig
│       └── Pods-MasonryTestsLoader/
│           ├── Pods-MasonryTestsLoader-acknowledgements.markdown
│           ├── Pods-MasonryTestsLoader-acknowledgements.plist
│           ├── Pods-MasonryTestsLoader-dummy.m
│           ├── Pods-MasonryTestsLoader-frameworks.sh
│           ├── Pods-MasonryTestsLoader-resources.sh
│           ├── Pods-MasonryTestsLoader.debug.xcconfig
│           └── Pods-MasonryTestsLoader.release.xcconfig
├── README.md
├── Tests/
│   ├── GcovTestObserver.m
│   ├── Masonry Tests.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Masonry iOS Tests.xcscheme
│   ├── MasonryTests-Info.plist
│   ├── MasonryTests-Prefix.pch
│   ├── MasonryTestsLoader/
│   │   ├── CASAppDelegate.h
│   │   ├── CASAppDelegate.m
│   │   ├── Images.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   └── LaunchImage.launchimage/
│   │   │       └── Contents.json
│   │   ├── MasonryTestsLoader-Info.plist
│   │   ├── MasonryTestsLoader-Prefix.pch
│   │   ├── en.lproj/
│   │   │   └── InfoPlist.strings
│   │   └── main.m
│   ├── NSObject+MASSubscriptSupport.h
│   ├── Specs/
│   │   ├── MASCompositeConstraintSpec.m
│   │   ├── MASConstraintDelegateMock.h
│   │   ├── MASConstraintDelegateMock.m
│   │   ├── MASConstraintMakerSpec.m
│   │   ├── MASViewAttributeSpec.m
│   │   ├── MASViewConstraintSpec.m
│   │   ├── NSArray+MASAdditionsSpec.m
│   │   ├── NSLayoutConstraint+MASDebugAdditionsSpec.m
│   │   ├── View+MASAdditionsSpec.m
│   │   └── ViewController+MASAdditionsSpec.m
│   └── XCTest+Spec.h
└── script/
    ├── coveralls.sh
    └── exportenv.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
profile
*.moved-aside
# Desktop Servies
.DS_Store
script/env.sh
DerivedData/

/Masonry.xcworkspace/xcshareddata/Masonry.xccheckout


================================================
FILE: .travis.yml
================================================
---
language: objective-c
osx_image: xcode9
before_install:
  - sudo easy_install cpp-coveralls
  - gem install xcpretty -N
  - export LANG=en_US.UTF-8

script:
  - set -o pipefail
  - xcodebuild -workspace 'Masonry.xcworkspace' -scheme 'Masonry iOS Tests' -configuration Debug -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.0' clean test ARCHS=i386 VALID_ARCHS=i386 ONLY_ACTIVE_ARCH=NO GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
  - xcodebuild -workspace 'Masonry.xcworkspace' -scheme 'Masonry iOS' -configuration Debug -sdk iphonesimulator clean build ARCHS=i386 VALID_ARCHS=i386 ONLY_ACTIVE_ARCH=NO | xcpretty -c
  - xcodebuild -workspace 'Masonry.xcworkspace' -scheme 'Masonry OSX' -configuration Debug clean build | xcpretty -c

after_success:
  - ./script/coveralls.sh


================================================
FILE: CHANGELOG.md
================================================
v1.0.2
======

* Bug fix for array greaterThanOrEqualTo or lessthanOrEqualTo attributes ([#377](https://github.com/SnapKit/Masonry/pull/377))
* Bug fix for Podfile so examples work again ([#374](https://github.com/SnapKit/Masonry/pull/374))
* Improve view distribution performance ([#374](https://github.com/SnapKit/Masonry/pull/362))
* Unshare pod schemes ([#374](https://github.com/SnapKit/Masonry/pull/352))


v1.0.1
======

#### - Added support for first/last baselines

Two additional attributes `NSLayoutAttributeFirstBaseline` and `NSLayoutAttributeLastBaseline` are now supported

v1.0.0
======

#### - Officially v1.0.0

Fixes some issues with install/uninstall vs activate/deactivate and modernises the project files

v0.6.4
======

#### - Add support for tvOS

v0.6.3
======

#### - Add support for view distribution ([pingyourid](https://github.com/pingyourid))

https://github.com/SnapKit/Masonry/pull/225

v0.6.2
======

#### - Add support for iOS 8 margin attributes ([CraigSiemens](https://github.com/CraigSiemens))

https://github.com/SnapKit/Masonry/pull/163

#### - Add support for leading and trailing insets ([montehurd](https://github.com/montehurd))

https://github.com/SnapKit/Masonry/pull/168

#### - Add support for Cartage ([erichoracek](https://github.com/erichoracek))

https://github.com/SnapKit/Masonry/pull/182

#### - Fix memory usage of updateConstraints

v0.6.1
======

#### - Fix unused variable warning when compiled with NSAssert turned off

#### - Add aspect fit example ([kouky](https://github.com/kouky))

https://github.com/SnapKit/Masonry/pull/148

v0.6.0
======

#### - Improved support of iOS 8

As of iOS 8 there is `active` property of `NSLayoutConstraint` available, which allows to (de)activate constraint without searching closest common superview.

#### - Added support of iPhone 6 and iPhone 6+ to test project

v0.5.3
======

#### - Fixed compilation errors on xcode6 beta

https://github.com/Masonry/Masonry/pull/84


v0.5.2
======

#### - Fixed compilation warning with Shorthand view Additions

https://github.com/cloudkite/Masonry/issues/71

v0.5.1
======

#### - Fixed compilation error when using objective-c++ ([nickynick](https://github.com/nickynick))

https://github.com/cloudkite/Masonry/pull/69

v0.5.0
======

#### - Fixed bug in `mas_updateConstraints` ([Rolken](https://github.com/Rolken))

Was not checking that the constraint relation was equivalent
https://github.com/cloudkite/Masonry/pull/65

#### - Added `mas_remakeConstraints` ([nickynick](https://github.com/nickynick))

Similar to `mas_updateConstraints` however instead of trying to update existing constraints it Removes all constraints previously defined and installed for the view, allowing you to provide replacements without hassle.

https://github.com/cloudkite/Masonry/pull/63

#### - Added Autoboxing for scalar/struct attribute values ([nickynick](https://github.com/nickynick))

Autoboxing allows you to write equality relations and offsets by passing primitive values and structs
```obj-c
make.top.mas_equalTo(42);
make.height.mas_equalTo(20);
make.size.mas_equalTo(CGSizeMake(50, 100));
make.edges.mas_equalTo(UIEdgeInsetsMake(10, 0, 10, 0));
make.left.mas_equalTo(view).mas_offset(UIEdgeInsetsMake(10, 0, 10, 0));
```
by default these autoboxing macros are prefix with `mas_`
If you want the unprefixed version you need to add `MAS_SHORTHAND_GLOBALS` before importing Masonry.h (ie in your Prefix.pch)

https://github.com/cloudkite/Masonry/pull/62

#### - Added ability to chain view attributes

Composites are great for defining multiple attributes at once. The following example makes top, left, bottom, right equal to `superview`.

```obj-c
make.edges.equalTo(superview).insets(padding);
```

However if only three of the sides are equal to `superview` then we need to repeat quite a bit of code
```obj-c
make.left.equalTo(superview).insets(padding);
make.right.equalTo(superview).insets(padding);
make.bottom.equalTo(superview).insets(padding);
// top needs to be equal to `otherView`
make.top.equalTo(otherView).insets(padding);
```

This change makes it possible to chain view attributes to improve readability
```obj-c
make.left.right.and.bottom.equalTo(superview).insets(padding);
make.top.equalTo(otherView).insets(padding);
```

https://github.com/cloudkite/Masonry/pull/56

v0.4.0
=======

#### - Fixed Xcode auto-complete support ([nickynick](https://github.com/nickynick))

***Breaking Changes***

If you are holding onto any instances of masonry constraints ie
```obj-c
// in public/private interface
@property (nonatomic, strong) id<MASConstraint> topConstraint;
```

You will need to change this to
```obj-c
// in public/private interface
@property (nonatomic, strong) MASConstraint *topConstraint;
```

Instead of using protocols Masonry now uses an abstract base class for constraints in order to get Xcode auto-complete support see http://stackoverflow.com/questions/14534223/

v0.3.2
=======

#### - Added support for Mac OSX animator proxy ([pfandrade](https://github.com/pfandrade))

```objective-c
self.leftConstraint.animator.offset(20);
```

#### - Added setter methods for NSLayoutConstraint constant proxies like `offset`, `centerOffset`, `insets`, `sizeOffset`.
now you can update these values using more natural syntax

```objective-c
self.edgesConstraint.insets(UIEdgeInsetsMake(20, 10, 15, 5));
```

can now be written as:

```objective-c
self.edgesConstraint.insets = UIEdgeInsetsMake(20, 10, 15, 5);
```


v0.3.1
=======

#### - Added way to specify the same set of constraints to multiple views in an array ([danielrhammond](https://github.com/danielrhammond))

```objective-c
[@[view1, view2, view3] mas_makeConstraints:^(MASConstraintMaker *make) {
    make.baseline.equalTo(superView.mas_centerY);
    make.width.equalTo(@100);
}];
```

v0.3.0
=======

#### - Added `- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block`
which will update existing constraints if possible, otherwise it will add them.  This makes it easier to use Masonry within the `UIView` `- (void)updateConstraints` method which is the recommended place for adding/updating constraints by apple.
#### - Updated examples for iOS7, added a few new examples.
#### - Added -isEqual: and -hash to MASViewAttribute [CraigSiemens].


================================================
FILE: CodeSnippets/Masonry Constraint Make.codesnippet
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDECodeSnippetCompletionPrefix</key>
	<string>mas_make</string>
	<key>IDECodeSnippetCompletionScopes</key>
	<array>
		<string>CodeBlock</string>
	</array>
	<key>IDECodeSnippetContents</key>
	<string>[&lt;#view#&gt; mas_makeConstraints:^(MASConstraintMaker *make){
    &lt;#code#&gt;
}];
</string>
	<key>IDECodeSnippetIdentifier</key>
	<string>4A0A057B-8C17-43BB-BDBA-3A315A942EF8</string>
	<key>IDECodeSnippetLanguage</key>
	<string>Xcode.SourceCodeLanguage.Objective-C</string>
	<key>IDECodeSnippetTitle</key>
	<string>Masonry Constraint Make</string>
	<key>IDECodeSnippetUserSnippet</key>
	<true/>
	<key>IDECodeSnippetVersion</key>
	<integer>2</integer>
</dict>
</plist>


================================================
FILE: CodeSnippets/Masonry Constraint Remake.codesnippet
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDECodeSnippetCompletionPrefix</key>
	<string>mas_remake</string>
	<key>IDECodeSnippetCompletionScopes</key>
	<array>
		<string>CodeBlock</string>
	</array>
	<key>IDECodeSnippetContents</key>
	<string>[&lt;#view#&gt; mas_remakeConstraints:^(MASConstraintMaker *make){
    &lt;#code#&gt;
}];</string>
	<key>IDECodeSnippetIdentifier</key>
	<string>53203A7C-0C2C-493C-9CAE-8900D9AB68A8</string>
	<key>IDECodeSnippetLanguage</key>
	<string>Xcode.SourceCodeLanguage.Objective-C</string>
	<key>IDECodeSnippetTitle</key>
	<string>Masonry Constraint Remake</string>
	<key>IDECodeSnippetUserSnippet</key>
	<true/>
	<key>IDECodeSnippetVersion</key>
	<integer>2</integer>
</dict>
</plist>


================================================
FILE: CodeSnippets/Masonry Constraint Update.codesnippet
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDECodeSnippetCompletionPrefix</key>
	<string>mas_update</string>
	<key>IDECodeSnippetCompletionScopes</key>
	<array>
		<string>CodeBlock</string>
	</array>
	<key>IDECodeSnippetContents</key>
	<string>[&lt;#view#&gt; mas_updateConstraints:^(MASConstraintMaker *make){
    &lt;#code#&gt;
}];
</string>
	<key>IDECodeSnippetIdentifier</key>
	<string>CF088737-121D-4166-97B0-D8AB63696B08</string>
	<key>IDECodeSnippetLanguage</key>
	<string>Xcode.SourceCodeLanguage.Objective-C</string>
	<key>IDECodeSnippetTitle</key>
	<string>Masonry Constraint Update</string>
	<key>IDECodeSnippetUserSnippet</key>
	<true/>
	<key>IDECodeSnippetVersion</key>
	<integer>2</integer>
</dict>
</plist>


================================================
FILE: Examples/Masonry iOS Examples/Images.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/Masonry iOS Examples/Launch Screen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13196" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="cbD-vd-OFn"/>
                        <viewControllerLayoutGuide type="bottom" id="TBi-GG-GBk"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
                                <rect key="frame" x="47.5" y="592.5" width="281" height="41"/>
                                <string key="text">Copyright © 2017 Jonas Budelmann.
All rights reserved.</string>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Masonry" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
                                <rect key="frame" x="114.5" y="202" width="146" height="43"/>
                                <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
                            <constraint firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
                            <constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="34" id="Y44-ml-fuU"/>
                            <constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="52" y="374.66266866566718"/>
        </scene>
    </scenes>
</document>


================================================
FILE: Examples/Masonry iOS Examples/MASAppDelegate.h
================================================
//
//  MASAppDelegate.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end


================================================
FILE: Examples/Masonry iOS Examples/MASAppDelegate.m
================================================
//
//  MASAppDelegate.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASAppDelegate.h"
#import "MASExampleListViewController.h"

@implementation MASAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
    // Override point for customization after application launch.
    self.window.backgroundColor = UIColor.whiteColor;
    
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:MASExampleListViewController.new];
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleAnimatedView.h
================================================
//
//  MASExampleAnimatedView.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 22/07/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleAnimatedView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleAnimatedView.m
================================================
//
//  MASExampleAnimatedView.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 22/07/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleAnimatedView.h"

@interface MASExampleAnimatedView ()

@property (nonatomic, strong) NSMutableArray *animatableConstraints;
@property (nonatomic, assign) int padding;
@property (nonatomic, assign) BOOL animating;

@end

@implementation MASExampleAnimatedView

- (id)init {
    self = [super init];
    if (!self) return nil;

    UIView *greenView = UIView.new;
    greenView.backgroundColor = UIColor.greenColor;
    greenView.layer.borderColor = UIColor.blackColor.CGColor;
    greenView.layer.borderWidth = 2;
    [self addSubview:greenView];

    UIView *redView = UIView.new;
    redView.backgroundColor = UIColor.redColor;
    redView.layer.borderColor = UIColor.blackColor.CGColor;
    redView.layer.borderWidth = 2;
    [self addSubview:redView];

    UIView *blueView = UIView.new;
    blueView.backgroundColor = UIColor.blueColor;
    blueView.layer.borderColor = UIColor.blackColor.CGColor;
    blueView.layer.borderWidth = 2;
    [self addSubview:blueView];

    UIView *superview = self;
    int padding = self.padding = 10;
    UIEdgeInsets paddingInsets = UIEdgeInsetsMake(self.padding, self.padding, self.padding, self.padding);

    self.animatableConstraints = NSMutableArray.new;

    [greenView mas_makeConstraints:^(MASConstraintMaker *make) {
        [self.animatableConstraints addObjectsFromArray:@[
            make.edges.equalTo(superview).insets(paddingInsets).priorityLow(),
            make.bottom.equalTo(blueView.mas_top).offset(-padding),
        ]];

        make.size.equalTo(redView);
        make.height.equalTo(blueView.mas_height);
    }];

    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        [self.animatableConstraints addObjectsFromArray:@[
            make.edges.equalTo(superview).insets(paddingInsets).priorityLow(),
            make.left.equalTo(greenView.mas_right).offset(padding),
            make.bottom.equalTo(blueView.mas_top).offset(-padding),
        ]];

        make.size.equalTo(greenView);
        make.height.equalTo(blueView.mas_height);
    }];

    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
        [self.animatableConstraints addObjectsFromArray:@[
            make.edges.equalTo(superview).insets(paddingInsets).priorityLow(),
        ]];

        make.height.equalTo(greenView.mas_height);
        make.height.equalTo(redView.mas_height);
    }];

    return self;
}

- (void)didMoveToWindow {
    [self layoutIfNeeded];

    if (self.window) {
        self.animating = YES;
        [self animateWithInvertedInsets:NO];
    }
}

- (void)willMoveToWindow:(UIWindow *)newWindow {
    self.animating = newWindow != nil;
}

- (void)animateWithInvertedInsets:(BOOL)invertedInsets {
    if (!self.animating) return;

    int padding = invertedInsets ? 100 : self.padding;
    UIEdgeInsets paddingInsets = UIEdgeInsetsMake(padding, padding, padding, padding);
    for (MASConstraint *constraint in self.animatableConstraints) {
        constraint.insets = paddingInsets;
    }

    [UIView animateWithDuration:1 animations:^{
        [self layoutIfNeeded];
    } completion:^(BOOL finished) {
        //repeat!
        [self animateWithInvertedInsets:!invertedInsets];
    }];
}


@end



================================================
FILE: Examples/Masonry iOS Examples/MASExampleArrayView.h
================================================
//
//  MASExampleArrayView.h
//  Masonry iOS Examples
//
//  Created by Daniel Hammond on 11/26/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleArrayView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleArrayView.m
================================================
//
//  MASExampleArrayView.m
//  Masonry iOS Examples
//
//  Created by Daniel Hammond on 11/26/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleArrayView.h"

static CGFloat const kArrayExampleIncrement = 10.0;

@interface MASExampleArrayView ()

@property (nonatomic, assign) CGFloat offset;
@property (nonatomic, strong) NSArray *buttonViews;

@end

@implementation MASExampleArrayView

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    UIButton *raiseButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [raiseButton setTitle:@"Raise" forState:UIControlStateNormal];
    [raiseButton addTarget:self action:@selector(raiseAction) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:raiseButton];
    
    UIButton *centerButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [centerButton setTitle:@"Center" forState:UIControlStateNormal];
    [centerButton addTarget:self action:@selector(centerAction) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:centerButton];

    UIButton *lowerButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [lowerButton setTitle:@"Lower" forState:UIControlStateNormal];
    [lowerButton addTarget:self action:@selector(lowerAction) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:lowerButton];
    
    [lowerButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self).with.offset(10.0);
    }];

    [centerButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self);
    }];

    [raiseButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.equalTo(self).with.offset(-10);
    }];
    
    self.buttonViews = @[ raiseButton, lowerButton, centerButton ];
    
    return self;
}

- (void)centerAction {
    self.offset = 0.0;
}

- (void)raiseAction {
    self.offset -= kArrayExampleIncrement;
}

- (void)lowerAction {
    self.offset += kArrayExampleIncrement;
}

- (void)setOffset:(CGFloat)offset {
    _offset = offset;
    [self setNeedsUpdateConstraints];
}

- (void)updateConstraints {
    [self.buttonViews updateConstraints:^(MASConstraintMaker *make) {
        make.baseline.equalTo(self.mas_centerY).with.offset(self.offset);
    }];
    
    //according to apple super should be called at end of method
    [super updateConstraints];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleAspectFitView.h
================================================
//
//  MASExampleAspectFitView.h
//  Masonry iOS Examples
//
//  Created by Michael Koukoullis on 19/01/2015.
//  Copyright (c) 2015 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleAspectFitView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleAspectFitView.m
================================================
//
//  MASExampleAspectFitView.m
//  Masonry iOS Examples
//
//  Created by Michael Koukoullis on 19/01/2015.
//  Copyright (c) 2015 Jonas Budelmann. All rights reserved.
//

#import "MASExampleAspectFitView.h"

@interface MASExampleAspectFitView ()
@property UIView *topView;
@property UIView *topInnerView;
@property UIView *bottomView;
@property UIView *bottomInnerView;
@end

@implementation MASExampleAspectFitView

// Designated initializer
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:CGRectZero];
    
    if (self) {
        
        // Create views
        self.topView = [[UIView alloc] initWithFrame:CGRectZero];
        self.topInnerView = [[UIView alloc] initWithFrame:CGRectZero];
        self.bottomView = [[UIView alloc] initWithFrame:CGRectZero];
        self.bottomInnerView = [[UIView alloc] initWithFrame:CGRectZero];
        
        // Set background colors
        UIColor *blueColor = [UIColor colorWithRed:0.663 green:0.796 blue:0.996 alpha:1];
        [self.topView setBackgroundColor:blueColor];

        UIColor *lightGreenColor = [UIColor colorWithRed:0.784 green:0.992 blue:0.851 alpha:1];
        [self.topInnerView setBackgroundColor:lightGreenColor];

        UIColor *pinkColor = [UIColor colorWithRed:0.992 green:0.804 blue:0.941 alpha:1];
        [self.bottomView setBackgroundColor:pinkColor];
        
        UIColor *darkGreenColor = [UIColor colorWithRed:0.443 green:0.780 blue:0.337 alpha:1];
        [self.bottomInnerView setBackgroundColor:darkGreenColor];
        
        // Layout top and bottom views to each take up half of the window
        [self addSubview:self.topView];
        [self.topView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.and.top.equalTo(self);
        }];
        
        [self addSubview:self.bottomView];
        [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.and.bottom.equalTo(self);
            make.top.equalTo(self.topView.mas_bottom);
            make.height.equalTo(self.topView);
        }];
        
        // Inner views are configured for aspect fit with ratio of 3:1
        [self.topView addSubview:self.topInnerView];
        [self.topInnerView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.equalTo(self.topInnerView.mas_height).multipliedBy(3);
            
            make.width.and.height.lessThanOrEqualTo(self.topView);
            make.width.and.height.equalTo(self.topView).with.priorityLow();
            
            make.center.equalTo(self.topView);
        }];
        
        [self.bottomView addSubview:self.bottomInnerView];
        [self.bottomInnerView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(self.bottomInnerView.mas_width).multipliedBy(3);
            
            make.width.and.height.lessThanOrEqualTo(self.bottomView);
            make.width.and.height.equalTo(self.bottomView).with.priorityLow();
                        
            make.center.equalTo(self.bottomView);
        }];
    }
    
    return self;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleAttributeChainingView.h
================================================
//
//  MASExampleAttributeChainingView.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 31/03/14.
//  Copyright (c) 2014 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleAttributeChainingView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleAttributeChainingView.m
================================================
//
//  MASExampleAttributeChainingView.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 31/03/14.
//  Copyright (c) 2014 Jonas Budelmann. All rights reserved.
//

#import "MASExampleAttributeChainingView.h"

@implementation MASExampleAttributeChainingView

- (id)init {
    self = [super init];
    if (!self) return nil;

    UIView *greenView = UIView.new;
    greenView.backgroundColor = UIColor.greenColor;
    greenView.layer.borderColor = UIColor.blackColor.CGColor;
    greenView.layer.borderWidth = 2;
    [self addSubview:greenView];

    UIView *redView = UIView.new;
    redView.backgroundColor = UIColor.redColor;
    redView.layer.borderColor = UIColor.blackColor.CGColor;
    redView.layer.borderWidth = 2;
    [self addSubview:redView];

    UIView *blueView = UIView.new;
    blueView.backgroundColor = UIColor.blueColor;
    blueView.layer.borderColor = UIColor.blackColor.CGColor;
    blueView.layer.borderWidth = 2;
    [self addSubview:blueView];

    UIView *superview = self;
    UIEdgeInsets padding = UIEdgeInsetsMake(15, 10, 15, 10);


    [greenView mas_makeConstraints:^(MASConstraintMaker *make) {
        // chain attributes
        make.top.and.left.equalTo(superview).insets(padding);

        // which is the equivalent of
//        make.top.greaterThanOrEqualTo(superview).insets(padding);
//        make.left.greaterThanOrEqualTo(superview).insets(padding);

        make.bottom.equalTo(blueView.mas_top).insets(padding);
        make.right.equalTo(redView.mas_left).insets(padding);
        make.width.equalTo(redView.mas_width);

        make.height.equalTo(@[redView, blueView]);
    }];

    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        // chain attributes
        make.top.and.right.equalTo(superview).insets(padding);

        make.left.equalTo(greenView.mas_right).insets(padding);
        make.bottom.equalTo(blueView.mas_top).insets(padding);
        make.width.equalTo(greenView.mas_width);

        make.height.equalTo(@[greenView, blueView]);
    }];

    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(greenView.mas_bottom).insets(padding);

        // chain attributes
        make.left.right.and.bottom.equalTo(superview).insets(padding);

        make.height.equalTo(@[greenView, redView]);
    }];

    return self;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleBasicView.h
================================================
//
//  MASExampleBasicView.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleBasicView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleBasicView.m
================================================
//
//  MASExampleBasicView.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASExampleBasicView.h"

@implementation MASExampleBasicView

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    UIView *greenView = UIView.new;
    greenView.backgroundColor = UIColor.greenColor;
    greenView.layer.borderColor = UIColor.blackColor.CGColor;
    greenView.layer.borderWidth = 2;
    [self addSubview:greenView];
    
    UIView *redView = UIView.new;
    redView.backgroundColor = UIColor.redColor;
    redView.layer.borderColor = UIColor.blackColor.CGColor;
    redView.layer.borderWidth = 2;
    [self addSubview:redView];
    
    UIView *blueView = UIView.new;
    blueView.backgroundColor = UIColor.blueColor;
    blueView.layer.borderColor = UIColor.blackColor.CGColor;
    blueView.layer.borderWidth = 2;
    [self addSubview:blueView];
    
    UIView *superview = self;
    int padding = 10;

    //if you want to use Masonry without the mas_ prefix
    //define MAS_SHORTHAND before importing Masonry.h see Masonry iOS Examples-Prefix.pch
    [greenView makeConstraints:^(MASConstraintMaker *make) {
        make.top.greaterThanOrEqualTo(superview.top).offset(padding);
        make.left.equalTo(superview.left).offset(padding);
        make.bottom.equalTo(blueView.top).offset(-padding);
        make.right.equalTo(redView.left).offset(-padding);
        make.width.equalTo(redView.width);

        make.height.equalTo(redView.height);
        make.height.equalTo(blueView.height);
        
    }];

    //with is semantic and option
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(superview.mas_top).with.offset(padding); //with with
        make.left.equalTo(greenView.mas_right).offset(padding); //without with
        make.bottom.equalTo(blueView.mas_top).offset(-padding);
        make.right.equalTo(superview.mas_right).offset(-padding);
        make.width.equalTo(greenView.mas_width);
        
        make.height.equalTo(@[greenView, blueView]); //can pass array of views
    }];
    
    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(greenView.mas_bottom).offset(padding);
        make.left.equalTo(superview.mas_left).offset(padding);
        make.bottom.equalTo(superview.mas_bottom).offset(-padding);
        make.right.equalTo(superview.mas_right).offset(-padding);
        make.height.equalTo(@[greenView.mas_height, redView.mas_height]); //can pass array of attributes
    }];

    return self;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleConstantsView.h
================================================
//
//  MASExampleConstantsView.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleConstantsView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleConstantsView.m
================================================
//
//  MASExampleConstantsView.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASExampleConstantsView.h"

@implementation MASExampleConstantsView

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    UIView *purpleView = UIView.new;
    purpleView.backgroundColor = UIColor.purpleColor;
    purpleView.layer.borderColor = UIColor.blackColor.CGColor;
    purpleView.layer.borderWidth = 2;
    [self addSubview:purpleView];
    
    UIView *orangeView = UIView.new;
    orangeView.backgroundColor = UIColor.orangeColor;
    orangeView.layer.borderColor = UIColor.blackColor.CGColor;
    orangeView.layer.borderWidth = 2;
    [self addSubview:orangeView];
    
    //example of using constants
    
    [purpleView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(@20);
        make.left.equalTo(@20);
        make.bottom.equalTo(@-20);
        make.right.equalTo(@-20);
    }];
    
    // auto-boxing macros allow you to simply use scalars and structs, they will be wrapped automatically
    
    [orangeView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(CGPointMake(0, 50));
        make.size.equalTo(CGSizeMake(200, 100));
    }];
    
    return self;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleDebuggingView.h
================================================
//
//  MASExampleDebuggingView.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 3/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleDebuggingView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleDebuggingView.m
================================================
//
//  MASExampleDebuggingView.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 3/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleDebuggingView.h"

@implementation MASExampleDebuggingView

- (id)init {
    self = [super init];
    if (!self) return nil;

    UIView *greenView = UIView.new;
    greenView.backgroundColor = UIColor.greenColor;
    greenView.layer.borderColor = UIColor.blackColor.CGColor;
    greenView.layer.borderWidth = 2;
    [self addSubview:greenView];

    UIView *redView = UIView.new;
    redView.backgroundColor = UIColor.redColor;
    redView.layer.borderColor = UIColor.blackColor.CGColor;
    redView.layer.borderWidth = 2;
    [self addSubview:redView];

    UILabel *blueView = UILabel.new;
    blueView.backgroundColor = UIColor.blueColor;
    blueView.numberOfLines = 3;
    blueView.textAlignment = NSTextAlignmentCenter;
    blueView.font = [UIFont systemFontOfSize:24];
    blueView.textColor = UIColor.whiteColor;
    blueView.text = @"this should look broken! check your console!";
    blueView.layer.borderColor = UIColor.blackColor.CGColor;
    blueView.layer.borderWidth = 2;
    [self addSubview:blueView];

    UIView *superview = self;
    int padding = 10;

    //you can attach debug keys to views like so:
//    greenView.mas_key = @"greenView";
//    redView.mas_key = @"redView";
//    blueView.mas_key = @"blueView";
//    superview.mas_key = @"superview";

    //OR you can attach keys automagically like so:
    MASAttachKeys(greenView, redView, blueView, superview);

    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
        //you can also attach debug keys to constaints
        make.edges.equalTo(@1).key(@"ConflictingConstraint"); //composite constraint keys will be indexed
        make.height.greaterThanOrEqualTo(@5000).key(@"ConstantConstraint");

        make.top.equalTo(greenView.mas_bottom).offset(padding);
        make.left.equalTo(superview.mas_left).offset(padding);
        make.bottom.equalTo(superview.mas_bottom).offset(-padding).key(@"BottomConstraint");
        make.right.equalTo(superview.mas_right).offset(-padding);
        make.height.equalTo(greenView.mas_height);
        make.height.equalTo(redView.mas_height).key(@340954); //anything can be a key
    }];
    
    [greenView makeConstraints:^(MASConstraintMaker *make) {
        make.top.greaterThanOrEqualTo(superview.top).offset(padding);
        make.left.equalTo(superview.left).offset(padding);
        make.bottom.equalTo(blueView.top).offset(-padding);
        make.right.equalTo(redView.left).offset(-padding);
        make.width.equalTo(redView.width);

        make.height.equalTo(redView.height);
        make.height.equalTo(blueView.height);
    }];

    //with is semantic and option
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(superview.mas_top).with.offset(padding);
        make.left.equalTo(greenView.mas_right).offset(padding);
        make.bottom.equalTo(blueView.mas_top).offset(-padding);
        make.right.equalTo(superview.mas_right).offset(-padding);
        make.width.equalTo(greenView.mas_width);

        make.height.equalTo(@[greenView, blueView]);
    }];
    
    return self;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleDistributeView.h
================================================
//
//  MASExampleDistributeView.h
//  Masonry iOS Examples
//
//  Created by bibibi on 15/8/6.
//  Copyright (c) 2015年 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleDistributeView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleDistributeView.m
================================================
//
//  MASExampleDistributeView.m
//  Masonry iOS Examples
//
//  Created by bibibi on 15/8/6.
//  Copyright (c) 2015年 Jonas Budelmann. All rights reserved.
//

#import "MASExampleDistributeView.h"

@implementation MASExampleDistributeView

- (id)init {
    self = [super init];
    if (!self) return nil;

    NSMutableArray *arr = @[].mutableCopy;
    for (int i = 0; i < 4; i++) {
        UIView *view = UIView.new;
        view.backgroundColor = [self randomColor];
        view.layer.borderColor = UIColor.blackColor.CGColor;
        view.layer.borderWidth = 2;
        [self addSubview:view];
        [arr addObject:view];
    }
    
    unsigned int type  = arc4random()%4;
    switch (type) {
        case 0:
            [arr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:20 leadSpacing:5 tailSpacing:5];
            [arr makeConstraints:^(MASConstraintMaker *make) {
                make.top.equalTo(@60);
                make.height.equalTo(@60);
            }];
            break;
        case 1:
            [arr mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedSpacing:20 leadSpacing:5 tailSpacing:5];
            [arr makeConstraints:^(MASConstraintMaker *make) {
                make.left.equalTo(@0);
                make.width.equalTo(@60);
            }];
            break;
        case 2:
            [arr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:30 leadSpacing:200 tailSpacing:30];
            [arr makeConstraints:^(MASConstraintMaker *make) {
                make.top.equalTo(@60);
                make.height.equalTo(@60);
            }];
            break;
        case 3:
            [arr mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedItemLength:30 leadSpacing:30 tailSpacing:200];
            [arr makeConstraints:^(MASConstraintMaker *make) {
                make.left.equalTo(@0);
                make.width.equalTo(@60);
            }];
            break;
            
        default:
            break;
    }
    
    return self;
}

- (UIColor *)randomColor {
    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleLabelView.h
================================================
//
//  MASExampleLabelView.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 24/10/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleLabelView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleLabelView.m
================================================
//
//  MASExampleLabelView.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 24/10/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleLabelView.h"

static UIEdgeInsets const kPadding = {10, 10, 10, 10};

@interface MASExampleLabelView ()

@property (nonatomic, strong) UILabel *shortLabel;
@property (nonatomic, strong) UILabel *longLabel;

@end

@implementation MASExampleLabelView

- (id)init {
    self = [super init];
    if (!self) return nil;

    // text courtesy of http://baconipsum.com/

    self.shortLabel = UILabel.new;
    self.shortLabel.numberOfLines = 1;
    self.shortLabel.textColor = [UIColor purpleColor];
    self.shortLabel.lineBreakMode = NSLineBreakByTruncatingTail;
    self.shortLabel.text = @"Bacon";
    [self addSubview:self.shortLabel];

    self.longLabel = UILabel.new;
    self.longLabel.numberOfLines = 8;
    self.longLabel.textColor = [UIColor darkGrayColor];
    self.longLabel.lineBreakMode = NSLineBreakByTruncatingTail;
    self.longLabel.text = @"Bacon ipsum dolor sit amet spare ribs fatback kielbasa salami, tri-tip jowl pastrami flank short loin rump sirloin. Tenderloin frankfurter chicken biltong rump chuck filet mignon pork t-bone flank ham hock.";
    [self addSubview:self.longLabel];

    [self.longLabel makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.left).insets(kPadding);
        make.top.equalTo(self.top).insets(kPadding);
    }];

    [self.shortLabel makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.longLabel.lastBaseline);
        make.right.equalTo(self.right).insets(kPadding);
    }];

    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];

    // for multiline UILabel's you need set the preferredMaxLayoutWidth
    // you need to do this after [super layoutSubviews] as the frames will have a value from Auto Layout at this point

    // stay tuned for new easier way todo this coming soon to Masonry

    CGFloat width = CGRectGetMinX(self.shortLabel.frame) - kPadding.left;
    width -= CGRectGetMinX(self.longLabel.frame);
    self.longLabel.preferredMaxLayoutWidth = width;

    // need to layoutSubviews again as frames need to recalculated with preferredLayoutWidth
    [super layoutSubviews];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleLayoutGuideViewController.h
================================================
//
//  MASExampleLayoutGuideViewController.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 26/11/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleLayoutGuideViewController : UIViewController

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleLayoutGuideViewController.m
================================================
//
//  MASExampleLayoutGuideViewController.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 26/11/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleLayoutGuideViewController.h"

@interface MASExampleLayoutGuideViewController ()

@end

@implementation MASExampleLayoutGuideViewController

- (id)init {
    self = [super init];
    if (!self) return nil;

    self.title = @"Layout Guides";

    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    UIView *topView = UIView.new;
    topView.backgroundColor = UIColor.greenColor;
    topView.layer.borderColor = UIColor.blackColor.CGColor;
    topView.layer.borderWidth = 2;
    [self.view addSubview:topView];

    UIView *topSubview = UIView.new;
    topSubview.backgroundColor = UIColor.blueColor;
    topSubview.layer.borderColor = UIColor.blackColor.CGColor;
    topSubview.layer.borderWidth = 2;
    [topView addSubview:topSubview];
    
    UIView *bottomView = UIView.new;
    bottomView.backgroundColor = UIColor.redColor;
    bottomView.layer.borderColor = UIColor.blackColor.CGColor;
    bottomView.layer.borderWidth = 2;
    [self.view addSubview:bottomView];

    [topView makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.mas_topLayoutGuide);
        make.left.equalTo(self.view);
        make.right.equalTo(self.view);
        make.height.equalTo(@40);
    }];

    [topSubview makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.mas_topLayoutGuide);
        make.centerX.equalTo(@0);
        make.width.equalTo(@20);
        make.height.equalTo(@20);
    }];
    
    [bottomView makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(self.mas_bottomLayoutGuide);
        make.left.equalTo(self.view);
        make.right.equalTo(self.view);
        make.height.equalTo(@40);
    }];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleListViewController.h
================================================
//
//  MASExampleListViewController.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleListViewController : UITableViewController

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleListViewController.m
================================================
//
//  MASExampleListViewController.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASExampleListViewController.h"
#import "MASExampleViewController.h"
#import "MASExampleBasicView.h"
#import "MASExampleConstantsView.h"
#import "MASExampleSidesView.h"
#import "MASExampleAnimatedView.h"
#import "MASExampleDebuggingView.h"
#import "MASExampleLabelView.h"
#import "MASExampleUpdateView.h"
#import "MASExampleRemakeView.h"
#import "MASExampleScrollView.h"
#import "MASExampleLayoutGuideViewController.h"
#import "MASExampleSafeAreaLayoutGuideViewController.h"
#import "MASExampleArrayView.h"
#import "MASExampleAttributeChainingView.h"
#import "MASExampleAspectFitView.h"
#import "MASExampleMarginView.h"
#import "MASExampleDistributeView.h"

static NSString * const kMASCellReuseIdentifier = @"kMASCellReuseIdentifier";

@interface MASExampleListViewController ()

@property (nonatomic, strong) NSArray *exampleControllers;

@end

@implementation MASExampleListViewController

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    self.title = @"Examples";
    
    self.exampleControllers = @[
        [[MASExampleViewController alloc] initWithTitle:@"Basic"
                                              viewClass:MASExampleBasicView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Update Constraints"
                                              viewClass:MASExampleUpdateView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Remake Constraints"
                                              viewClass:MASExampleRemakeView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Using Constants"
                                              viewClass:MASExampleConstantsView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Composite Edges"
                                              viewClass:MASExampleSidesView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Aspect Fit"
                                              viewClass:MASExampleAspectFitView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Basic Animated"
                                              viewClass:MASExampleAnimatedView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Debugging Helpers"
                                              viewClass:MASExampleDebuggingView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Bacony Labels"
                                              viewClass:MASExampleLabelView.class],
        [[MASExampleViewController alloc] initWithTitle:@"UIScrollView"
                                              viewClass:MASExampleScrollView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Array"
                                              viewClass:MASExampleArrayView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Attribute Chaining"
                                              viewClass:MASExampleAttributeChainingView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Margins"
                                              viewClass:MASExampleMarginView.class],
        [[MASExampleViewController alloc] initWithTitle:@"Views Distribute"
                                              viewClass:MASExampleDistributeView.class],

    ];
    
    if ([UIViewController instancesRespondToSelector:@selector(topLayoutGuide)])
    {
        self.exampleControllers = [self.exampleControllers arrayByAddingObject:[[MASExampleLayoutGuideViewController alloc] init]];
    }
    
    if ([UIView instancesRespondToSelector:@selector(safeAreaLayoutGuide)])
    {
        self.exampleControllers = [self.exampleControllers arrayByAddingObject:[[MASExampleSafeAreaLayoutGuideViewController alloc] init]];
    }
    
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];
    [self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:kMASCellReuseIdentifier];
}

#pragma mark - UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *viewController = self.exampleControllers[indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kMASCellReuseIdentifier forIndexPath:indexPath];
    cell.textLabel.text = viewController.title;
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.exampleControllers.count;
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *viewController = self.exampleControllers[indexPath.row];
    [self.navigationController pushViewController:viewController animated:YES];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleMarginView.h
================================================
//
//  MASExampleMarginView.h
//  Masonry iOS Examples
//
//  Created by Craig Siemens on 2015-02-23.
//  Copyright (c) 2015 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleMarginView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleMarginView.m
================================================
//
//  MASExampleMarginView.m
//  Masonry iOS Examples
//
//  Created by Craig Siemens on 2015-02-23.
//  Copyright (c) 2015 Jonas Budelmann. All rights reserved.
//

#import "MASExampleMarginView.h"

@implementation MASExampleMarginView

- (instancetype)init {
    self = [super init];
    if (!self) return nil;
    
    UIView *lastView = self;
    for (int i = 0; i < 10; i++) {
        UIView *view = UIView.new;
        view.backgroundColor = [self randomColor];
        view.layer.borderColor = UIColor.blackColor.CGColor;
        view.layer.borderWidth = 2;
        view.layoutMargins = UIEdgeInsetsMake(5, 10, 15, 20);
        [self addSubview:view];
        
        [view mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(lastView.topMargin);
            make.bottom.equalTo(lastView.bottomMargin);
            make.left.equalTo(lastView.leftMargin);
            make.right.equalTo(lastView.rightMargin);
        }];
        
        lastView = view;
    }
    
    return self;
}

- (UIColor *)randomColor {
    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleRemakeView.h
================================================
//
//  MASExampleRemakeView.h
//  Masonry iOS Examples
//
//  Created by Sam Symons on 2014-06-22.
//  Copyright (c) 2014 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleRemakeView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleRemakeView.m
================================================
//
//  MASExampleRemakeView.m
//  Masonry iOS Examples
//
//  Created by Sam Symons on 2014-06-22.
//  Copyright (c) 2014 Jonas Budelmann. All rights reserved.
//

#import "MASExampleRemakeView.h"

@interface MASExampleRemakeView ()

@property (nonatomic, strong) UIButton *movingButton;
@property (nonatomic, assign) BOOL topLeft;

- (void)toggleButtonPosition;

@end

@implementation MASExampleRemakeView

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    self.movingButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [self.movingButton setTitle:@"Move Me!" forState:UIControlStateNormal];
    self.movingButton.layer.borderColor = UIColor.greenColor.CGColor;
    self.movingButton.layer.borderWidth = 3;
    
    [self.movingButton addTarget:self action:@selector(toggleButtonPosition) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:self.movingButton];
    
    self.topLeft = YES;
    
    return self;
}

+ (BOOL)requiresConstraintBasedLayout
{
    return YES;
}

// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {
    
    [self.movingButton remakeConstraints:^(MASConstraintMaker *make) {
        make.width.equalTo(@(100));
        make.height.equalTo(@(100));
        
        if (self.topLeft) {
            make.left.equalTo(self.left).with.offset(10);
            make.top.equalTo(self.top).with.offset(10);
        }
        else {
            make.bottom.equalTo(self.bottom).with.offset(-10);
            make.right.equalTo(self.right).with.offset(-10);
        }
    }];
    
    //according to apple super should be called at end of method
    [super updateConstraints];
}

- (void)toggleButtonPosition {
    self.topLeft = !self.topLeft;
    
    // tell constraints they need updating
    [self setNeedsUpdateConstraints];
    
    // update constraints now so we can animate the change
    [self updateConstraintsIfNeeded];
    
    [UIView animateWithDuration:0.4 animations:^{
        [self layoutIfNeeded];
    }];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleSafeAreaLayoutGuideViewController.h
================================================
//
//  MASExampleSafeAreaLayoutGuideViewController.h
//  Masonry iOS Examples
//
//  Created by MingLQ on 2017-09-27.
//  Copyright © 2017 MingLQ. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleSafeAreaLayoutGuideViewController : UIViewController

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleSafeAreaLayoutGuideViewController.m
================================================
//
//  MASExampleSafeAreaLayoutGuideViewController.m
//  Masonry iOS Examples
//
//  Created by MingLQ on 2017-09-27.
//  Copyright © 2017 MingLQ. All rights reserved.
//

#import "MASExampleSafeAreaLayoutGuideViewController.h"

@interface MASExampleSafeAreaLayoutGuideViewController ()

@end

@implementation MASExampleSafeAreaLayoutGuideViewController

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = @"Safe Area Layout Guides";
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    UIView *view1 = [UIView new];
    view1.backgroundColor = [UIColor redColor];
    [self.view addSubview:view1];
    
    UIView *view2 = [UIView new];
    view2.backgroundColor = [UIColor greenColor];
    [self.view addSubview:view2];
    
    UIView *view3 = [UIView new];
    view3.backgroundColor = [UIColor blueColor];
    [self.view addSubview:view3];
    
    UIView *leftView = [self viewWithName:@"LY"];
    UIView *rightView = [self viewWithName:@"RY"];
    UIView *topView = [self viewWithName:@"TX"];
    UIView *bottomView = [self viewWithName:@"BX"];
    
    UIView *leftTopView = [self viewWithName:@"LT"];
    UIView *rightTopView = [self viewWithName:@"RT"];
    UIView *leftBottomView = [self viewWithName:@"LB"];
    UIView *rightBottomView = [self viewWithName:@"RB"];
    
    UIView *centerView = [self viewWithName:@"XY"];
    
    const CGFloat size = 50.0;
    
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view.mas_safeAreaLayoutGuide).inset(10.0);
    }];
    
    [view2 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.height.equalTo(self.view.mas_safeAreaLayoutGuide).sizeOffset(CGSizeMake(- 40.0, - 40.0));
    }];
    
    [view3 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.equalTo(self.view.mas_safeAreaLayoutGuide).sizeOffset(CGSizeMake(- 60.0, - 60.0));
        make.height.equalTo(self.view.mas_safeAreaLayoutGuide).sizeOffset(CGSizeMake(- 60.0, - 60.0));
    }];
    
    [leftTopView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.height.equalTo(@(size));
    }];
    
    [rightTopView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight);
        make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
        make.width.height.equalTo(@(size));
    }];
    
    [leftBottomView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view.mas_safeAreaLayoutGuideLeft);
        make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
        make.width.height.equalTo(@(size));
    }];
    
    [rightBottomView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.bottom.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.height.equalTo(@(size));
    }];
    
    [leftView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.centerY.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.height.equalTo(@(size));
    }];
    
    [rightView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight);
        make.centerY.equalTo(self.view.mas_safeAreaLayoutGuideCenterY);
        make.width.height.equalTo(@(size));
    }];
    
    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
        make.centerX.equalTo(self.view.mas_safeAreaLayoutGuideCenterX);
        make.width.height.equalTo(@(size));
    }];
    
    [bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.centerX.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.height.equalTo(@(size));
    }];
    
    [centerView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view.mas_safeAreaLayoutGuide);
        make.width.height.equalTo(@(size));
    }];
}

- (UIView *)viewWithName:(NSString *)name {
    UILabel *label = [UILabel new];
    label.text = name;
    label.textAlignment = NSTextAlignmentCenter;
    label.textColor = [UIColor blackColor];
    label.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:label];
    return label;
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleScrollView.h
================================================
//
//  MASExampleScrollView.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 20/11/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleScrollView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleScrollView.m
================================================
//
//  MASExampleScrollView.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 20/11/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleScrollView.h"

/**
 *  UIScrollView and Auto Layout don't play very nicely together see
 *  https://developer.apple.com/library/ios/technotes/tn2154/_index.html
 *
 *  This is an example of one workaround
 *
 *  for another approach see https://github.com/bizz84/MVScrollViewAutoLayout
 */

@interface MASExampleScrollView ()
@property (strong, nonatomic) UIScrollView* scrollView;
@end

@implementation MASExampleScrollView

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    UIScrollView *scrollView = UIScrollView.new;
    self.scrollView = scrollView;
    scrollView.backgroundColor = [UIColor grayColor];
    [self addSubview:scrollView];
    [self.scrollView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self);
    }];
    
    [self generateContent];

    return self;
}

- (void)generateContent {
    UIView* contentView = UIView.new;
    [self.scrollView addSubview:contentView];
    
    [contentView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
    }];
    
    UIView *lastView;
    CGFloat height = 25;
    
    for (int i = 0; i < 10; i++) {
        UIView *view = UIView.new;
        view.backgroundColor = [self randomColor];
        [contentView addSubview:view];
        
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
        [view addGestureRecognizer:singleTap];
        
        [view mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(lastView ? lastView.bottom : @0);
            make.left.equalTo(@0);
            make.width.equalTo(contentView.width);
            make.height.equalTo(@(height));
        }];
        
        height += 25;
        lastView = view;
    }
    
    [contentView makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(lastView.bottom);
    }];
}

- (UIColor *)randomColor {
    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}

- (void)singleTap:(UITapGestureRecognizer*)sender {
    [sender.view setAlpha:sender.view.alpha / 1.20]; // To see something happen on screen when you tap :O
    [self.scrollView scrollRectToVisible:sender.view.frame animated:YES];
};

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleSidesView.h
================================================
//
//  MASExampleSidesView.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleSidesView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleSidesView.m
================================================
//
//  MASExampleSidesView.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASExampleSidesView.h"

@implementation MASExampleSidesView

- (id)init {
    self = [super init];
    if (!self) return nil;
    
    UIView *lastView = self;
    for (int i = 0; i < 10; i++) {
        UIView *view = UIView.new;
        view.backgroundColor = [self randomColor];
        view.layer.borderColor = UIColor.blackColor.CGColor;
        view.layer.borderWidth = 2;
        [self addSubview:view];
        
        [view mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(lastView).insets(UIEdgeInsetsMake(5, 10, 15, 20));
        }];
        
        lastView = view;
    }
    
    return self;
}

- (UIColor *)randomColor {
    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleUpdateView.h
================================================
//
//  MASExampleUpdateView.h
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 3/11/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleUpdateView : UIView

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleUpdateView.m
================================================
//
//  MASExampleUpdateView.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 3/11/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASExampleUpdateView.h"

@interface MASExampleUpdateView ()

@property (nonatomic, strong) UIButton *growingButton;
@property (nonatomic, assign) CGSize buttonSize;

@end

@implementation MASExampleUpdateView

- (id)init {
    self = [super init];
    if (!self) return nil;

    self.growingButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [self.growingButton setTitle:@"Grow Me!" forState:UIControlStateNormal];
    self.growingButton.layer.borderColor = UIColor.greenColor.CGColor;
    self.growingButton.layer.borderWidth = 3;

    [self.growingButton addTarget:self action:@selector(didTapGrowButton:) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:self.growingButton];

    self.buttonSize = CGSizeMake(100, 100);

    return self;
}

+ (BOOL)requiresConstraintBasedLayout
{
    return YES;
}

// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {

    [self.growingButton updateConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self);
        make.width.equalTo(@(self.buttonSize.width)).priorityLow();
        make.height.equalTo(@(self.buttonSize.height)).priorityLow();
        make.width.lessThanOrEqualTo(self);
        make.height.lessThanOrEqualTo(self);
    }];
    
    //according to apple super should be called at end of method
    [super updateConstraints];
}

- (void)didTapGrowButton:(UIButton *)button {
    self.buttonSize = CGSizeMake(self.buttonSize.width * 1.3, self.buttonSize.height * 1.3);

    // tell constraints they need updating
    [self setNeedsUpdateConstraints];

    // update constraints now so we can animate the change
    [self updateConstraintsIfNeeded];

    [UIView animateWithDuration:0.4 animations:^{
        [self layoutIfNeeded];
    }];
}

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleViewController.h
================================================
//
//  MASExampleOneViewController.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MASExampleViewController : UIViewController

- (id)initWithTitle:(NSString *)title viewClass:(Class)viewClass;

@end


================================================
FILE: Examples/Masonry iOS Examples/MASExampleViewController.m
================================================
//
//  MASExampleOneViewController.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASExampleViewController.h"
#import "MASExampleBasicView.h"

@interface MASExampleViewController ()

@property (nonatomic, strong) Class viewClass;

@end

@implementation MASExampleViewController

- (id)initWithTitle:(NSString *)title viewClass:(Class)viewClass {
    self = [super init];
    if (!self) return nil;
    
    self.title = title;
    self.viewClass = viewClass;
    
    return self;
}

- (void)loadView {
    self.view = self.viewClass.new;
    self.view.backgroundColor = [UIColor whiteColor];
}

#ifdef __IPHONE_7_0
- (UIRectEdge)edgesForExtendedLayout {
    return UIRectEdgeNone;
}
#endif

@end


================================================
FILE: Examples/Masonry iOS Examples/Masonry iOS Examples-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleDisplayName</key>
	<string>${PRODUCT_NAME}</string>
	<key>CFBundleExecutable</key>
	<string>${EXECUTABLE_NAME}</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>${PRODUCT_NAME}</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1.0</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>Launch Screen</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UIRequiresFullScreen</key>
	<true/>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: Examples/Masonry iOS Examples/Masonry iOS Examples-Prefix.pch
================================================
//
// Prefix header for all source files of the 'Masonry iOS Examples' target in the 'Masonry iOS Examples' project
//

#import <Availability.h>

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <QuartzCore/QuartzCore.h>

    //define this constant if you want to use Masonry without the 'mas_' prefix
    #define MAS_SHORTHAND

    //define this constant if you want to enable auto-boxing for default syntax
    #define MAS_SHORTHAND_GLOBALS

    #import "Masonry.h"
#endif


================================================
FILE: Examples/Masonry iOS Examples/en.lproj/InfoPlist.strings
================================================
/* Localized versions of Info.plist keys */



================================================
FILE: Examples/Masonry iOS Examples/main.m
================================================
//
//  main.m
//  Masonry iOS Examples
//
//  Created by Jonas Budelmann on 22/07/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <UIKit/UIKit.h>

#import "MASAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([MASAppDelegate class]));
    }
}


================================================
FILE: Examples/Masonry iOS Examples.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		00FC4A321B7359D700DCA999 /* MASExampleDistributeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 00FC4A311B7359D700DCA999 /* MASExampleDistributeView.m */; };
		27A27D461A6CF0C400D34F52 /* MASExampleAspectFitView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A27D451A6CF0C400D34F52 /* MASExampleAspectFitView.m */; };
		3C02224919D0C4EC00507321 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3C02224819D0C4EC00507321 /* Images.xcassets */; };
		3DB1CAD5184538E200E91FC5 /* MASExampleArrayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DB1CAD4184538E200E91FC5 /* MASExampleArrayView.m */; };
		44C0E6AF1A9B9C55003C70CF /* MASExampleMarginView.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C0E6AE1A9B9C55003C70CF /* MASExampleMarginView.m */; };
		4BEB55B61957394E008C862B /* MASExampleRemakeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BEB55B51957394E008C862B /* MASExampleRemakeView.m */; };
		6C87DADA5AB046D9A3181A65 /* libPods-Masonry iOS Examples.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BDC1B8303EED42A2B01B94B1 /* libPods-Masonry iOS Examples.a */; };
		DD175E6A182639FB0099129A /* MASExampleUpdateView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD175E69182639FB0099129A /* MASExampleUpdateView.m */; };
		DD32C3FD18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD32C3FC18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.m */; };
		DD52F22B179CAD57005CD195 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD52F22A179CAD57005CD195 /* UIKit.framework */; };
		DD52F22D179CAD57005CD195 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD52F22C179CAD57005CD195 /* Foundation.framework */; };
		DD52F22F179CAD57005CD195 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD52F22E179CAD57005CD195 /* CoreGraphics.framework */; };
		DD52F235179CAD57005CD195 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DD52F233179CAD57005CD195 /* InfoPlist.strings */; };
		DD52F237179CAD57005CD195 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F236179CAD57005CD195 /* main.m */; };
		DD52F23B179CAD57005CD195 /* MASAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F23A179CAD57005CD195 /* MASAppDelegate.m */; };
		DD52F251179CADC0005CD195 /* MASExampleBasicView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F248179CADC0005CD195 /* MASExampleBasicView.m */; };
		DD52F252179CADC0005CD195 /* MASExampleConstantsView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F24A179CADC0005CD195 /* MASExampleConstantsView.m */; };
		DD52F253179CADC0005CD195 /* MASExampleListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F24C179CADC0005CD195 /* MASExampleListViewController.m */; };
		DD52F254179CADC0005CD195 /* MASExampleSidesView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F24E179CADC0005CD195 /* MASExampleSidesView.m */; };
		DD52F255179CADC0005CD195 /* MASExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD52F250179CADC0005CD195 /* MASExampleViewController.m */; };
		DD653E4A1843E61500D1EC5A /* MASExampleLayoutGuideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD653E491843E61500D1EC5A /* MASExampleLayoutGuideViewController.m */; };
		DD7CC17617ACE990007A469E /* MASExampleDebuggingView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7CC17517ACE990007A469E /* MASExampleDebuggingView.m */; };
		DD9B4D35183CC980002BF408 /* MASExampleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9B4D34183CC980002BF408 /* MASExampleScrollView.m */; };
		DDDF60CC181915E300BF7B8B /* MASExampleLabelView.m in Sources */ = {isa = PBXBuildFile; fileRef = DDDF60CB181915E300BF7B8B /* MASExampleLabelView.m */; };
		DDF3875C179D648D00178773 /* MASExampleAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = DDF3875B179D648D00178773 /* MASExampleAnimatedView.m */; };
		DFBACE591F7B76E40047F15A /* MASExampleSafeAreaLayoutGuideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DFBACE581F7B76E40047F15A /* MASExampleSafeAreaLayoutGuideViewController.m */; };
		DFBACE5D1F7B86860047F15A /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DFBACE5C1F7B86860047F15A /* Launch Screen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		00FC4A301B7359D700DCA999 /* MASExampleDistributeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleDistributeView.h; sourceTree = "<group>"; };
		00FC4A311B7359D700DCA999 /* MASExampleDistributeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleDistributeView.m; sourceTree = "<group>"; };
		27A27D441A6CF0C400D34F52 /* MASExampleAspectFitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleAspectFitView.h; sourceTree = "<group>"; };
		27A27D451A6CF0C400D34F52 /* MASExampleAspectFitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleAspectFitView.m; sourceTree = "<group>"; };
		321AA59CF7B045B6D503D2E5 /* Pods-Masonry iOS Examples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Masonry iOS Examples.release.xcconfig"; path = "../Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples.release.xcconfig"; sourceTree = "<group>"; };
		3C02224819D0C4EC00507321 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
		3DB1CAD3184538E200E91FC5 /* MASExampleArrayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleArrayView.h; sourceTree = "<group>"; };
		3DB1CAD4184538E200E91FC5 /* MASExampleArrayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleArrayView.m; sourceTree = "<group>"; };
		44C0E6AD1A9B9C55003C70CF /* MASExampleMarginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleMarginView.h; sourceTree = "<group>"; };
		44C0E6AE1A9B9C55003C70CF /* MASExampleMarginView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleMarginView.m; sourceTree = "<group>"; };
		4BEB55B41957394E008C862B /* MASExampleRemakeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleRemakeView.h; sourceTree = "<group>"; };
		4BEB55B51957394E008C862B /* MASExampleRemakeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleRemakeView.m; sourceTree = "<group>"; };
		50B25D0621957AEB87C3FCC2 /* Pods-Masonry iOS Examples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Masonry iOS Examples.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples.debug.xcconfig"; sourceTree = "<group>"; };
		BDC1B8303EED42A2B01B94B1 /* libPods-Masonry iOS Examples.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Masonry iOS Examples.a"; sourceTree = BUILT_PRODUCTS_DIR; };
		DD175E68182639FB0099129A /* MASExampleUpdateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleUpdateView.h; sourceTree = "<group>"; };
		DD175E69182639FB0099129A /* MASExampleUpdateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleUpdateView.m; sourceTree = "<group>"; };
		DD32C3FB18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleAttributeChainingView.h; sourceTree = "<group>"; };
		DD32C3FC18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleAttributeChainingView.m; sourceTree = "<group>"; };
		DD52F227179CAD57005CD195 /* Masonry iOS Examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Masonry iOS Examples.app"; sourceTree = BUILT_PRODUCTS_DIR; };
		DD52F22A179CAD57005CD195 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
		DD52F22C179CAD57005CD195 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
		DD52F22E179CAD57005CD195 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
		DD52F232179CAD57005CD195 /* Masonry iOS Examples-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Masonry iOS Examples-Info.plist"; sourceTree = "<group>"; };
		DD52F234179CAD57005CD195 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
		DD52F236179CAD57005CD195 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
		DD52F238179CAD57005CD195 /* Masonry iOS Examples-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Masonry iOS Examples-Prefix.pch"; sourceTree = "<group>"; };
		DD52F239179CAD57005CD195 /* MASAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MASAppDelegate.h; sourceTree = "<group>"; };
		DD52F23A179CAD57005CD195 /* MASAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MASAppDelegate.m; sourceTree = "<group>"; };
		DD52F247179CADC0005CD195 /* MASExampleBasicView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleBasicView.h; sourceTree = "<group>"; };
		DD52F248179CADC0005CD195 /* MASExampleBasicView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleBasicView.m; sourceTree = "<group>"; };
		DD52F249179CADC0005CD195 /* MASExampleConstantsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleConstantsView.h; sourceTree = "<group>"; };
		DD52F24A179CADC0005CD195 /* MASExampleConstantsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleConstantsView.m; sourceTree = "<group>"; };
		DD52F24B179CADC0005CD195 /* MASExampleListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleListViewController.h; sourceTree = "<group>"; };
		DD52F24C179CADC0005CD195 /* MASExampleListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleListViewController.m; sourceTree = "<group>"; };
		DD52F24D179CADC0005CD195 /* MASExampleSidesView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleSidesView.h; sourceTree = "<group>"; };
		DD52F24E179CADC0005CD195 /* MASExampleSidesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleSidesView.m; sourceTree = "<group>"; };
		DD52F24F179CADC0005CD195 /* MASExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleViewController.h; sourceTree = "<group>"; };
		DD52F250179CADC0005CD195 /* MASExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleViewController.m; sourceTree = "<group>"; };
		DD653E481843E61500D1EC5A /* MASExampleLayoutGuideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleLayoutGuideViewController.h; sourceTree = "<group>"; };
		DD653E491843E61500D1EC5A /* MASExampleLayoutGuideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleLayoutGuideViewController.m; sourceTree = "<group>"; };
		DD7CC17417ACE990007A469E /* MASExampleDebuggingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleDebuggingView.h; sourceTree = "<group>"; };
		DD7CC17517ACE990007A469E /* MASExampleDebuggingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleDebuggingView.m; sourceTree = "<group>"; };
		DD9B4D33183CC980002BF408 /* MASExampleScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleScrollView.h; sourceTree = "<group>"; };
		DD9B4D34183CC980002BF408 /* MASExampleScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleScrollView.m; sourceTree = "<group>"; };
		DDDF60CA181915E300BF7B8B /* MASExampleLabelView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleLabelView.h; sourceTree = "<group>"; };
		DDDF60CB181915E300BF7B8B /* MASExampleLabelView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleLabelView.m; sourceTree = "<group>"; };
		DDF3875A179D648D00178773 /* MASExampleAnimatedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASExampleAnimatedView.h; sourceTree = "<group>"; };
		DDF3875B179D648D00178773 /* MASExampleAnimatedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASExampleAnimatedView.m; sourceTree = "<group>"; };
		DFBACE571F7B76E30047F15A /* MASExampleSafeAreaLayoutGuideViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MASExampleSafeAreaLayoutGuideViewController.h; sourceTree = "<group>"; };
		DFBACE581F7B76E40047F15A /* MASExampleSafeAreaLayoutGuideViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MASExampleSafeAreaLayoutGuideViewController.m; sourceTree = "<group>"; };
		DFBACE5C1F7B86860047F15A /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		DD52F224179CAD57005CD195 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				DD52F22B179CAD57005CD195 /* UIKit.framework in Frameworks */,
				DD52F22D179CAD57005CD195 /* Foundation.framework in Frameworks */,
				DD52F22F179CAD57005CD195 /* CoreGraphics.framework in Frameworks */,
				6C87DADA5AB046D9A3181A65 /* libPods-Masonry iOS Examples.a in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		DD52F21E179CAD57005CD195 = {
			isa = PBXGroup;
			children = (
				DD52F230179CAD57005CD195 /* Masonry iOS Examples */,
				DD52F229179CAD57005CD195 /* Frameworks */,
				DD52F228179CAD57005CD195 /* Products */,
				DF14AF6879B23556F891E1F7 /* Pods */,
			);
			sourceTree = "<group>";
		};
		DD52F228179CAD57005CD195 /* Products */ = {
			isa = PBXGroup;
			children = (
				DD52F227179CAD57005CD195 /* Masonry iOS Examples.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		DD52F229179CAD57005CD195 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				DD52F22A179CAD57005CD195 /* UIKit.framework */,
				DD52F22C179CAD57005CD195 /* Foundation.framework */,
				DD52F22E179CAD57005CD195 /* CoreGraphics.framework */,
				BDC1B8303EED42A2B01B94B1 /* libPods-Masonry iOS Examples.a */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
		DD52F230179CAD57005CD195 /* Masonry iOS Examples */ = {
			isa = PBXGroup;
			children = (
				DD52F239179CAD57005CD195 /* MASAppDelegate.h */,
				DD52F23A179CAD57005CD195 /* MASAppDelegate.m */,
				DD52F257179CADCB005CD195 /* Controllers */,
				DD52F256179CADC4005CD195 /* Views */,
				3C02224819D0C4EC00507321 /* Images.xcassets */,
				DD52F231179CAD57005CD195 /* Supporting Files */,
				DFBACE5C1F7B86860047F15A /* Launch Screen.storyboard */,
			);
			path = "Masonry iOS Examples";
			sourceTree = "<group>";
		};
		DD52F231179CAD57005CD195 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				DD52F232179CAD57005CD195 /* Masonry iOS Examples-Info.plist */,
				DD52F233179CAD57005CD195 /* InfoPlist.strings */,
				DD52F236179CAD57005CD195 /* main.m */,
				DD52F238179CAD57005CD195 /* Masonry iOS Examples-Prefix.pch */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		DD52F256179CADC4005CD195 /* Views */ = {
			isa = PBXGroup;
			children = (
				DD52F247179CADC0005CD195 /* MASExampleBasicView.h */,
				DD52F248179CADC0005CD195 /* MASExampleBasicView.m */,
				DD52F249179CADC0005CD195 /* MASExampleConstantsView.h */,
				DD52F24A179CADC0005CD195 /* MASExampleConstantsView.m */,
				DD52F24D179CADC0005CD195 /* MASExampleSidesView.h */,
				DD52F24E179CADC0005CD195 /* MASExampleSidesView.m */,
				27A27D441A6CF0C400D34F52 /* MASExampleAspectFitView.h */,
				27A27D451A6CF0C400D34F52 /* MASExampleAspectFitView.m */,
				DDF3875A179D648D00178773 /* MASExampleAnimatedView.h */,
				DDF3875B179D648D00178773 /* MASExampleAnimatedView.m */,
				DD7CC17417ACE990007A469E /* MASExampleDebuggingView.h */,
				DD7CC17517ACE990007A469E /* MASExampleDebuggingView.m */,
				DDDF60CA181915E300BF7B8B /* MASExampleLabelView.h */,
				DDDF60CB181915E300BF7B8B /* MASExampleLabelView.m */,
				DD175E68182639FB0099129A /* MASExampleUpdateView.h */,
				DD175E69182639FB0099129A /* MASExampleUpdateView.m */,
				4BEB55B41957394E008C862B /* MASExampleRemakeView.h */,
				4BEB55B51957394E008C862B /* MASExampleRemakeView.m */,
				DD9B4D33183CC980002BF408 /* MASExampleScrollView.h */,
				DD9B4D34183CC980002BF408 /* MASExampleScrollView.m */,
				3DB1CAD3184538E200E91FC5 /* MASExampleArrayView.h */,
				3DB1CAD4184538E200E91FC5 /* MASExampleArrayView.m */,
				DD32C3FB18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.h */,
				DD32C3FC18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.m */,
				44C0E6AD1A9B9C55003C70CF /* MASExampleMarginView.h */,
				44C0E6AE1A9B9C55003C70CF /* MASExampleMarginView.m */,
				00FC4A301B7359D700DCA999 /* MASExampleDistributeView.h */,
				00FC4A311B7359D700DCA999 /* MASExampleDistributeView.m */,
			);
			name = Views;
			sourceTree = "<group>";
		};
		DD52F257179CADCB005CD195 /* Controllers */ = {
			isa = PBXGroup;
			children = (
				DD52F24B179CADC0005CD195 /* MASExampleListViewController.h */,
				DD52F24C179CADC0005CD195 /* MASExampleListViewController.m */,
				DD52F24F179CADC0005CD195 /* MASExampleViewController.h */,
				DD52F250179CADC0005CD195 /* MASExampleViewController.m */,
				DD653E481843E61500D1EC5A /* MASExampleLayoutGuideViewController.h */,
				DD653E491843E61500D1EC5A /* MASExampleLayoutGuideViewController.m */,
				DFBACE571F7B76E30047F15A /* MASExampleSafeAreaLayoutGuideViewController.h */,
				DFBACE581F7B76E40047F15A /* MASExampleSafeAreaLayoutGuideViewController.m */,
			);
			name = Controllers;
			sourceTree = "<group>";
		};
		DF14AF6879B23556F891E1F7 /* Pods */ = {
			isa = PBXGroup;
			children = (
				50B25D0621957AEB87C3FCC2 /* Pods-Masonry iOS Examples.debug.xcconfig */,
				321AA59CF7B045B6D503D2E5 /* Pods-Masonry iOS Examples.release.xcconfig */,
			);
			name = Pods;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		DD52F226179CAD57005CD195 /* Masonry iOS Examples */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = DD52F244179CAD57005CD195 /* Build configuration list for PBXNativeTarget "Masonry iOS Examples" */;
			buildPhases = (
				621F6A1FCAEF44F880874959 /* [CP] Check Pods Manifest.lock */,
				DD52F223179CAD57005CD195 /* Sources */,
				DD52F224179CAD57005CD195 /* Frameworks */,
				DD52F225179CAD57005CD195 /* Resources */,
				5C6517785DFF4287BCDF458D /* [CP] Copy Pods Resources */,
				9A6DE33A61510E8F9549C5EE /* [CP] Embed Pods Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "Masonry iOS Examples";
			productName = "Masonry iOS Examples";
			productReference = DD52F227179CAD57005CD195 /* Masonry iOS Examples.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		DD52F21F179CAD57005CD195 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				CLASSPREFIX = MAS;
				LastUpgradeCheck = 0900;
				ORGANIZATIONNAME = "Jonas Budelmann";
			};
			buildConfigurationList = DD52F222179CAD57005CD195 /* Build configuration list for PBXProject "Masonry iOS Examples" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
			);
			mainGroup = DD52F21E179CAD57005CD195;
			productRefGroup = DD52F228179CAD57005CD195 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				DD52F226179CAD57005CD195 /* Masonry iOS Examples */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		DD52F225179CAD57005CD195 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				DFBACE5D1F7B86860047F15A /* Launch Screen.storyboard in Resources */,
				3C02224919D0C4EC00507321 /* Images.xcassets in Resources */,
				DD52F235179CAD57005CD195 /* InfoPlist.strings in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		5C6517785DFF4287BCDF458D /* [CP] Copy Pods Resources */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "[CP] Copy Pods Resources";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-resources.sh\"\n";
			showEnvVarsInLog = 0;
		};
		621F6A1FCAEF44F880874959 /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
				"${PODS_ROOT}/Manifest.lock",
			);
			name = "[CP] Check Pods Manifest.lock";
			outputPaths = (
				"$(DERIVED_FILE_DIR)/Pods-Masonry iOS Examples-checkManifestLockResult.txt",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
			showEnvVarsInLog = 0;
		};
		9A6DE33A61510E8F9549C5EE /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "[CP] Embed Pods Frameworks";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		DD52F223179CAD57005CD195 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				00FC4A321B7359D700DCA999 /* MASExampleDistributeView.m in Sources */,
				DD175E6A182639FB0099129A /* MASExampleUpdateView.m in Sources */,
				DD52F237179CAD57005CD195 /* main.m in Sources */,
				3DB1CAD5184538E200E91FC5 /* MASExampleArrayView.m in Sources */,
				DD52F23B179CAD57005CD195 /* MASAppDelegate.m in Sources */,
				DD52F251179CADC0005CD195 /* MASExampleBasicView.m in Sources */,
				44C0E6AF1A9B9C55003C70CF /* MASExampleMarginView.m in Sources */,
				DD653E4A1843E61500D1EC5A /* MASExampleLayoutGuideViewController.m in Sources */,
				DDDF60CC181915E300BF7B8B /* MASExampleLabelView.m in Sources */,
				27A27D461A6CF0C400D34F52 /* MASExampleAspectFitView.m in Sources */,
				DD52F252179CADC0005CD195 /* MASExampleConstantsView.m in Sources */,
				DD52F253179CADC0005CD195 /* MASExampleListViewController.m in Sources */,
				DFBACE591F7B76E40047F15A /* MASExampleSafeAreaLayoutGuideViewController.m in Sources */,
				DD52F254179CADC0005CD195 /* MASExampleSidesView.m in Sources */,
				DD32C3FD18E8BFF6001F6AD2 /* MASExampleAttributeChainingView.m in Sources */,
				DD52F255179CADC0005CD195 /* MASExampleViewController.m in Sources */,
				DDF3875C179D648D00178773 /* MASExampleAnimatedView.m in Sources */,
				DD7CC17617ACE990007A469E /* MASExampleDebuggingView.m in Sources */,
				4BEB55B61957394E008C862B /* MASExampleRemakeView.m in Sources */,
				DD9B4D35183CC980002BF408 /* MASExampleScrollView.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		DD52F233179CAD57005CD195 /* InfoPlist.strings */ = {
			isa = PBXVariantGroup;
			children = (
				DD52F234179CAD57005CD195 /* en */,
			);
			name = InfoPlist.strings;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		DD52F242179CAD57005CD195 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		DD52F243179CAD57005CD195 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = YES;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		DD52F245179CAD57005CD195 /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 50B25D0621957AEB87C3FCC2 /* Pods-Masonry iOS Examples.debug.xcconfig */;
			buildSettings = {
				GCC_PRECOMPILE_PREFIX_HEADER = YES;
				GCC_PREFIX_HEADER = "Masonry iOS Examples/Masonry iOS Examples-Prefix.pch";
				INFOPLIST_FILE = "Masonry iOS Examples/Masonry iOS Examples-Info.plist";
				PRODUCT_BUNDLE_IDENTIFIER = "com.cloudling.${PRODUCT_NAME:rfc1034identifier}";
				PRODUCT_NAME = "Masonry iOS Examples";
				WRAPPER_EXTENSION = app;
			};
			name = Debug;
		};
		DD52F246179CAD57005CD195 /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 321AA59CF7B045B6D503D2E5 /* Pods-Masonry iOS Examples.release.xcconfig */;
			buildSettings = {
				GCC_PRECOMPILE_PREFIX_HEADER = YES;
				GCC_PREFIX_HEADER = "Masonry iOS Examples/Masonry iOS Examples-Prefix.pch";
				INFOPLIST_FILE = "Masonry iOS Examples/Masonry iOS Examples-Info.plist";
				PRODUCT_BUNDLE_IDENTIFIER = "com.cloudling.${PRODUCT_NAME:rfc1034identifier}";
				PRODUCT_NAME = "Masonry iOS Examples";
				WRAPPER_EXTENSION = app;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		DD52F222179CAD57005CD195 /* Build configuration list for PBXProject "Masonry iOS Examples" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				DD52F242179CAD57005CD195 /* Debug */,
				DD52F243179CAD57005CD195 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		DD52F244179CAD57005CD195 /* Build configuration list for PBXNativeTarget "Masonry iOS Examples" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				DD52F245179CAD57005CD195 /* Debug */,
				DD52F246179CAD57005CD195 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = DD52F21F179CAD57005CD195 /* Project object */;
}


================================================
FILE: Examples/Masonry iOS Examples.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:Masonry iOS Examples.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: Examples/Masonry iOS Examples.xcodeproj/xcshareddata/xcschemes/Masonry iOS Examples.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0900"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "3AED05B61AD59FD40053CC65"
               BuildableName = "Masonry.framework"
               BlueprintName = "Masonry iOS"
               ReferencedContainer = "container:../Masonry.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "DD52F226179CAD57005CD195"
               BuildableName = "Masonry iOS Examples.app"
               BlueprintName = "Masonry iOS Examples"
               ReferencedContainer = "container:Masonry iOS Examples.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      language = ""
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "DD52F226179CAD57005CD195"
            BuildableName = "Masonry iOS Examples.app"
            BlueprintName = "Masonry iOS Examples"
            ReferencedContainer = "container:Masonry iOS Examples.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      language = ""
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "DD52F226179CAD57005CD195"
            BuildableName = "Masonry iOS Examples.app"
            BlueprintName = "Masonry iOS Examples"
            ReferencedContainer = "container:Masonry iOS Examples.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "DD52F226179CAD57005CD195"
            BuildableName = "Masonry iOS Examples.app"
            BlueprintName = "Masonry iOS Examples"
            ReferencedContainer = "container:Masonry iOS Examples.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: ISSUE_TEMPLATE.md
================================================
### New Issue Checklist

🚫 If this template is not filled out your issue **will** be closed with no comment. 🚫

* [ ] I have looked at the [Documentation](https://github.com/SnapKit/Masonry/blob/master/README.md)
* [ ] I have filled out this issue template.

### Issue Info

 Info                    | Value                               |
-------------------------|-------------------------------------|
 Platform                | e.g. ios/osx/tvos
 Platform Version        | e.g. 8.0
 Masonry Version         | e.g. 1.0
 Integration Method      | e.g. carthage/cocoapods/manually
 

### Issue Description

⚠️ Replace this with the description of your issue. ⚠️ 


================================================
FILE: LICENSE
================================================
Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================
FILE: Masonry/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>FMWK</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>$(CURRENT_PROJECT_VERSION)</string>
	<key>NSPrincipalClass</key>
	<string></string>
</dict>
</plist>


================================================
FILE: Masonry/MASCompositeConstraint.h
================================================
//
//  MASCompositeConstraint.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASConstraint.h"
#import "MASUtilities.h"

/**
 *	A group of MASConstraint objects
 */
@interface MASCompositeConstraint : MASConstraint

/**
 *	Creates a composite with a predefined array of children
 *
 *	@param	children	child MASConstraints
 *
 *	@return	a composite constraint
 */
- (id)initWithChildren:(NSArray *)children;

@end


================================================
FILE: Masonry/MASCompositeConstraint.m
================================================
//
//  MASCompositeConstraint.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASCompositeConstraint.h"
#import "MASConstraint+Private.h"

@interface MASCompositeConstraint () <MASConstraintDelegate>

@property (nonatomic, strong) id mas_key;
@property (nonatomic, strong) NSMutableArray *childConstraints;

@end

@implementation MASCompositeConstraint

- (id)initWithChildren:(NSArray *)children {
    self = [super init];
    if (!self) return nil;

    _childConstraints = [children mutableCopy];
    for (MASConstraint *constraint in _childConstraints) {
        constraint.delegate = self;
    }

    return self;
}

#pragma mark - MASConstraintDelegate

- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint {
    NSUInteger index = [self.childConstraints indexOfObject:constraint];
    NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint);
    [self.childConstraints replaceObjectAtIndex:index withObject:replacementConstraint];
}

- (MASConstraint *)constraint:(MASConstraint __unused *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    id<MASConstraintDelegate> strongDelegate = self.delegate;
    MASConstraint *newConstraint = [strongDelegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute];
    newConstraint.delegate = self;
    [self.childConstraints addObject:newConstraint];
    return newConstraint;
}

#pragma mark - NSLayoutConstraint multiplier proxies 

- (MASConstraint * (^)(CGFloat))multipliedBy {
    return ^id(CGFloat multiplier) {
        for (MASConstraint *constraint in self.childConstraints) {
            constraint.multipliedBy(multiplier);
        }
        return self;
    };
}

- (MASConstraint * (^)(CGFloat))dividedBy {
    return ^id(CGFloat divider) {
        for (MASConstraint *constraint in self.childConstraints) {
            constraint.dividedBy(divider);
        }
        return self;
    };
}

#pragma mark - MASLayoutPriority proxy

- (MASConstraint * (^)(MASLayoutPriority))priority {
    return ^id(MASLayoutPriority priority) {
        for (MASConstraint *constraint in self.childConstraints) {
            constraint.priority(priority);
        }
        return self;
    };
}

#pragma mark - NSLayoutRelation proxy

- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation {
    return ^id(id attr, NSLayoutRelation relation) {
        for (MASConstraint *constraint in self.childConstraints.copy) {
            constraint.equalToWithRelation(attr, relation);
        }
        return self;
    };
}

#pragma mark - attribute chaining

- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    [self constraint:self addConstraintWithLayoutAttribute:layoutAttribute];
    return self;
}

#pragma mark - Animator proxy

#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)

- (MASConstraint *)animator {
    for (MASConstraint *constraint in self.childConstraints) {
        [constraint animator];
    }
    return self;
}

#endif

#pragma mark - debug helpers

- (MASConstraint * (^)(id))key {
    return ^id(id key) {
        self.mas_key = key;
        int i = 0;
        for (MASConstraint *constraint in self.childConstraints) {
            constraint.key([NSString stringWithFormat:@"%@[%d]", key, i++]);
        }
        return self;
    };
}

#pragma mark - NSLayoutConstraint constant setters

- (void)setInsets:(MASEdgeInsets)insets {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.insets = insets;
    }
}

- (void)setInset:(CGFloat)inset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.inset = inset;
    }
}

- (void)setOffset:(CGFloat)offset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.offset = offset;
    }
}

- (void)setSizeOffset:(CGSize)sizeOffset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.sizeOffset = sizeOffset;
    }
}

- (void)setCenterOffset:(CGPoint)centerOffset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.centerOffset = centerOffset;
    }
}

#pragma mark - MASConstraint

- (void)activate {
    for (MASConstraint *constraint in self.childConstraints) {
        [constraint activate];
    }
}

- (void)deactivate {
    for (MASConstraint *constraint in self.childConstraints) {
        [constraint deactivate];
    }
}

- (void)install {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.updateExisting = self.updateExisting;
        [constraint install];
    }
}

- (void)uninstall {
    for (MASConstraint *constraint in self.childConstraints) {
        [constraint uninstall];
    }
}

@end


================================================
FILE: Masonry/MASConstraint+Private.h
================================================
//
//  MASConstraint+Private.h
//  Masonry
//
//  Created by Nick Tymchenko on 29/04/14.
//  Copyright (c) 2014 cloudling. All rights reserved.
//

#import "MASConstraint.h"

@protocol MASConstraintDelegate;


@interface MASConstraint ()

/**
 *  Whether or not to check for an existing constraint instead of adding constraint
 */
@property (nonatomic, assign) BOOL updateExisting;

/**
 *	Usually MASConstraintMaker but could be a parent MASConstraint
 */
@property (nonatomic, weak) id<MASConstraintDelegate> delegate;

/**
 *  Based on a provided value type, is equal to calling:
 *  NSNumber - setOffset:
 *  NSValue with CGPoint - setPointOffset:
 *  NSValue with CGSize - setSizeOffset:
 *  NSValue with MASEdgeInsets - setInsets:
 */
- (void)setLayoutConstantWithValue:(NSValue *)value;

@end


@interface MASConstraint (Abstract)

/**
 *	Sets the constraint relation to given NSLayoutRelation
 *  returns a block which accepts one of the following:
 *    MASViewAttribute, UIView, NSValue, NSArray
 *  see readme for more details.
 */
- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation;

/**
 *	Override to set a custom chaining behaviour
 */
- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute;

@end


@protocol MASConstraintDelegate <NSObject>

/**
 *	Notifies the delegate when the constraint needs to be replaced with another constraint. For example
 *  A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks
 */
- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint;

- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute;

@end


================================================
FILE: Masonry/MASConstraint.h
================================================
//
//  MASConstraint.h
//  Masonry
//
//  Created by Jonas Budelmann on 22/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASUtilities.h"

/**
 *	Enables Constraints to be created with chainable syntax
 *  Constraint can represent single NSLayoutConstraint (MASViewConstraint) 
 *  or a group of NSLayoutConstraints (MASComposisteConstraint)
 */
@interface MASConstraint : NSObject

// Chaining Support

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (MASConstraint * (^)(MASEdgeInsets insets))insets;

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (MASConstraint * (^)(CGFloat inset))inset;

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
 */
- (MASConstraint * (^)(CGSize offset))sizeOffset;

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeCenterX, NSLayoutAttributeCenterY
 */
- (MASConstraint * (^)(CGPoint offset))centerOffset;

/**
 *	Modifies the NSLayoutConstraint constant
 */
- (MASConstraint * (^)(CGFloat offset))offset;

/**
 *  Modifies the NSLayoutConstraint constant based on a value type
 */
- (MASConstraint * (^)(NSValue *value))valueOffset;

/**
 *	Sets the NSLayoutConstraint multiplier property
 */
- (MASConstraint * (^)(CGFloat multiplier))multipliedBy;

/**
 *	Sets the NSLayoutConstraint multiplier to 1.0/dividedBy
 */
- (MASConstraint * (^)(CGFloat divider))dividedBy;

/**
 *	Sets the NSLayoutConstraint priority to a float or MASLayoutPriority
 */
- (MASConstraint * (^)(MASLayoutPriority priority))priority;

/**
 *	Sets the NSLayoutConstraint priority to MASLayoutPriorityLow
 */
- (MASConstraint * (^)(void))priorityLow;

/**
 *	Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
 */
- (MASConstraint * (^)(void))priorityMedium;

/**
 *	Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
 */
- (MASConstraint * (^)(void))priorityHigh;

/**
 *	Sets the constraint relation to NSLayoutRelationEqual
 *  returns a block which accepts one of the following:
 *    MASViewAttribute, UIView, NSValue, NSArray
 *  see readme for more details.
 */
- (MASConstraint * (^)(id attr))equalTo;

/**
 *	Sets the constraint relation to NSLayoutRelationGreaterThanOrEqual
 *  returns a block which accepts one of the following:
 *    MASViewAttribute, UIView, NSValue, NSArray
 *  see readme for more details.
 */
- (MASConstraint * (^)(id attr))greaterThanOrEqualTo;

/**
 *	Sets the constraint relation to NSLayoutRelationLessThanOrEqual
 *  returns a block which accepts one of the following:
 *    MASViewAttribute, UIView, NSValue, NSArray
 *  see readme for more details.
 */
- (MASConstraint * (^)(id attr))lessThanOrEqualTo;

/**
 *	Optional semantic property which has no effect but improves the readability of constraint
 */
- (MASConstraint *)with;

/**
 *	Optional semantic property which has no effect but improves the readability of constraint
 */
- (MASConstraint *)and;

/**
 *	Creates a new MASCompositeConstraint with the called attribute and reciever
 */
- (MASConstraint *)left;
- (MASConstraint *)top;
- (MASConstraint *)right;
- (MASConstraint *)bottom;
- (MASConstraint *)leading;
- (MASConstraint *)trailing;
- (MASConstraint *)width;
- (MASConstraint *)height;
- (MASConstraint *)centerX;
- (MASConstraint *)centerY;
- (MASConstraint *)baseline;

- (MASConstraint *)firstBaseline;
- (MASConstraint *)lastBaseline;

#if TARGET_OS_IPHONE || TARGET_OS_TV

- (MASConstraint *)leftMargin;
- (MASConstraint *)rightMargin;
- (MASConstraint *)topMargin;
- (MASConstraint *)bottomMargin;
- (MASConstraint *)leadingMargin;
- (MASConstraint *)trailingMargin;
- (MASConstraint *)centerXWithinMargins;
- (MASConstraint *)centerYWithinMargins;

#endif


/**
 *	Sets the constraint debug name
 */
- (MASConstraint * (^)(id key))key;

// NSLayoutConstraint constant Setters
// for use outside of mas_updateConstraints/mas_makeConstraints blocks

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (void)setInsets:(MASEdgeInsets)insets;

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (void)setInset:(CGFloat)inset;

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
 */
- (void)setSizeOffset:(CGSize)sizeOffset;

/**
 *	Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeCenterX, NSLayoutAttributeCenterY
 */
- (void)setCenterOffset:(CGPoint)centerOffset;

/**
 *	Modifies the NSLayoutConstraint constant
 */
- (void)setOffset:(CGFloat)offset;


// NSLayoutConstraint Installation support

#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
/**
 *  Whether or not to go through the animator proxy when modifying the constraint
 */
@property (nonatomic, copy, readonly) MASConstraint *animator;
#endif

/**
 *  Activates an NSLayoutConstraint if it's supported by an OS. 
 *  Invokes install otherwise.
 */
- (void)activate;

/**
 *  Deactivates previously installed/activated NSLayoutConstraint.
 */
- (void)deactivate;

/**
 *	Creates a NSLayoutConstraint and adds it to the appropriate view.
 */
- (void)install;

/**
 *	Removes previously installed NSLayoutConstraint
 */
- (void)uninstall;

@end


/**
 *  Convenience auto-boxing macros for MASConstraint methods.
 *
 *  Defining MAS_SHORTHAND_GLOBALS will turn on auto-boxing for default syntax.
 *  A potential drawback of this is that the unprefixed macros will appear in global scope.
 */
#define mas_equalTo(...)                 equalTo(MASBoxValue((__VA_ARGS__)))
#define mas_greaterThanOrEqualTo(...)    greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_lessThanOrEqualTo(...)       lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))

#define mas_offset(...)                  valueOffset(MASBoxValue((__VA_ARGS__)))


#ifdef MAS_SHORTHAND_GLOBALS

#define equalTo(...)                     mas_equalTo(__VA_ARGS__)
#define greaterThanOrEqualTo(...)        mas_greaterThanOrEqualTo(__VA_ARGS__)
#define lessThanOrEqualTo(...)           mas_lessThanOrEqualTo(__VA_ARGS__)

#define offset(...)                      mas_offset(__VA_ARGS__)

#endif


@interface MASConstraint (AutoboxingSupport)

/**
 *  Aliases to corresponding relation methods (for shorthand macros)
 *  Also needed to aid autocompletion
 */
- (MASConstraint * (^)(id attr))mas_equalTo;
- (MASConstraint * (^)(id attr))mas_greaterThanOrEqualTo;
- (MASConstraint * (^)(id attr))mas_lessThanOrEqualTo;

/**
 *  A dummy method to aid autocompletion
 */
- (MASConstraint * (^)(id offset))mas_offset;

@end


================================================
FILE: Masonry/MASConstraint.m
================================================
//
//  MASConstraint.m
//  Masonry
//
//  Created by Nick Tymchenko on 1/20/14.
//

#import "MASConstraint.h"
#import "MASConstraint+Private.h"

#define MASMethodNotImplemented() \
    @throw [NSException exceptionWithName:NSInternalInconsistencyException \
                                   reason:[NSString stringWithFormat:@"You must override %@ in a subclass.", NSStringFromSelector(_cmd)] \
                                 userInfo:nil]

@implementation MASConstraint

#pragma mark - Init

- (id)init {
	NSAssert(![self isMemberOfClass:[MASConstraint class]], @"MASConstraint is an abstract class, you should not instantiate it directly.");
	return [super init];
}

#pragma mark - NSLayoutRelation proxies

- (MASConstraint * (^)(id))equalTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
    };
}

- (MASConstraint * (^)(id))mas_equalTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
    };
}

- (MASConstraint * (^)(id))greaterThanOrEqualTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual);
    };
}

- (MASConstraint * (^)(id))mas_greaterThanOrEqualTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual);
    };
}

- (MASConstraint * (^)(id))lessThanOrEqualTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual);
    };
}

- (MASConstraint * (^)(id))mas_lessThanOrEqualTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual);
    };
}

#pragma mark - MASLayoutPriority proxies

- (MASConstraint * (^)(void))priorityLow {
    return ^id{
        self.priority(MASLayoutPriorityDefaultLow);
        return self;
    };
}

- (MASConstraint * (^)(void))priorityMedium {
    return ^id{
        self.priority(MASLayoutPriorityDefaultMedium);
        return self;
    };
}

- (MASConstraint * (^)(void))priorityHigh {
    return ^id{
        self.priority(MASLayoutPriorityDefaultHigh);
        return self;
    };
}

#pragma mark - NSLayoutConstraint constant proxies

- (MASConstraint * (^)(MASEdgeInsets))insets {
    return ^id(MASEdgeInsets insets){
        self.insets = insets;
        return self;
    };
}

- (MASConstraint * (^)(CGFloat))inset {
    return ^id(CGFloat inset){
        self.inset = inset;
        return self;
    };
}

- (MASConstraint * (^)(CGSize))sizeOffset {
    return ^id(CGSize offset) {
        self.sizeOffset = offset;
        return self;
    };
}

- (MASConstraint * (^)(CGPoint))centerOffset {
    return ^id(CGPoint offset) {
        self.centerOffset = offset;
        return self;
    };
}

- (MASConstraint * (^)(CGFloat))offset {
    return ^id(CGFloat offset){
        self.offset = offset;
        return self;
    };
}

- (MASConstraint * (^)(NSValue *value))valueOffset {
    return ^id(NSValue *offset) {
        NSAssert([offset isKindOfClass:NSValue.class], @"expected an NSValue offset, got: %@", offset);
        [self setLayoutConstantWithValue:offset];
        return self;
    };
}

- (MASConstraint * (^)(id offset))mas_offset {
    // Will never be called due to macro
    return nil;
}

#pragma mark - NSLayoutConstraint constant setter

- (void)setLayoutConstantWithValue:(NSValue *)value {
    if ([value isKindOfClass:NSNumber.class]) {
        self.offset = [(NSNumber *)value doubleValue];
    } else if (strcmp(value.objCType, @encode(CGPoint)) == 0) {
        CGPoint point;
        [value getValue:&point];
        self.centerOffset = point;
    } else if (strcmp(value.objCType, @encode(CGSize)) == 0) {
        CGSize size;
        [value getValue:&size];
        self.sizeOffset = size;
    } else if (strcmp(value.objCType, @encode(MASEdgeInsets)) == 0) {
        MASEdgeInsets insets;
        [value getValue:&insets];
        self.insets = insets;
    } else {
        NSAssert(NO, @"attempting to set layout constant with unsupported value: %@", value);
    }
}

#pragma mark - Semantic properties

- (MASConstraint *)with {
    return self;
}

- (MASConstraint *)and {
    return self;
}

#pragma mark - Chaining

- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute __unused)layoutAttribute {
    MASMethodNotImplemented();
}

- (MASConstraint *)left {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft];
}

- (MASConstraint *)top {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop];
}

- (MASConstraint *)right {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight];
}

- (MASConstraint *)bottom {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom];
}

- (MASConstraint *)leading {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading];
}

- (MASConstraint *)trailing {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing];
}

- (MASConstraint *)width {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth];
}

- (MASConstraint *)height {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight];
}

- (MASConstraint *)centerX {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX];
}

- (MASConstraint *)centerY {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY];
}

- (MASConstraint *)baseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
}

- (MASConstraint *)firstBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASConstraint *)lastBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
}

#if TARGET_OS_IPHONE || TARGET_OS_TV

- (MASConstraint *)leftMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
}

- (MASConstraint *)rightMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin];
}

- (MASConstraint *)topMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin];
}

- (MASConstraint *)bottomMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin];
}

- (MASConstraint *)leadingMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin];
}

- (MASConstraint *)trailingMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin];
}

- (MASConstraint *)centerXWithinMargins {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins];
}

- (MASConstraint *)centerYWithinMargins {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins];
}

#endif

#pragma mark - Abstract

- (MASConstraint * (^)(CGFloat multiplier))multipliedBy { MASMethodNotImplemented(); }

- (MASConstraint * (^)(CGFloat divider))dividedBy { MASMethodNotImplemented(); }

- (MASConstraint * (^)(MASLayoutPriority priority))priority { MASMethodNotImplemented(); }

- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { MASMethodNotImplemented(); }

- (MASConstraint * (^)(id key))key { MASMethodNotImplemented(); }

- (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); }

- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); }

- (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); }

- (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); }

- (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); }

#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)

- (MASConstraint *)animator { MASMethodNotImplemented(); }

#endif

- (void)activate { MASMethodNotImplemented(); }

- (void)deactivate { MASMethodNotImplemented(); }

- (void)install { MASMethodNotImplemented(); }

- (void)uninstall { MASMethodNotImplemented(); }

@end


================================================
FILE: Masonry/MASConstraintMaker.h
================================================
//
//  MASConstraintMaker.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASConstraint.h"
#import "MASUtilities.h"

typedef NS_OPTIONS(NSInteger, MASAttribute) {
    MASAttributeLeft = 1 << NSLayoutAttributeLeft,
    MASAttributeRight = 1 << NSLayoutAttributeRight,
    MASAttributeTop = 1 << NSLayoutAttributeTop,
    MASAttributeBottom = 1 << NSLayoutAttributeBottom,
    MASAttributeLeading = 1 << NSLayoutAttributeLeading,
    MASAttributeTrailing = 1 << NSLayoutAttributeTrailing,
    MASAttributeWidth = 1 << NSLayoutAttributeWidth,
    MASAttributeHeight = 1 << NSLayoutAttributeHeight,
    MASAttributeCenterX = 1 << NSLayoutAttributeCenterX,
    MASAttributeCenterY = 1 << NSLayoutAttributeCenterY,
    MASAttributeBaseline = 1 << NSLayoutAttributeBaseline,

    MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
    MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline,
    
#if TARGET_OS_IPHONE || TARGET_OS_TV
    
    MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin,
    MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin,
    MASAttributeTopMargin = 1 << NSLayoutAttributeTopMargin,
    MASAttributeBottomMargin = 1 << NSLayoutAttributeBottomMargin,
    MASAttributeLeadingMargin = 1 << NSLayoutAttributeLeadingMargin,
    MASAttributeTrailingMargin = 1 << NSLayoutAttributeTrailingMargin,
    MASAttributeCenterXWithinMargins = 1 << NSLayoutAttributeCenterXWithinMargins,
    MASAttributeCenterYWithinMargins = 1 << NSLayoutAttributeCenterYWithinMargins,

#endif
    
};

/**
 *  Provides factory methods for creating MASConstraints.
 *  Constraints are collected until they are ready to be installed
 *
 */
@interface MASConstraintMaker : NSObject

/**
 *	The following properties return a new MASViewConstraint
 *  with the first item set to the makers associated view and the appropriate MASViewAttribute
 */
@property (nonatomic, strong, readonly) MASConstraint *left;
@property (nonatomic, strong, readonly) MASConstraint *top;
@property (nonatomic, strong, readonly) MASConstraint *right;
@property (nonatomic, strong, readonly) MASConstraint *bottom;
@property (nonatomic, strong, readonly) MASConstraint *leading;
@property (nonatomic, strong, readonly) MASConstraint *trailing;
@property (nonatomic, strong, readonly) MASConstraint *width;
@property (nonatomic, strong, readonly) MASConstraint *height;
@property (nonatomic, strong, readonly) MASConstraint *centerX;
@property (nonatomic, strong, readonly) MASConstraint *centerY;
@property (nonatomic, strong, readonly) MASConstraint *baseline;

@property (nonatomic, strong, readonly) MASConstraint *firstBaseline;
@property (nonatomic, strong, readonly) MASConstraint *lastBaseline;

#if TARGET_OS_IPHONE || TARGET_OS_TV

@property (nonatomic, strong, readonly) MASConstraint *leftMargin;
@property (nonatomic, strong, readonly) MASConstraint *rightMargin;
@property (nonatomic, strong, readonly) MASConstraint *topMargin;
@property (nonatomic, strong, readonly) MASConstraint *bottomMargin;
@property (nonatomic, strong, readonly) MASConstraint *leadingMargin;
@property (nonatomic, strong, readonly) MASConstraint *trailingMargin;
@property (nonatomic, strong, readonly) MASConstraint *centerXWithinMargins;
@property (nonatomic, strong, readonly) MASConstraint *centerYWithinMargins;

#endif

/**
 *  Returns a block which creates a new MASCompositeConstraint with the first item set
 *  to the makers associated view and children corresponding to the set bits in the
 *  MASAttribute parameter. Combine multiple attributes via binary-or.
 */
@property (nonatomic, strong, readonly) MASConstraint *(^attributes)(MASAttribute attrs);

/**
 *	Creates a MASCompositeConstraint with type MASCompositeConstraintTypeEdges
 *  which generates the appropriate MASViewConstraint children (top, left, bottom, right)
 *  with the first item set to the makers associated view
 */
@property (nonatomic, strong, readonly) MASConstraint *edges;

/**
 *	Creates a MASCompositeConstraint with type MASCompositeConstraintTypeSize
 *  which generates the appropriate MASViewConstraint children (width, height)
 *  with the first item set to the makers associated view
 */
@property (nonatomic, strong, readonly) MASConstraint *size;

/**
 *	Creates a MASCompositeConstraint with type MASCompositeConstraintTypeCenter
 *  which generates the appropriate MASViewConstraint children (centerX, centerY)
 *  with the first item set to the makers associated view
 */
@property (nonatomic, strong, readonly) MASConstraint *center;

/**
 *  Whether or not to check for an existing constraint instead of adding constraint
 */
@property (nonatomic, assign) BOOL updateExisting;

/**
 *  Whether or not to remove existing constraints prior to installing
 */
@property (nonatomic, assign) BOOL removeExisting;

/**
 *	initialises the maker with a default view
 *
 *	@param	view	any MASConstraint are created with this view as the first item
 *
 *	@return	a new MASConstraintMaker
 */
- (id)initWithView:(MAS_VIEW *)view;

/**
 *	Calls install method on any MASConstraints which have been created by this maker
 *
 *	@return	an array of all the installed MASConstraints
 */
- (NSArray *)install;

- (MASConstraint * (^)(dispatch_block_t))group;

@end


================================================
FILE: Masonry/MASConstraintMaker.m
================================================
//
//  MASConstraintMaker.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASConstraintMaker.h"
#import "MASViewConstraint.h"
#import "MASCompositeConstraint.h"
#import "MASConstraint+Private.h"
#import "MASViewAttribute.h"
#import "View+MASAdditions.h"

@interface MASConstraintMaker () <MASConstraintDelegate>

@property (nonatomic, weak) MAS_VIEW *view;
@property (nonatomic, strong) NSMutableArray *constraints;

@end

@implementation MASConstraintMaker

- (id)initWithView:(MAS_VIEW *)view {
    self = [super init];
    if (!self) return nil;
    
    self.view = view;
    self.constraints = NSMutableArray.new;
    
    return self;
}

- (NSArray *)install {
    if (self.removeExisting) {
        NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view];
        for (MASConstraint *constraint in installedConstraints) {
            [constraint uninstall];
        }
    }
    NSArray *constraints = self.constraints.copy;
    for (MASConstraint *constraint in constraints) {
        constraint.updateExisting = self.updateExisting;
        [constraint install];
    }
    [self.constraints removeAllObjects];
    return constraints;
}

#pragma mark - MASConstraintDelegate

- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint {
    NSUInteger index = [self.constraints indexOfObject:constraint];
    NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint);
    [self.constraints replaceObjectAtIndex:index withObject:replacementConstraint];
}

- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    MASViewAttribute *viewAttribute = [[MASViewAttribute alloc] initWithView:self.view layoutAttribute:layoutAttribute];
    MASViewConstraint *newConstraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:viewAttribute];
    if ([constraint isKindOfClass:MASViewConstraint.class]) {
        //replace with composite constraint
        NSArray *children = @[constraint, newConstraint];
        MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children];
        compositeConstraint.delegate = self;
        [self constraint:constraint shouldBeReplacedWithConstraint:compositeConstraint];
        return compositeConstraint;
    }
    if (!constraint) {
        newConstraint.delegate = self;
        [self.constraints addObject:newConstraint];
    }
    return newConstraint;
}

- (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs {
    __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading
                                          | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX
                                          | MASAttributeCenterY | MASAttributeBaseline
                                          | MASAttributeFirstBaseline | MASAttributeLastBaseline
#if TARGET_OS_IPHONE || TARGET_OS_TV
                                          | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin
                                          | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins
                                          | MASAttributeCenterYWithinMargins
#endif
                                          );
    
    NSAssert((attrs & anyAttribute) != 0, @"You didn't pass any attribute to make.attributes(...)");
    
    NSMutableArray *attributes = [NSMutableArray array];
    
    if (attrs & MASAttributeLeft) [attributes addObject:self.view.mas_left];
    if (attrs & MASAttributeRight) [attributes addObject:self.view.mas_right];
    if (attrs & MASAttributeTop) [attributes addObject:self.view.mas_top];
    if (attrs & MASAttributeBottom) [attributes addObject:self.view.mas_bottom];
    if (attrs & MASAttributeLeading) [attributes addObject:self.view.mas_leading];
    if (attrs & MASAttributeTrailing) [attributes addObject:self.view.mas_trailing];
    if (attrs & MASAttributeWidth) [attributes addObject:self.view.mas_width];
    if (attrs & MASAttributeHeight) [attributes addObject:self.view.mas_height];
    if (attrs & MASAttributeCenterX) [attributes addObject:self.view.mas_centerX];
    if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY];
    if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline];
    if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline];
    if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline];
    
#if TARGET_OS_IPHONE || TARGET_OS_TV
    
    if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin];
    if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin];
    if (attrs & MASAttributeTopMargin) [attributes addObject:self.view.mas_topMargin];
    if (attrs & MASAttributeBottomMargin) [attributes addObject:self.view.mas_bottomMargin];
    if (attrs & MASAttributeLeadingMargin) [attributes addObject:self.view.mas_leadingMargin];
    if (attrs & MASAttributeTrailingMargin) [attributes addObject:self.view.mas_trailingMargin];
    if (attrs & MASAttributeCenterXWithinMargins) [attributes addObject:self.view.mas_centerXWithinMargins];
    if (attrs & MASAttributeCenterYWithinMargins) [attributes addObject:self.view.mas_centerYWithinMargins];
    
#endif
    
    NSMutableArray *children = [NSMutableArray arrayWithCapacity:attributes.count];
    
    for (MASViewAttribute *a in attributes) {
        [children addObject:[[MASViewConstraint alloc] initWithFirstViewAttribute:a]];
    }
    
    MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children];
    constraint.delegate = self;
    [self.constraints addObject:constraint];
    return constraint;
}

#pragma mark - standard Attributes

- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute];
}

- (MASConstraint *)left {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft];
}

- (MASConstraint *)top {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop];
}

- (MASConstraint *)right {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight];
}

- (MASConstraint *)bottom {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom];
}

- (MASConstraint *)leading {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading];
}

- (MASConstraint *)trailing {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing];
}

- (MASConstraint *)width {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth];
}

- (MASConstraint *)height {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight];
}

- (MASConstraint *)centerX {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX];
}

- (MASConstraint *)centerY {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY];
}

- (MASConstraint *)baseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
}

- (MASConstraint *(^)(MASAttribute))attributes {
    return ^(MASAttribute attrs){
        return [self addConstraintWithAttributes:attrs];
    };
}

- (MASConstraint *)firstBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
}

- (MASConstraint *)lastBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
}

#if TARGET_OS_IPHONE || TARGET_OS_TV

- (MASConstraint *)leftMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
}

- (MASConstraint *)rightMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin];
}

- (MASConstraint *)topMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin];
}

- (MASConstraint *)bottomMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin];
}

- (MASConstraint *)leadingMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin];
}

- (MASConstraint *)trailingMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin];
}

- (MASConstraint *)centerXWithinMargins {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins];
}

- (MASConstraint *)centerYWithinMargins {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins];
}

#endif


#pragma mark - composite Attributes

- (MASConstraint *)edges {
    return [self addConstraintWithAttributes:MASAttributeTop | MASAttributeLeft | MASAttributeRight | MASAttributeBottom];
}

- (MASConstraint *)size {
    return [self addConstraintWithAttributes:MASAttributeWidth | MASAttributeHeight];
}

- (MASConstraint *)center {
    return [self addConstraintWithAttributes:MASAttributeCenterX | MASAttributeCenterY];
}

#pragma mark - grouping

- (MASConstraint *(^)(dispatch_block_t group))group {
    return ^id(dispatch_block_t group) {
        NSInteger previousCount = self.constraints.count;
        group();

        NSArray *children = [self.constraints subarrayWithRange:NSMakeRange(previousCount, self.constraints.count - previousCount)];
        MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children];
        constraint.delegate = self;
        return constraint;
    };
}

@end


================================================
FILE: Masonry/MASLayoutConstraint.h
================================================
//
//  MASLayoutConstraint.h
//  Masonry
//
//  Created by Jonas Budelmann on 3/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASUtilities.h"

/**
 *	When you are debugging or printing the constraints attached to a view this subclass
 *  makes it easier to identify which constraints have been created via Masonry
 */
@interface MASLayoutConstraint : NSLayoutConstraint

/**
 *	a key to associate with this constraint
 */
@property (nonatomic, strong) id mas_key;

@end


================================================
FILE: Masonry/MASLayoutConstraint.m
================================================
//
//  MASLayoutConstraint.m
//  Masonry
//
//  Created by Jonas Budelmann on 3/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASLayoutConstraint.h"

@implementation MASLayoutConstraint

@end


================================================
FILE: Masonry/MASUtilities.h
================================================
//
//  MASUtilities.h
//  Masonry
//
//  Created by Jonas Budelmann on 19/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import <Foundation/Foundation.h>



#if TARGET_OS_IPHONE || TARGET_OS_TV

    #import <UIKit/UIKit.h>
    #define MAS_VIEW UIView
    #define MAS_VIEW_CONTROLLER UIViewController
    #define MASEdgeInsets UIEdgeInsets

    typedef UILayoutPriority MASLayoutPriority;
    static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired;
    static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh;
    static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 500;
    static const MASLayoutPriority MASLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow;
    static const MASLayoutPriority MASLayoutPriorityFittingSizeLevel = UILayoutPriorityFittingSizeLevel;

#elif TARGET_OS_MAC

    #import <AppKit/AppKit.h>
    #define MAS_VIEW NSView
    #define MASEdgeInsets NSEdgeInsets

    typedef NSLayoutPriority MASLayoutPriority;
    static const MASLayoutPriority MASLayoutPriorityRequired = NSLayoutPriorityRequired;
    static const MASLayoutPriority MASLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh;
    static const MASLayoutPriority MASLayoutPriorityDragThatCanResizeWindow = NSLayoutPriorityDragThatCanResizeWindow;
    static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 501;
    static const MASLayoutPriority MASLayoutPriorityWindowSizeStayPut = NSLayoutPriorityWindowSizeStayPut;
    static const MASLayoutPriority MASLayoutPriorityDragThatCannotResizeWindow = NSLayoutPriorityDragThatCannotResizeWindow;
    static const MASLayoutPriority MASLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow;
    static const MASLayoutPriority MASLayoutPriorityFittingSizeCompression = NSLayoutPriorityFittingSizeCompression;

#endif

/**
 *	Allows you to attach keys to objects matching the variable names passed.
 *
 *  view1.mas_key = @"view1", view2.mas_key = @"view2";
 *
 *  is equivalent to:
 *
 *  MASAttachKeys(view1, view2);
 */
#define MASAttachKeys(...)                                                        \
    {                                                                             \
        NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
        for (id key in keyPairs.allKeys) {                                        \
            id obj = keyPairs[key];                                               \
            NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
                     @"Cannot attach mas_key to %@", obj);                        \
            [obj setMas_key:key];                                                 \
        }                                                                         \
    }

/**
 *  Used to create object hashes
 *  Based on http://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html
 */
#define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger))
#define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch)))

/**
 *  Given a scalar or struct value, wraps it in NSValue
 *  Based on EXPObjectify: https://github.com/specta/expecta
 */
static inline id _MASBoxValue(const char *type, ...) {
    va_list v;
    va_start(v, type);
    id obj = nil;
    if (strcmp(type, @encode(id)) == 0) {
        id actual = va_arg(v, id);
        obj = actual;
    } else if (strcmp(type, @encode(CGPoint)) == 0) {
        CGPoint actual = (CGPoint)va_arg(v, CGPoint);
        obj = [NSValue value:&actual withObjCType:type];
    } else if (strcmp(type, @encode(CGSize)) == 0) {
        CGSize actual = (CGSize)va_arg(v, CGSize);
        obj = [NSValue value:&actual withObjCType:type];
    } else if (strcmp(type, @encode(MASEdgeInsets)) == 0) {
        MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets);
        obj = [NSValue value:&actual withObjCType:type];
    } else if (strcmp(type, @encode(double)) == 0) {
        double actual = (double)va_arg(v, double);
        obj = [NSNumber numberWithDouble:actual];
    } else if (strcmp(type, @encode(float)) == 0) {
        float actual = (float)va_arg(v, double);
        obj = [NSNumber numberWithFloat:actual];
    } else if (strcmp(type, @encode(int)) == 0) {
        int actual = (int)va_arg(v, int);
        obj = [NSNumber numberWithInt:actual];
    } else if (strcmp(type, @encode(long)) == 0) {
        long actual = (long)va_arg(v, long);
        obj = [NSNumber numberWithLong:actual];
    } else if (strcmp(type, @encode(long long)) == 0) {
        long long actual = (long long)va_arg(v, long long);
        obj = [NSNumber numberWithLongLong:actual];
    } else if (strcmp(type, @encode(short)) == 0) {
        short actual = (short)va_arg(v, int);
        obj = [NSNumber numberWithShort:actual];
    } else if (strcmp(type, @encode(char)) == 0) {
        char actual = (char)va_arg(v, int);
        obj = [NSNumber numberWithChar:actual];
    } else if (strcmp(type, @encode(bool)) == 0) {
        bool actual = (bool)va_arg(v, int);
        obj = [NSNumber numberWithBool:actual];
    } else if (strcmp(type, @encode(unsigned char)) == 0) {
        unsigned char actual = (unsigned char)va_arg(v, unsigned int);
        obj = [NSNumber numberWithUnsignedChar:actual];
    } else if (strcmp(type, @encode(unsigned int)) == 0) {
        unsigned int actual = (unsigned int)va_arg(v, unsigned int);
        obj = [NSNumber numberWithUnsignedInt:actual];
    } else if (strcmp(type, @encode(unsigned long)) == 0) {
        unsigned long actual = (unsigned long)va_arg(v, unsigned long);
        obj = [NSNumber numberWithUnsignedLong:actual];
    } else if (strcmp(type, @encode(unsigned long long)) == 0) {
        unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long);
        obj = [NSNumber numberWithUnsignedLongLong:actual];
    } else if (strcmp(type, @encode(unsigned short)) == 0) {
        unsigned short actual = (unsigned short)va_arg(v, unsigned int);
        obj = [NSNumber numberWithUnsignedShort:actual];
    }
    va_end(v);
    return obj;
}

#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value))


================================================
FILE: Masonry/MASViewAttribute.h
================================================
//
//  MASViewAttribute.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASUtilities.h"

/**
 *  An immutable tuple which stores the view and the related NSLayoutAttribute.
 *  Describes part of either the left or right hand side of a constraint equation
 */
@interface MASViewAttribute : NSObject

/**
 *  The view which the reciever relates to. Can be nil if item is not a view.
 */
@property (nonatomic, weak, readonly) MAS_VIEW *view;

/**
 *  The item which the reciever relates to.
 */
@property (nonatomic, weak, readonly) id item;

/**
 *  The attribute which the reciever relates to
 */
@property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute;

/**
 *  Convenience initializer.
 */
- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute;

/**
 *  The designated initializer.
 */
- (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute;

/**
 *	Determine whether the layoutAttribute is a size attribute
 *
 *	@return	YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight
 */
- (BOOL)isSizeAttribute;

@end


================================================
FILE: Masonry/MASViewAttribute.m
================================================
//
//  MASViewAttribute.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASViewAttribute.h"

@implementation MASViewAttribute

- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute {
    self = [self initWithView:view item:view layoutAttribute:layoutAttribute];
    return self;
}

- (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute {
    self = [super init];
    if (!self) return nil;
    
    _view = view;
    _item = item;
    _layoutAttribute = layoutAttribute;
    
    return self;
}

- (BOOL)isSizeAttribute {
    return self.layoutAttribute == NSLayoutAttributeWidth
        || self.layoutAttribute == NSLayoutAttributeHeight;
}

- (BOOL)isEqual:(MASViewAttribute *)viewAttribute {
    if ([viewAttribute isKindOfClass:self.class]) {
        return self.view == viewAttribute.view
            && self.layoutAttribute == viewAttribute.layoutAttribute;
    }
    return [super isEqual:viewAttribute];
}

- (NSUInteger)hash {
    return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute;
}

@end


================================================
FILE: Masonry/MASViewConstraint.h
================================================
//
//  MASViewConstraint.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASViewAttribute.h"
#import "MASConstraint.h"
#import "MASLayoutConstraint.h"
#import "MASUtilities.h"

/**
 *  A single constraint.
 *  Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view
 */
@interface MASViewConstraint : MASConstraint <NSCopying>

/**
 *	First item/view and first attribute of the NSLayoutConstraint
 */
@property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute;

/**
 *	Second item/view and second attribute of the NSLayoutConstraint
 */
@property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute;

/**
 *	initialises the MASViewConstraint with the first part of the equation
 *
 *	@param	firstViewAttribute	view.mas_left, view.mas_width etc.
 *
 *	@return	a new view constraint
 */
- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute;

/**
 *  Returns all MASViewConstraints installed with this view as a first item.
 *
 *  @param  view  A view to retrieve constraints for.
 *
 *  @return An array of MASViewConstraints.
 */
+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view;

@end


================================================
FILE: Masonry/MASViewConstraint.m
================================================
//
//  MASViewConstraint.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASViewConstraint.h"
#import "MASConstraint+Private.h"
#import "MASCompositeConstraint.h"
#import "MASLayoutConstraint.h"
#import "View+MASAdditions.h"
#import <objc/runtime.h>

@interface MAS_VIEW (MASConstraints)

@property (nonatomic, readonly) NSMutableSet *mas_installedConstraints;

@end

@implementation MAS_VIEW (MASConstraints)

static char kInstalledConstraintsKey;

- (NSMutableSet *)mas_installedConstraints {
    NSMutableSet *constraints = objc_getAssociatedObject(self, &kInstalledConstraintsKey);
    if (!constraints) {
        constraints = [NSMutableSet set];
        objc_setAssociatedObject(self, &kInstalledConstraintsKey, constraints, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return constraints;
}

@end


@interface MASViewConstraint ()

@property (nonatomic, strong, readwrite) MASViewAttribute *secondViewAttribute;
@property (nonatomic, weak) MAS_VIEW *installedView;
@property (nonatomic, weak) MASLayoutConstraint *layoutConstraint;
@property (nonatomic, assign) NSLayoutRelation layoutRelation;
@property (nonatomic, assign) MASLayoutPriority layoutPriority;
@property (nonatomic, assign) CGFloat layoutMultiplier;
@property (nonatomic, assign) CGFloat layoutConstant;
@property (nonatomic, assign) BOOL hasLayoutRelation;
@property (nonatomic, strong) id mas_key;
@property (nonatomic, assign) BOOL useAnimator;

@end

@implementation MASViewConstraint

- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute {
    self = [super init];
    if (!self) return nil;
    
    _firstViewAttribute = firstViewAttribute;
    self.layoutPriority = MASLayoutPriorityRequired;
    self.layoutMultiplier = 1;
    
    return self;
}

#pragma mark - NSCoping

- (id)copyWithZone:(NSZone __unused *)zone {
    MASViewConstraint *constraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:self.firstViewAttribute];
    constraint.layoutConstant = self.layoutConstant;
    constraint.layoutRelation = self.layoutRelation;
    constraint.layoutPriority = self.layoutPriority;
    constraint.layoutMultiplier = self.layoutMultiplier;
    constraint.delegate = self.delegate;
    return constraint;
}

#pragma mark - Public

+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view {
    return [view.mas_installedConstraints allObjects];
}

#pragma mark - Private

- (void)setLayoutConstant:(CGFloat)layoutConstant {
    _layoutConstant = layoutConstant;

#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
    if (self.useAnimator) {
        [self.layoutConstraint.animator setConstant:layoutConstant];
    } else {
        self.layoutConstraint.constant = layoutConstant;
    }
#else
    self.layoutConstraint.constant = layoutConstant;
#endif
}

- (void)setLayoutRelation:(NSLayoutRelation)layoutRelation {
    _layoutRelation = layoutRelation;
    self.hasLayoutRelation = YES;
}

- (BOOL)supportsActiveProperty {
    return [self.layoutConstraint respondsToSelector:@selector(isActive)];
}

- (BOOL)isActive {
    BOOL active = YES;
    if ([self supportsActiveProperty]) {
        active = [self.layoutConstraint isActive];
    }

    return active;
}

- (BOOL)hasBeenInstalled {
    return (self.layoutConstraint != nil) && [self isActive];
}

- (void)setSecondViewAttribute:(id)secondViewAttribute {
    if ([secondViewAttribute isKindOfClass:NSValue.class]) {
        [self setLayoutConstantWithValue:secondViewAttribute];
    } else if ([secondViewAttribute isKindOfClass:MAS_VIEW.class]) {
        _secondViewAttribute = [[MASViewAttribute alloc] initWithView:secondViewAttribute layoutAttribute:self.firstViewAttribute.layoutAttribute];
    } else if ([secondViewAttribute isKindOfClass:MASViewAttribute.class]) {
        MASViewAttribute *attr = secondViewAttribute;
        if (attr.layoutAttribute == NSLayoutAttributeNotAnAttribute) {
            _secondViewAttribute = [[MASViewAttribute alloc] initWithView:attr.view item:attr.item layoutAttribute:self.firstViewAttribute.layoutAttribute];;
        } else {
            _secondViewAttribute = secondViewAttribute;
        }
    } else {
        NSAssert(NO, @"attempting to add unsupported attribute: %@", secondViewAttribute);
    }
}

#pragma mark - NSLayoutConstraint multiplier proxies

- (MASConstraint * (^)(CGFloat))multipliedBy {
    return ^id(CGFloat multiplier) {
        NSAssert(!self.hasBeenInstalled,
                 @"Cannot modify constraint multiplier after it has been installed");
        
        self.layoutMultiplier = multiplier;
        return self;
    };
}


- (MASConstraint * (^)(CGFloat))dividedBy {
    return ^id(CGFloat divider) {
        NSAssert(!self.hasBeenInstalled,
                 @"Cannot modify constraint multiplier after it has been installed");

        self.layoutMultiplier = 1.0/divider;
        return self;
    };
}

#pragma mark - MASLayoutPriority proxy

- (MASConstraint * (^)(MASLayoutPriority))priority {
    return ^id(MASLayoutPriority priority) {
        NSAssert(!self.hasBeenInstalled,
                 @"Cannot modify constraint priority after it has been installed");
        
        self.layoutPriority = priority;
        return self;
    };
}

#pragma mark - NSLayoutRelation proxy

- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation {
    return ^id(id attribute, NSLayoutRelation relation) {
        if ([attribute isKindOfClass:NSArray.class]) {
            NSAssert(!self.hasLayoutRelation, @"Redefinition of constraint relation");
            NSMutableArray *children = NSMutableArray.new;
            for (id attr in attribute) {
                MASViewConstraint *viewConstraint = [self copy];
                viewConstraint.layoutRelation = relation;
                viewConstraint.secondViewAttribute = attr;
                [children addObject:viewConstraint];
            }
            MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children];
            compositeConstraint.delegate = self.delegate;
            [self.delegate constraint:self shouldBeReplacedWithConstraint:compositeConstraint];
            return compositeConstraint;
        } else {
            NSAssert(!self.hasLayoutRelation || self.layoutRelation == relation && [attribute isKindOfClass:NSValue.class], @"Redefinition of constraint relation");
            self.layoutRelation = relation;
            self.secondViewAttribute = attribute;
            return self;
        }
    };
}

#pragma mark - Semantic properties

- (MASConstraint *)with {
    return self;
}

- (MASConstraint *)and {
    return self;
}

#pragma mark - attribute chaining

- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
    NSAssert(!self.hasLayoutRelation, @"Attributes should be chained before defining the constraint relation");

    return [self.delegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute];
}

#pragma mark - Animator proxy

#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)

- (MASConstraint *)animator {
    self.useAnimator = YES;
    return self;
}

#endif

#pragma mark - debug helpers

- (MASConstraint * (^)(id))key {
    return ^id(id key) {
        self.mas_key = key;
        return self;
    };
}

#pragma mark - NSLayoutConstraint constant setters

- (void)setInsets:(MASEdgeInsets)insets {
    NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute;
    switch (layoutAttribute) {
        case NSLayoutAttributeLeft:
        case NSLayoutAttributeLeading:
            self.layoutConstant = insets.left;
            break;
        case NSLayoutAttributeTop:
            self.layoutConstant = insets.top;
            break;
        case NSLayoutAttributeBottom:
            self.layoutConstant = -insets.bottom;
            break;
        case NSLayoutAttributeRight:
        case NSLayoutAttributeTrailing:
            self.layoutConstant = -insets.right;
            break;
        default:
            break;
    }
}

- (void)setInset:(CGFloat)inset {
    [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}];
}

- (void)setOffset:(CGFloat)offset {
    self.layoutConstant = offset;
}

- (void)setSizeOffset:(CGSize)sizeOffset {
    NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute;
    switch (layoutAttribute) {
        case NSLayoutAttributeWidth:
            self.layoutConstant = sizeOffset.width;
            break;
        case NSLayoutAttributeHeight:
            self.layoutConstant = sizeOffset.height;
            break;
        default:
            break;
    }
}

- (void)setCenterOffset:(CGPoint)centerOffset {
    NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute;
    switch (layoutAttribute) {
        case NSLayoutAttributeCenterX:
            self.layoutConstant = centerOffset.x;
            break;
        case NSLayoutAttributeCenterY:
            self.layoutConstant = centerOffset.y;
            break;
        default:
            break;
    }
}

#pragma mark - MASConstraint

- (void)activate {
    [self install];
}

- (void)deactivate {
    [self uninstall];
}

- (void)install {
    if (self.hasBeenInstalled) {
        return;
    }
    
    if ([self supportsActiveProperty] && self.layoutConstraint) {
        self.layoutConstraint.active = YES;
        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
        return;
    }
    
    MAS_VIEW *firstLayoutItem = self.firstViewAttribute.item;
    NSLayoutAttribute firstLayoutAttribute = self.firstViewAttribute.layoutAttribute;
    MAS_VIEW *secondLayoutItem = self.secondViewAttribute.item;
    NSLayoutAttribute secondLayoutAttribute = self.secondViewAttribute.layoutAttribute;

    // alignment attributes must have a secondViewAttribute
    // therefore we assume that is refering to superview
    // eg make.left.equalTo(@10)
    if (!self.firstViewAttribute.isSizeAttribute && !self.secondViewAttribute) {
        secondLayoutItem = self.firstViewAttribute.view.superview;
        secondLayoutAttribute = firstLayoutAttribute;
    }
    
    MASLayoutConstraint *layoutConstraint
        = [MASLayoutConstraint constraintWithItem:firstLayoutItem
                                        attribute:firstLayoutAttribute
                                        relatedBy:self.layoutRelation
                                           toItem:secondLayoutItem
                                        attribute:secondLayoutAttribute
                                       multiplier:self.layoutMultiplier
                                         constant:self.layoutConstant];
    
    layoutConstraint.priority = self.layoutPriority;
    layoutConstraint.mas_key = self.mas_key;
    
    if (self.secondViewAttribute.view) {
        MAS_VIEW *closestCommonSuperview = [self.firstViewAttribute.view mas_closestCommonSuperview:self.secondViewAttribute.view];
        NSAssert(closestCommonSuperview,
                 @"couldn't find a common superview for %@ and %@",
                 self.firstViewAttribute.view, self.secondViewAttribute.view);
        self.installedView = closestCommonSuperview;
    } else if (self.firstViewAttribute.isSizeAttribute) {
        self.installedView = self.firstViewAttribute.view;
    } else {
        self.installedView = self.firstViewAttribute.view.superview;
    }


    MASLayoutConstraint *existingConstraint = nil;
    if (self.updateExisting) {
        existingConstraint = [self layoutConstraintSimilarTo:layoutConstraint];
    }
    if (existingConstraint) {
        // just update the constant
        existingConstraint.constant = layoutConstraint.constant;
        self.layoutConstraint = existingConstraint;
    } else {
        [self.installedView addConstraint:layoutConstraint];
        self.layoutConstraint = layoutConstraint;
        [firstLayoutItem.mas_installedConstraints addObject:self];
    }
}

- (MASLayoutConstraint *)layoutConstraintSimilarTo:(MASLayoutConstraint *)layoutConstraint {
    // check if any constraints are the same apart from the only mutable property constant

    // go through constraints in reverse as we do not want to match auto-resizing or interface builder constraints
    // and they are likely to be added first.
    for (NSLayoutConstraint *existingConstraint in self.installedView.constraints.reverseObjectEnumerator) {
        if (![existingConstraint isKindOfClass:MASLayoutConstraint.class]) continue;
        if (existingConstraint.firstItem != layoutConstraint.firstItem) continue;
        if (existingConstraint.secondItem != layoutConstraint.secondItem) continue;
        if (existingConstraint.firstAttribute != layoutConstraint.firstAttribute) continue;
        if (existingConstraint.secondAttribute != layoutConstraint.secondAttribute) continue;
        if (existingConstraint.relation != layoutConstraint.relation) continue;
        if (existingConstraint.multiplier != layoutConstraint.multiplier) continue;
        if (existingConstraint.priority != layoutConstraint.priority) continue;

        return (id)existingConstraint;
    }
    return nil;
}

- (void)uninstall {
    if ([self supportsActiveProperty]) {
        self.layoutConstraint.active = NO;
        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
        return;
    }
    
    [self.installedView removeConstraint:self.layoutConstraint];
    self.layoutConstraint = nil;
    self.installedView = nil;
    
    [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
}

@end


================================================
FILE: Masonry/Masonry.h
================================================
//
//  Masonry.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import <Foundation/Foundation.h>

//! Project version number for Masonry.
FOUNDATION_EXPORT double MasonryVersionNumber;

//! Project version string for Masonry.
FOUNDATION_EXPORT const unsigned char MasonryVersionString[];

#import "MASUtilities.h"
#import "View+MASAdditions.h"
#import "View+MASShorthandAdditions.h"
#import "ViewController+MASAdditions.h"
#import "NSArray+MASAdditions.h"
#import "NSArray+MASShorthandAdditions.h"
#import "MASConstraint.h"
#import "MASCompositeConstraint.h"
#import "MASViewAttribute.h"
#import "MASViewConstraint.h"
#import "MASConstraintMaker.h"
#import "MASLayoutConstraint.h"
#import "NSLayoutConstraint+MASDebugAdditions.h"


================================================
FILE: Masonry/NSArray+MASAdditions.h
================================================
//
//  NSArray+MASAdditions.h
//
//
//  Created by Daniel Hammond on 11/26/13.
//
//

#import "MASUtilities.h"
#import "MASConstraintMaker.h"
#import "MASViewAttribute.h"

typedef NS_ENUM(NSUInteger, MASAxisType) {
    MASAxisTypeHorizontal,
    MASAxisTypeVertical
};

@interface NSArray (MASAdditions)

/**
 *  Creates a MASConstraintMaker with each view in the callee.
 *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view
 *
 *  @param block scope within which you can build up the constraints which you wish to apply to each view.
 *
 *  @return Array of created MASConstraints
 */
- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;

/**
 *  Creates a MASConstraintMaker with each view in the callee.
 *  Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
 *  If an existing constraint exists then it will be updated instead.
 *
 *  @param block scope within which you can build up the constraints which you wish to apply to each view.
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;

/**
 *  Creates a MASConstraintMaker with each view in the callee.
 *  Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
 *  All constraints previously installed for the views will be removed.
 *
 *  @param block scope within which you can build up the constraints which you wish to apply to each view.
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;

/**
 *  distribute with fixed spacing
 *
 *  @param axisType     which axis to distribute items along
 *  @param fixedSpacing the spacing between each item
 *  @param leadSpacing  the spacing before the first item and the container
 *  @param tailSpacing  the spacing after the last item and the container
 */
- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;

/**
 *  distribute with fixed item size
 *
 *  @param axisType        which axis to distribute items along
 *  @param fixedItemLength the fixed length of each item
 *  @param leadSpacing     the spacing before the first item and the container
 *  @param tailSpacing     the spacing after the last item and the container
 */
- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;

@end


================================================
FILE: Masonry/NSArray+MASAdditions.m
================================================
//
//  NSArray+MASAdditions.m
//  
//
//  Created by Daniel Hammond on 11/26/13.
//
//

#import "NSArray+MASAdditions.h"
#import "View+MASAdditions.h"

@implementation NSArray (MASAdditions)

- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block {
    NSMutableArray *constraints = [NSMutableArray array];
    for (MAS_VIEW *view in self) {
        NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views");
        [constraints addObjectsFromArray:[view mas_makeConstraints:block]];
    }
    return constraints;
}

- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block {
    NSMutableArray *constraints = [NSMutableArray array];
    for (MAS_VIEW *view in self) {
        NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views");
        [constraints addObjectsFromArray:[view mas_updateConstraints:block]];
    }
    return constraints;
}

- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block {
    NSMutableArray *constraints = [NSMutableArray array];
    for (MAS_VIEW *view in self) {
        NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views");
        [constraints addObjectsFromArray:[view mas_remakeConstraints:block]];
    }
    return constraints;
}

- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing {
    if (self.count < 2) {
        NSAssert(self.count>1,@"views to distribute need to bigger than one");
        return;
    }
    
    MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews];
    if (axisType == MASAxisTypeHorizontal) {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                if (prev) {
                    make.width.equalTo(prev);
                    make.left.equalTo(prev.mas_right).offset(fixedSpacing);
                    if (i == self.count - 1) {//last one
                        make.right.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                }
                else {//first one
                    make.left.equalTo(tempSuperView).offset(leadSpacing);
                }
                
            }];
            prev = v;
        }
    }
    else {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                if (prev) {
                    make.height.equalTo(prev);
                    make.top.equalTo(prev.mas_bottom).offset(fixedSpacing);
                    if (i == self.count - 1) {//last one
                        make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                    }                    
                }
                else {//first one
                    make.top.equalTo(tempSuperView).offset(leadSpacing);
                }
                
            }];
            prev = v;
        }
    }
}

- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing {
    if (self.count < 2) {
        NSAssert(self.count>1,@"views to distribute need to bigger than one");
        return;
    }
    
    MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews];
    if (axisType == MASAxisTypeHorizontal) {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                make.width.equalTo(@(fixedItemLength));
                if (prev) {
                    if (i == self.count - 1) {//last one
                        make.right.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                    else {
                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                        make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                    }
                }
                else {//first one
                    make.left.equalTo(tempSuperView).offset(leadSpacing);
                }
            }];
            prev = v;
        }
    }
    else {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                make.height.equalTo(@(fixedItemLength));
                if (prev) {
                    if (i == self.count - 1) {//last one
                        make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                    else {
                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                        make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                    }
                }
                else {//first one
                    make.top.equalTo(tempSuperView).offset(leadSpacing);
                }
            }];
            prev = v;
        }
    }
}

- (MAS_VIEW *)mas_commonSuperviewOfViews
{
    MAS_VIEW *commonSuperview = nil;
    MAS_VIEW *previousView = nil;
    for (id object in self) {
        if ([object isKindOfClass:[MAS_VIEW class]]) {
            MAS_VIEW *view = (MAS_VIEW *)object;
            if (previousView) {
                commonSuperview = [view mas_closestCommonSuperview:commonSuperview];
            } else {
                commonSuperview = view;
            }
            previousView = view;
        }
    }
    NSAssert(commonSuperview, @"Can't constrain views that do not share a common superview. Make sure that all the views in this array have been added into the same view hierarchy.");
    return commonSuperview;
}

@end


================================================
FILE: Masonry/NSArray+MASShorthandAdditions.h
================================================
//
//  NSArray+MASShorthandAdditions.h
//  Masonry
//
//  Created by Jonas Budelmann on 22/07/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "NSArray+MASAdditions.h"

#ifdef MAS_SHORTHAND

/**
 *	Shorthand array additions without the 'mas_' prefixes,
 *  only enabled if MAS_SHORTHAND is defined
 */
@interface NSArray (MASShorthandAdditions)

- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block;

@end

@implementation NSArray (MASShorthandAdditions)

- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
    return [self mas_makeConstraints:block];
}

- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
    return [self mas_updateConstraints:block];
}

- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
    return [self mas_remakeConstraints:block];
}

@end

#endif


================================================
FILE: Masonry/NSLayoutConstraint+MASDebugAdditions.h
================================================
//
//  NSLayoutConstraint+MASDebugAdditions.h
//  Masonry
//
//  Created by Jonas Budelmann on 3/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "MASUtilities.h"

/**
 *	makes debug and log output of NSLayoutConstraints more readable
 */
@interface NSLayoutConstraint (MASDebugAdditions)

@end


================================================
FILE: Masonry/NSLayoutConstraint+MASDebugAdditions.m
================================================
//
//  NSLayoutConstraint+MASDebugAdditions.m
//  Masonry
//
//  Created by Jonas Budelmann on 3/08/13.
//  Copyright (c) 2013 Jonas Budelmann. All rights reserved.
//

#import "NSLayoutConstraint+MASDebugAdditions.h"
#import "MASConstraint.h"
#import "MASLayoutConstraint.h"

@implementation NSLayoutConstraint (MASDebugAdditions)

#pragma mark - description maps

+ (NSDictionary *)layoutRelationDescriptionsByValue {
    static dispatch_once_t once;
    static NSDictionary *descriptionMap;
    dispatch_once(&once, ^{
        descriptionMap = @{
            @(NSLayoutRelationEqual)                : @"==",
            @(NSLayoutRelationGreaterThanOrEqual)   : @">=",
            @(NSLayoutRelationLessThanOrEqual)      : @"<=",
        };
    });
    return descriptionMap;
}

+ (NSDictionary *)layoutAttributeDescriptionsByValue {
    static dispatch_once_t once;
    static NSDictionary *descriptionMap;
    dispatch_once(&once, ^{
        descriptionMap = @{
            @(NSLayoutAttributeTop)      : @"top",
            @(NSLayoutAttributeLeft)     : @"left",
            @(NSLayoutAttributeBottom)   : @"bottom",
            @(NSLayoutAttributeRight)    : @"right",
            @(NSLayoutAttributeLeading)  : @"leading",
            @(NSLayoutAttributeTrailing) : @"trailing",
            @(NSLayoutAttributeWidth)    : @"width",
            @(NSLayoutAttributeHeight)   : @"height",
            @(NSLayoutAttributeCenterX)  : @"centerX",
            @(NSLayoutAttributeCenterY)  : @"centerY",
            @(NSLayoutAttributeBaseline) : @"baseline",
            @(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
            @(NSLayoutAttributeLastBaseline) : @"lastBaseline",

#if TARGET_OS_IPHONE || TARGET_OS_TV
            @(NSLayoutAttributeLeftMargin)           : @"leftMargin",
            @(NSLayoutAttributeRightMargin)          : @"rightMargin",
            @(NSLayoutAttributeTopMargin)            : @"topMargin",
            @(NSLayoutAttributeBottomMargin)         : @"bottomMargin",
            @(NSLayoutAttributeLeadingMargin)        : @"leadingMargin",
            @(NSLayoutAttributeTrailingMargin)       : @"trailingMargin",
            @(NSLayoutAttributeCenterXWithinMargins) : @"centerXWithinMargins",
            @(NSLayoutAttributeCenterYWithinMargins) : @"centerYWithinMargins",
#endif
            
        };
    
    });
    return descriptionMap;
}


+ (NSDictionary *)layoutPriorityDescriptionsByValue {
    static dispatch_once_t once;
    static NSDictionary *descriptionMap;
    dispatch_once(&once, ^{
#if TARGET_OS_IPHONE || TARGET_OS_TV
        descriptionMap = @{
            @(MASLayoutPriorityDefaultHigh)      : @"high",
            @(MASLayoutPriorityDefaultLow)       : @"low",
            @(MASLayoutPriorityDefaultMedium)    : @"medium",
            @(MASLayoutPriorityRequired)         : @"required",
            @(MASLayoutPriorityFittingSizeLevel) : @"fitting size",
        };
#elif TARGET_OS_MAC
        descriptionMap = @{
            @(MASLayoutPriorityDefaultHigh)                 : @"high",
            @(MASLayoutPriorityDragThatCanResizeWindow)     : @"drag can resize window",
            @(MASLayoutPriorityDefaultMedium)               : @"medium",
            @(MASLayoutPriorityWindowSizeStayPut)           : @"window size stay put",
            @(MASLayoutPriorityDragThatCannotResizeWindow)  : @"drag cannot resize window",
            @(MASLayoutPriorityDefaultLow)                  : @"low",
            @(MASLayoutPriorityFittingSizeCompression)      : @"fitting size",
            @(MASLayoutPriorityRequired)                    : @"required",
        };
#endif
    });
    return descriptionMap;
}

#pragma mark - description override

+ (NSString *)descriptionForObject:(id)obj {
    if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) {
        return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]];
    }
    return [NSString stringWithFormat:@"%@:%p", [obj class], obj];
}

- (NSString *)description {
    NSMutableString *description = [[NSMutableString alloc] initWithString:@"<"];

    [description appendString:[self.class descriptionForObject:self]];

    [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
    if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
    }

    [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];

    if (self.secondItem) {
        [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
    }
    if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
    }
    
    if (self.multiplier != 1) {
        [description appendFormat:@" * %g", self.multiplier];
    }
    
    if (self.secondAttribute == NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@" %g", self.constant];
    } else {
        if (self.constant) {
            [description appendFormat:@" %@ %g", (self.constant < 0 ? @"-" : @"+"), ABS(self.constant)];
        }
    }

    if (self.priority != MASLayoutPriorityRequired) {
        [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
    }

    [description appendString:@">"];
    return description;
}

@end


================================================
FILE: Masonry/View+MASAdditions.h
================================================
//
//  UIView+MASAdditions.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
//  Copyright (c) 2013 cloudling. All rights reserved.
//

#import "MASUtilities.h"
#import "MASConstraintMaker.h"
#import "MASViewAttribute.h"

/**
 *	Provides constraint maker block
 *  and convience methods for creating MASViewAttribute which are view + NSLayoutAttribute pairs
 */
@interface MAS_VIEW (MASAdditions)

/**
 *	following properties return a new MASViewAttribute with current view and appropriate NSLayoutAttribute
 */
@property (nonatomic, strong, readonly) MASViewAttribute *mas_left;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_top;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_right;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottom;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_leading;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailing;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_width;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_height;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerX;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerY;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;
@property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr);

@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline;

#if TARGET_OS_IPHONE || TARGET_OS_TV

@property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_topMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_leadingMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins;

@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeading NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTrailing NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideWidth NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideHeight NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideCenterX NS_AVAILABLE_IOS(11.0);
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideCenterY NS_AVAILABLE_
Download .txt
gitextract_pa1zs8l1/

├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CodeSnippets/
│   ├── Masonry Constraint Make.codesnippet
│   ├── Masonry Constraint Remake.codesnippet
│   └── Masonry Constraint Update.codesnippet
├── Examples/
│   ├── Masonry iOS Examples/
│   │   ├── Images.xcassets/
│   │   │   └── Contents.json
│   │   ├── Launch Screen.storyboard
│   │   ├── MASAppDelegate.h
│   │   ├── MASAppDelegate.m
│   │   ├── MASExampleAnimatedView.h
│   │   ├── MASExampleAnimatedView.m
│   │   ├── MASExampleArrayView.h
│   │   ├── MASExampleArrayView.m
│   │   ├── MASExampleAspectFitView.h
│   │   ├── MASExampleAspectFitView.m
│   │   ├── MASExampleAttributeChainingView.h
│   │   ├── MASExampleAttributeChainingView.m
│   │   ├── MASExampleBasicView.h
│   │   ├── MASExampleBasicView.m
│   │   ├── MASExampleConstantsView.h
│   │   ├── MASExampleConstantsView.m
│   │   ├── MASExampleDebuggingView.h
│   │   ├── MASExampleDebuggingView.m
│   │   ├── MASExampleDistributeView.h
│   │   ├── MASExampleDistributeView.m
│   │   ├── MASExampleLabelView.h
│   │   ├── MASExampleLabelView.m
│   │   ├── MASExampleLayoutGuideViewController.h
│   │   ├── MASExampleLayoutGuideViewController.m
│   │   ├── MASExampleListViewController.h
│   │   ├── MASExampleListViewController.m
│   │   ├── MASExampleMarginView.h
│   │   ├── MASExampleMarginView.m
│   │   ├── MASExampleRemakeView.h
│   │   ├── MASExampleRemakeView.m
│   │   ├── MASExampleSafeAreaLayoutGuideViewController.h
│   │   ├── MASExampleSafeAreaLayoutGuideViewController.m
│   │   ├── MASExampleScrollView.h
│   │   ├── MASExampleScrollView.m
│   │   ├── MASExampleSidesView.h
│   │   ├── MASExampleSidesView.m
│   │   ├── MASExampleUpdateView.h
│   │   ├── MASExampleUpdateView.m
│   │   ├── MASExampleViewController.h
│   │   ├── MASExampleViewController.m
│   │   ├── Masonry iOS Examples-Info.plist
│   │   ├── Masonry iOS Examples-Prefix.pch
│   │   ├── en.lproj/
│   │   │   └── InfoPlist.strings
│   │   └── main.m
│   └── Masonry iOS Examples.xcodeproj/
│       ├── project.pbxproj
│       ├── project.xcworkspace/
│       │   └── contents.xcworkspacedata
│       └── xcshareddata/
│           └── xcschemes/
│               └── Masonry iOS Examples.xcscheme
├── ISSUE_TEMPLATE.md
├── LICENSE
├── Masonry/
│   ├── Info.plist
│   ├── MASCompositeConstraint.h
│   ├── MASCompositeConstraint.m
│   ├── MASConstraint+Private.h
│   ├── MASConstraint.h
│   ├── MASConstraint.m
│   ├── MASConstraintMaker.h
│   ├── MASConstraintMaker.m
│   ├── MASLayoutConstraint.h
│   ├── MASLayoutConstraint.m
│   ├── MASUtilities.h
│   ├── MASViewAttribute.h
│   ├── MASViewAttribute.m
│   ├── MASViewConstraint.h
│   ├── MASViewConstraint.m
│   ├── Masonry.h
│   ├── NSArray+MASAdditions.h
│   ├── NSArray+MASAdditions.m
│   ├── NSArray+MASShorthandAdditions.h
│   ├── NSLayoutConstraint+MASDebugAdditions.h
│   ├── NSLayoutConstraint+MASDebugAdditions.m
│   ├── View+MASAdditions.h
│   ├── View+MASAdditions.m
│   ├── View+MASShorthandAdditions.h
│   ├── ViewController+MASAdditions.h
│   └── ViewController+MASAdditions.m
├── Masonry.podspec
├── Masonry.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── Masonry.xccheckout
│   └── xcshareddata/
│       └── xcschemes/
│           ├── Masonry OSX.xcscheme
│           └── Masonry iOS.xcscheme
├── Masonry.xcworkspace/
│   └── contents.xcworkspacedata
├── Podfile
├── Pods/
│   ├── Expecta/
│   │   ├── Expecta/
│   │   │   ├── EXPBlockDefinedMatcher.h
│   │   │   ├── EXPBlockDefinedMatcher.m
│   │   │   ├── EXPDefines.h
│   │   │   ├── EXPDoubleTuple.h
│   │   │   ├── EXPDoubleTuple.m
│   │   │   ├── EXPExpect.h
│   │   │   ├── EXPExpect.m
│   │   │   ├── EXPFloatTuple.h
│   │   │   ├── EXPFloatTuple.m
│   │   │   ├── EXPMatcher.h
│   │   │   ├── EXPUnsupportedObject.h
│   │   │   ├── EXPUnsupportedObject.m
│   │   │   ├── Expecta.h
│   │   │   ├── ExpectaObject.h
│   │   │   ├── ExpectaObject.m
│   │   │   ├── ExpectaSupport.h
│   │   │   ├── ExpectaSupport.m
│   │   │   ├── Matchers/
│   │   │   │   ├── EXPMatcherHelpers.h
│   │   │   │   ├── EXPMatcherHelpers.m
│   │   │   │   ├── EXPMatchers+beCloseTo.h
│   │   │   │   ├── EXPMatchers+beCloseTo.m
│   │   │   │   ├── EXPMatchers+beFalsy.h
│   │   │   │   ├── EXPMatchers+beFalsy.m
│   │   │   │   ├── EXPMatchers+beGreaterThan.h
│   │   │   │   ├── EXPMatchers+beGreaterThan.m
│   │   │   │   ├── EXPMatchers+beGreaterThanOrEqualTo.h
│   │   │   │   ├── EXPMatchers+beGreaterThanOrEqualTo.m
│   │   │   │   ├── EXPMatchers+beIdenticalTo.h
│   │   │   │   ├── EXPMatchers+beIdenticalTo.m
│   │   │   │   ├── EXPMatchers+beInTheRangeOf.h
│   │   │   │   ├── EXPMatchers+beInTheRangeOf.m
│   │   │   │   ├── EXPMatchers+beInstanceOf.h
│   │   │   │   ├── EXPMatchers+beInstanceOf.m
│   │   │   │   ├── EXPMatchers+beKindOf.h
│   │   │   │   ├── EXPMatchers+beKindOf.m
│   │   │   │   ├── EXPMatchers+beLessThan.h
│   │   │   │   ├── EXPMatchers+beLessThan.m
│   │   │   │   ├── EXPMatchers+beLessThanOrEqualTo.h
│   │   │   │   ├── EXPMatchers+beLessThanOrEqualTo.m
│   │   │   │   ├── EXPMatchers+beNil.h
│   │   │   │   ├── EXPMatchers+beNil.m
│   │   │   │   ├── EXPMatchers+beSubclassOf.h
│   │   │   │   ├── EXPMatchers+beSubclassOf.m
│   │   │   │   ├── EXPMatchers+beSupersetOf.h
│   │   │   │   ├── EXPMatchers+beSupersetOf.m
│   │   │   │   ├── EXPMatchers+beTruthy.h
│   │   │   │   ├── EXPMatchers+beTruthy.m
│   │   │   │   ├── EXPMatchers+beginWith.h
│   │   │   │   ├── EXPMatchers+beginWith.m
│   │   │   │   ├── EXPMatchers+conformTo.h
│   │   │   │   ├── EXPMatchers+conformTo.m
│   │   │   │   ├── EXPMatchers+contain.h
│   │   │   │   ├── EXPMatchers+contain.m
│   │   │   │   ├── EXPMatchers+endWith.h
│   │   │   │   ├── EXPMatchers+endWith.m
│   │   │   │   ├── EXPMatchers+equal.h
│   │   │   │   ├── EXPMatchers+equal.m
│   │   │   │   ├── EXPMatchers+haveCountOf.h
│   │   │   │   ├── EXPMatchers+haveCountOf.m
│   │   │   │   ├── EXPMatchers+match.h
│   │   │   │   ├── EXPMatchers+match.m
│   │   │   │   ├── EXPMatchers+postNotification.h
│   │   │   │   ├── EXPMatchers+postNotification.m
│   │   │   │   ├── EXPMatchers+raise.h
│   │   │   │   ├── EXPMatchers+raise.m
│   │   │   │   ├── EXPMatchers+raiseWithReason.h
│   │   │   │   ├── EXPMatchers+raiseWithReason.m
│   │   │   │   ├── EXPMatchers+respondTo.h
│   │   │   │   ├── EXPMatchers+respondTo.m
│   │   │   │   └── EXPMatchers.h
│   │   │   ├── NSObject+Expecta.h
│   │   │   ├── NSValue+Expecta.h
│   │   │   └── NSValue+Expecta.m
│   │   ├── LICENSE
│   │   └── README.md
│   ├── Local Podspecs/
│   │   └── Masonry.podspec.json
│   ├── Pods.xcodeproj/
│   │   └── project.pbxproj
│   └── Target Support Files/
│       ├── Expecta/
│       │   ├── Expecta-dummy.m
│       │   ├── Expecta-prefix.pch
│       │   └── Expecta.xcconfig
│       ├── Masonry/
│       │   ├── Masonry-dummy.m
│       │   ├── Masonry-prefix.pch
│       │   └── Masonry.xcconfig
│       ├── Pods-Masonry iOS Examples/
│       │   ├── Pods-Masonry iOS Examples-acknowledgements.markdown
│       │   ├── Pods-Masonry iOS Examples-acknowledgements.plist
│       │   ├── Pods-Masonry iOS Examples-dummy.m
│       │   ├── Pods-Masonry iOS Examples-frameworks.sh
│       │   ├── Pods-Masonry iOS Examples-resources.sh
│       │   ├── Pods-Masonry iOS Examples.debug.xcconfig
│       │   └── Pods-Masonry iOS Examples.release.xcconfig
│       ├── Pods-Masonry iOS Tests/
│       │   ├── Pods-Masonry iOS Tests-acknowledgements.markdown
│       │   ├── Pods-Masonry iOS Tests-acknowledgements.plist
│       │   ├── Pods-Masonry iOS Tests-dummy.m
│       │   ├── Pods-Masonry iOS Tests-frameworks.sh
│       │   ├── Pods-Masonry iOS Tests-resources.sh
│       │   ├── Pods-Masonry iOS Tests.debug.xcconfig
│       │   └── Pods-Masonry iOS Tests.release.xcconfig
│       └── Pods-MasonryTestsLoader/
│           ├── Pods-MasonryTestsLoader-acknowledgements.markdown
│           ├── Pods-MasonryTestsLoader-acknowledgements.plist
│           ├── Pods-MasonryTestsLoader-dummy.m
│           ├── Pods-MasonryTestsLoader-frameworks.sh
│           ├── Pods-MasonryTestsLoader-resources.sh
│           ├── Pods-MasonryTestsLoader.debug.xcconfig
│           └── Pods-MasonryTestsLoader.release.xcconfig
├── README.md
├── Tests/
│   ├── GcovTestObserver.m
│   ├── Masonry Tests.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Masonry iOS Tests.xcscheme
│   ├── MasonryTests-Info.plist
│   ├── MasonryTests-Prefix.pch
│   ├── MasonryTestsLoader/
│   │   ├── CASAppDelegate.h
│   │   ├── CASAppDelegate.m
│   │   ├── Images.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   └── LaunchImage.launchimage/
│   │   │       └── Contents.json
│   │   ├── MasonryTestsLoader-Info.plist
│   │   ├── MasonryTestsLoader-Prefix.pch
│   │   ├── en.lproj/
│   │   │   └── InfoPlist.strings
│   │   └── main.m
│   ├── NSObject+MASSubscriptSupport.h
│   ├── Specs/
│   │   ├── MASCompositeConstraintSpec.m
│   │   ├── MASConstraintDelegateMock.h
│   │   ├── MASConstraintDelegateMock.m
│   │   ├── MASConstraintMakerSpec.m
│   │   ├── MASViewAttributeSpec.m
│   │   ├── MASViewConstraintSpec.m
│   │   ├── NSArray+MASAdditionsSpec.m
│   │   ├── NSLayoutConstraint+MASDebugAdditionsSpec.m
│   │   ├── View+MASAdditionsSpec.m
│   │   └── ViewController+MASAdditionsSpec.m
│   └── XCTest+Spec.h
└── script/
    ├── coveralls.sh
    └── exportenv.sh
Download .txt
SYMBOL INDEX (12 symbols across 9 files)

FILE: Masonry/MASUtilities.h
  type UILayoutPriority (line 20) | typedef UILayoutPriority MASLayoutPriority;
  type NSLayoutPriority (line 33) | typedef NSLayoutPriority MASLayoutPriority;
  function id (line 76) | static inline id _MASBoxValue(const char *type, ...) {

FILE: Masonry/NSArray+MASAdditions.h
  type MASAxisTypeHorizontal (line 13) | typedef NS_ENUM(NSUInteger, MASAxisType) {

FILE: Masonry/View+MASShorthandAdditions.h
  function implementation (line 79) | implementation MAS_VIEW (MASShorthandAdditions)
  function block (line 132) | void(NS_NOESCAPE ^)(MASConstraintMaker *))block {

FILE: Pods/Expecta/Expecta/EXPBlockDefinedMatcher.h
  function interface (line 13) | interface EXPBlockDefinedMatcher : NSObject <EXPMatcher> {

FILE: Pods/Expecta/Expecta/EXPDefines.h
  type NSString (line 15) | typedef NSString *(^EXPStringBlock)();

FILE: Pods/Expecta/Expecta/EXPDoubleTuple.h
  function interface (line 3) | interface EXPDoubleTuple : NSObject {

FILE: Pods/Expecta/Expecta/EXPExpect.h
  function interface (line 5) | interface EXPExpect : NSObject {

FILE: Pods/Expecta/Expecta/EXPFloatTuple.h
  function interface (line 3) | interface EXPFloatTuple : NSObject {

FILE: Pods/Expecta/Expecta/EXPUnsupportedObject.h
  function interface (line 3) | interface EXPUnsupportedObject : NSObject {
Condensed preview — 221 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (638K chars).
[
  {
    "path": ".gitignore",
    "chars": 278,
    "preview": "# Xcode\nbuild/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!defaul"
  },
  {
    "path": ".travis.yml",
    "chars": 851,
    "preview": "---\nlanguage: objective-c\nosx_image: xcode9\nbefore_install:\n  - sudo easy_install cpp-coveralls\n  - gem install xcpretty"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 6293,
    "preview": "v1.0.2\n======\n\n* Bug fix for array greaterThanOrEqualTo or lessthanOrEqualTo attributes ([#377](https://github.com/SnapK"
  },
  {
    "path": "CodeSnippets/Masonry Constraint Make.codesnippet",
    "chars": 850,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "CodeSnippets/Masonry Constraint Remake.codesnippet",
    "chars": 855,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "CodeSnippets/Masonry Constraint Update.codesnippet",
    "chars": 856,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Examples/Masonry iOS Examples/Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Examples/Masonry iOS Examples/Launch Screen.storyboard",
    "chars": 4386,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASAppDelegate.h",
    "chars": 286,
    "preview": "//\n//  MASAppDelegate.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling. All"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASAppDelegate.m",
    "chars": 823,
    "preview": "//\n//  MASAppDelegate.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling. All"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleAnimatedView.h",
    "chars": 243,
    "preview": "//\n//  MASExampleAnimatedView.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 22/07/13.\n//  Copyright (c"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleAnimatedView.m",
    "chars": 3370,
    "preview": "//\n//  MASExampleAnimatedView.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 22/07/13.\n//  Copyright (c"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleArrayView.h",
    "chars": 236,
    "preview": "//\n//  MASExampleArrayView.h\n//  Masonry iOS Examples\n//\n//  Created by Daniel Hammond on 11/26/13.\n//  Copyright (c) 20"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleArrayView.m",
    "chars": 2407,
    "preview": "//\n//  MASExampleArrayView.m\n//  Masonry iOS Examples\n//\n//  Created by Daniel Hammond on 11/26/13.\n//  Copyright (c) 20"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleAspectFitView.h",
    "chars": 250,
    "preview": "//\n//  MASExampleAspectFitView.h\n//  Masonry iOS Examples\n//\n//  Created by Michael Koukoullis on 19/01/2015.\n//  Copyri"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleAspectFitView.m",
    "chars": 3118,
    "preview": "//\n//  MASExampleAspectFitView.m\n//  Masonry iOS Examples\n//\n//  Created by Michael Koukoullis on 19/01/2015.\n//  Copyri"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleAttributeChainingView.h",
    "chars": 261,
    "preview": "//\n//  MASExampleAttributeChainingView.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 31/03/14.\n//  Cop"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleAttributeChainingView.m",
    "chars": 2350,
    "preview": "//\n//  MASExampleAttributeChainingView.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 31/03/14.\n//  Cop"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleBasicView.h",
    "chars": 218,
    "preview": "//\n//  MASExampleBasicView.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudling"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleBasicView.m",
    "chars": 2604,
    "preview": "//\n//  MASExampleBasicView.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudling"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleConstantsView.h",
    "chars": 226,
    "preview": "//\n//  MASExampleConstantsView.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloud"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleConstantsView.m",
    "chars": 1323,
    "preview": "//\n//  MASExampleConstantsView.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloud"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleDebuggingView.h",
    "chars": 244,
    "preview": "//\n//  MASExampleDebuggingView.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 3/08/13.\n//  Copyright (c"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleDebuggingView.m",
    "chars": 3268,
    "preview": "//\n//  MASExampleDebuggingView.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 3/08/13.\n//  Copyright (c"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleDistributeView.h",
    "chars": 237,
    "preview": "//\n//  MASExampleDistributeView.h\n//  Masonry iOS Examples\n//\n//  Created by bibibi on 15/8/6.\n//  Copyright (c) 2015年 J"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleDistributeView.m",
    "chars": 2423,
    "preview": "//\n//  MASExampleDistributeView.m\n//  Masonry iOS Examples\n//\n//  Created by bibibi on 15/8/6.\n//  Copyright (c) 2015年 J"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleLabelView.h",
    "chars": 237,
    "preview": "//\n//  MASExampleLabelView.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 24/10/13.\n//  Copyright (c) 2"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleLabelView.m",
    "chars": 2302,
    "preview": "//\n//  MASExampleLabelView.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 24/10/13.\n//  Copyright (c) 2"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleLayoutGuideViewController.h",
    "chars": 279,
    "preview": "//\n//  MASExampleLayoutGuideViewController.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 26/11/13.\n// "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleLayoutGuideViewController.m",
    "chars": 1946,
    "preview": "//\n//  MASExampleLayoutGuideViewController.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 26/11/13.\n// "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleListViewController.h",
    "chars": 251,
    "preview": "//\n//  MASExampleListViewController.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleListViewController.m",
    "chars": 4982,
    "preview": "//\n//  MASExampleListViewController.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleMarginView.h",
    "chars": 239,
    "preview": "//\n//  MASExampleMarginView.h\n//  Masonry iOS Examples\n//\n//  Created by Craig Siemens on 2015-02-23.\n//  Copyright (c) "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleMarginView.m",
    "chars": 1406,
    "preview": "//\n//  MASExampleMarginView.m\n//  Masonry iOS Examples\n//\n//  Created by Craig Siemens on 2015-02-23.\n//  Copyright (c) "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleRemakeView.h",
    "chars": 236,
    "preview": "//\n//  MASExampleRemakeView.h\n//  Masonry iOS Examples\n//\n//  Created by Sam Symons on 2014-06-22.\n//  Copyright (c) 201"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleRemakeView.m",
    "chars": 2045,
    "preview": "//\n//  MASExampleRemakeView.m\n//  Masonry iOS Examples\n//\n//  Created by Sam Symons on 2014-06-22.\n//  Copyright (c) 201"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleSafeAreaLayoutGuideViewController.h",
    "chars": 277,
    "preview": "//\n//  MASExampleSafeAreaLayoutGuideViewController.h\n//  Masonry iOS Examples\n//\n//  Created by MingLQ on 2017-09-27.\n//"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleSafeAreaLayoutGuideViewController.m",
    "chars": 4655,
    "preview": "//\n//  MASExampleSafeAreaLayoutGuideViewController.m\n//  Masonry iOS Examples\n//\n//  Created by MingLQ on 2017-09-27.\n//"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleScrollView.h",
    "chars": 239,
    "preview": "//\n//  MASExampleScrollView.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 20/11/13.\n//  Copyright (c) "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleScrollView.m",
    "chars": 2777,
    "preview": "//\n//  MASExampleScrollView.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 20/11/13.\n//  Copyright (c) "
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleSidesView.h",
    "chars": 218,
    "preview": "//\n//  MASExampleSidesView.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudling"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleSidesView.m",
    "chars": 1182,
    "preview": "//\n//  MASExampleSidesView.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudling"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleUpdateView.h",
    "chars": 238,
    "preview": "//\n//  MASExampleUpdateView.h\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 3/11/13.\n//  Copyright (c) 2"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleUpdateView.m",
    "chars": 1967,
    "preview": "//\n//  MASExampleUpdateView.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 3/11/13.\n//  Copyright (c) 2"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleViewController.h",
    "chars": 308,
    "preview": "//\n//  MASExampleOneViewController.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 c"
  },
  {
    "path": "Examples/Masonry iOS Examples/MASExampleViewController.m",
    "chars": 779,
    "preview": "//\n//  MASExampleOneViewController.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 c"
  },
  {
    "path": "Examples/Masonry iOS Examples/Masonry iOS Examples-Info.plist",
    "chars": 1550,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Examples/Masonry iOS Examples/Masonry iOS Examples-Prefix.pch",
    "chars": 628,
    "preview": "//\n// Prefix header for all source files of the 'Masonry iOS Examples' target in the 'Masonry iOS Examples' project\n//\n\n"
  },
  {
    "path": "Examples/Masonry iOS Examples/en.lproj/InfoPlist.strings",
    "chars": 45,
    "preview": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Examples/Masonry iOS Examples/main.m",
    "chars": 364,
    "preview": "//\n//  main.m\n//  Masonry iOS Examples\n//\n//  Created by Jonas Budelmann on 22/07/13.\n//  Copyright (c) 2013 Jonas Budel"
  },
  {
    "path": "Examples/Masonry iOS Examples.xcodeproj/project.pbxproj",
    "chars": 31528,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Examples/Masonry iOS Examples.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 165,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Masonry iOS Exa"
  },
  {
    "path": "Examples/Masonry iOS Examples.xcodeproj/xcshareddata/xcschemes/Masonry iOS Examples.xcscheme",
    "chars": 4086,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "chars": 664,
    "preview": "### New Issue Checklist\n\n🚫 If this template is not filled out your issue **will** be closed with no comment. 🚫\n\n* [ ] I "
  },
  {
    "path": "LICENSE",
    "chars": 1089,
    "preview": "Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry\n\nPermission is hereby granted, free of charge, to any "
  },
  {
    "path": "Masonry/Info.plist",
    "chars": 806,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Masonry/MASCompositeConstraint.h",
    "chars": 494,
    "preview": "//\n//  MASCompositeConstraint.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudl"
  },
  {
    "path": "Masonry/MASCompositeConstraint.m",
    "chars": 4870,
    "preview": "//\n//  MASCompositeConstraint.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudl"
  },
  {
    "path": "Masonry/MASConstraint+Private.h",
    "chars": 1785,
    "preview": "//\n//  MASConstraint+Private.h\n//  Masonry\n//\n//  Created by Nick Tymchenko on 29/04/14.\n//  Copyright (c) 2014 cloudlin"
  },
  {
    "path": "Masonry/MASConstraint.h",
    "chars": 7673,
    "preview": "//\n//  MASConstraint.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 22/07/13.\n//  Copyright (c) 2013 cloudling. All "
  },
  {
    "path": "Masonry/MASConstraint.m",
    "chars": 8034,
    "preview": "//\n//  MASConstraint.m\n//  Masonry\n//\n//  Created by Nick Tymchenko on 1/20/14.\n//\n\n#import \"MASConstraint.h\"\n#import \"M"
  },
  {
    "path": "Masonry/MASConstraintMaker.h",
    "chars": 5324,
    "preview": "//\n//  MASConstraintMaker.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling."
  },
  {
    "path": "Masonry/MASConstraintMaker.m",
    "chars": 9841,
    "preview": "//\n//  MASConstraintMaker.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling."
  },
  {
    "path": "Masonry/MASLayoutConstraint.h",
    "chars": 505,
    "preview": "//\n//  MASLayoutConstraint.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 3/08/13.\n//  Copyright (c) 2013 Jonas Bude"
  },
  {
    "path": "Masonry/MASLayoutConstraint.m",
    "chars": 227,
    "preview": "//\n//  MASLayoutConstraint.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 3/08/13.\n//  Copyright (c) 2013 Jonas Bude"
  },
  {
    "path": "Masonry/MASUtilities.h",
    "chars": 6273,
    "preview": "//\n//  MASUtilities.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 19/08/13.\n//  Copyright (c) 2013 Jonas Budelmann."
  },
  {
    "path": "Masonry/MASViewAttribute.h",
    "chars": 1221,
    "preview": "//\n//  MASViewAttribute.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudling. A"
  },
  {
    "path": "Masonry/MASViewAttribute.m",
    "chars": 1195,
    "preview": "//\n//  MASViewAttribute.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 21/07/13.\n//  Copyright (c) 2013 cloudling. A"
  },
  {
    "path": "Masonry/MASViewConstraint.h",
    "chars": 1279,
    "preview": "//\n//  MASViewConstraint.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling. "
  },
  {
    "path": "Masonry/MASViewConstraint.m",
    "chars": 13672,
    "preview": "//\n//  MASViewConstraint.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling. "
  },
  {
    "path": "Masonry/Masonry.h",
    "chars": 802,
    "preview": "//\n//  Masonry.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling. All rights"
  },
  {
    "path": "Masonry/NSArray+MASAdditions.h",
    "chars": 2789,
    "preview": "//\n//  NSArray+MASAdditions.h\n//\n//\n//  Created by Daniel Hammond on 11/26/13.\n//\n//\n\n#import \"MASUtilities.h\"\n#import \""
  },
  {
    "path": "Masonry/NSArray+MASAdditions.m",
    "chars": 6154,
    "preview": "//\n//  NSArray+MASAdditions.m\n//  \n//\n//  Created by Daniel Hammond on 11/26/13.\n//\n//\n\n#import \"NSArray+MASAdditions.h\""
  },
  {
    "path": "Masonry/NSArray+MASShorthandAdditions.h",
    "chars": 1016,
    "preview": "//\n//  NSArray+MASShorthandAdditions.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 22/07/13.\n//  Copyright (c) 2013"
  },
  {
    "path": "Masonry/NSLayoutConstraint+MASDebugAdditions.h",
    "chars": 326,
    "preview": "//\n//  NSLayoutConstraint+MASDebugAdditions.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 3/08/13.\n//  Copyright (c"
  },
  {
    "path": "Masonry/NSLayoutConstraint+MASDebugAdditions.m",
    "chars": 5549,
    "preview": "//\n//  NSLayoutConstraint+MASDebugAdditions.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 3/08/13.\n//  Copyright (c"
  },
  {
    "path": "Masonry/View+MASAdditions.h",
    "chars": 5206,
    "preview": "//\n//  UIView+MASAdditions.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling"
  },
  {
    "path": "Masonry/View+MASAdditions.m",
    "chars": 7398,
    "preview": "//\n//  UIView+MASAdditions.m\n//  Masonry\n//\n//  Created by Jonas Budelmann on 20/07/13.\n//  Copyright (c) 2013 cloudling"
  },
  {
    "path": "Masonry/View+MASShorthandAdditions.h",
    "chars": 5570,
    "preview": "//\n//  UIView+MASShorthandAdditions.h\n//  Masonry\n//\n//  Created by Jonas Budelmann on 22/07/13.\n//  Copyright (c) 2013 "
  },
  {
    "path": "Masonry/ViewController+MASAdditions.h",
    "chars": 1064,
    "preview": "//\n//  UIViewController+MASAdditions.h\n//  Masonry\n//\n//  Created by Craig Siemens on 2015-06-23.\n//\n//\n\n#import \"MASUti"
  },
  {
    "path": "Masonry/ViewController+MASAdditions.m",
    "chars": 1422,
    "preview": "//\n//  UIViewController+MASAdditions.m\n//  Masonry\n//\n//  Created by Craig Siemens on 2015-06-23.\n//\n//\n\n#import \"ViewCo"
  },
  {
    "path": "Masonry.podspec",
    "chars": 1376,
    "preview": "Pod::Spec.new do |s|\n  s.name     = 'Masonry'\n  s.version  = '1.1.0'\n  s.license  = 'MIT'\n  s.summary  = 'Harness the po"
  },
  {
    "path": "Masonry.xcodeproj/project.pbxproj",
    "chars": 32246,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Masonry.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Masonry.xcodepr"
  },
  {
    "path": "Masonry.xcodeproj/project.xcworkspace/xcshareddata/Masonry.xccheckout",
    "chars": 1477,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Masonry.xcodeproj/xcshareddata/xcschemes/Masonry OSX.xcscheme",
    "chars": 2902,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Masonry.xcodeproj/xcshareddata/xcschemes/Masonry iOS.xcscheme",
    "chars": 2902,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Masonry.xcworkspace/contents.xcworkspacedata",
    "chars": 411,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Examples/../Ma"
  },
  {
    "path": "Podfile",
    "chars": 1476,
    "preview": "workspace 'Masonry'\n\nplatform :ios, '8.0'\n\nproject 'Examples/Masonry iOS Examples'\ntarget 'Masonry iOS Examples' do\n  po"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPBlockDefinedMatcher.h",
    "chars": 701,
    "preview": "//\n//  EXPRuntimeMatcher.h\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPBlockDefinedMatcher.m",
    "chars": 1108,
    "preview": "//\n//  EXPRuntimeMatcher.m\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPDefines.h",
    "chars": 343,
    "preview": "//\n//  EXPDefines.h\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon Kim. A"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPDoubleTuple.h",
    "chars": 311,
    "preview": "#import <Foundation/Foundation.h>\n\n@interface EXPDoubleTuple : NSObject {\n    double *_values;\n    size_t _size;\n}\n\n@pro"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPDoubleTuple.m",
    "chars": 1356,
    "preview": "#import \"EXPDoubleTuple.h\"\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wobjc-designated-initialize"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPExpect.h",
    "chars": 1634,
    "preview": "#import <Foundation/Foundation.h>\n#import \"EXPMatcher.h\"\n#import \"EXPDefines.h\"\n\n@interface EXPExpect : NSObject {\n  EXP"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPExpect.m",
    "chars": 5624,
    "preview": "#import \"EXPExpect.h\"\n#import \"NSObject+Expecta.h\"\n#import \"Expecta.h\"\n#import \"EXPUnsupportedObject.h\"\n#import \"EXPMatc"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPFloatTuple.h",
    "chars": 306,
    "preview": "#import <Foundation/Foundation.h>\n\n@interface EXPFloatTuple : NSObject {\n    float *_values;\n    size_t _size;\n}\n\n@prope"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPFloatTuple.m",
    "chars": 1539,
    "preview": "#import \"EXPFloatTuple.h\"\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wobjc-designated-initializer"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPMatcher.h",
    "chars": 393,
    "preview": "//\n//  EXPMatcher.h\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon Kim. A"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPUnsupportedObject.h",
    "chars": 228,
    "preview": "#import <Foundation/Foundation.h>\n\n@interface EXPUnsupportedObject : NSObject {\n  NSString *_type;\n}\n\n@property (nonatom"
  },
  {
    "path": "Pods/Expecta/Expecta/EXPUnsupportedObject.m",
    "chars": 414,
    "preview": "#import \"EXPUnsupportedObject.h\"\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wobjc-designated-init"
  },
  {
    "path": "Pods/Expecta/Expecta/Expecta.h",
    "chars": 453,
    "preview": "#import <Foundation/Foundation.h>\n\n//! Project version number for Expecta.\nFOUNDATION_EXPORT double ExpectaVersionNumber"
  },
  {
    "path": "Pods/Expecta/Expecta/ExpectaObject.h",
    "chars": 961,
    "preview": "#import <Foundation/Foundation.h>\n\n#define EXPObjectify(value) _EXPObjectify(@encode(__typeof__((value))), (value))\n#def"
  },
  {
    "path": "Pods/Expecta/Expecta/ExpectaObject.m",
    "chars": 295,
    "preview": "#import \"ExpectaObject.h\"\n\n@implementation Expecta\n\nstatic NSTimeInterval _asynchronousTestTimeout = 1.0;\n\n+ (NSTimeInte"
  },
  {
    "path": "Pods/Expecta/Expecta/ExpectaSupport.h",
    "chars": 2831,
    "preview": "#import \"EXPExpect.h\"\n#import \"EXPBlockDefinedMatcher.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nid _EXPObjectify(const"
  },
  {
    "path": "Pods/Expecta/Expecta/ExpectaSupport.m",
    "chars": 7720,
    "preview": "#import \"ExpectaSupport.h\"\n#import \"NSValue+Expecta.h\"\n#import \"NSObject+Expecta.h\"\n#import \"EXPUnsupportedObject.h\"\n#im"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatcherHelpers.h",
    "chars": 116,
    "preview": "#import <Foundation/Foundation.h>\n\nBOOL EXPIsValuePointer(NSValue *value);\nBOOL EXPIsNumberFloat(NSNumber *number);\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatcherHelpers.m",
    "chars": 228,
    "preview": "#import \"EXPMatcherHelpers.h\"\n\nBOOL EXPIsValuePointer(NSValue *value) {\n  return [value objCType][0] == @encode(void *)["
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beCloseTo.h",
    "chars": 334,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beCloseToWithin, (id expected, id within));\nEXPMatcherInterface(beCloseToWithi"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beCloseTo.m",
    "chars": 1813,
    "preview": "#import \"EXPMatchers+beCloseTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beCloseToWithin, (id exp"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beFalsy.h",
    "chars": 59,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beFalsy, (void));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beFalsy.m",
    "chars": 778,
    "preview": "#import \"EXPMatchers+beFalsy.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(beFalsy, (void)) {\n  match("
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThan.h",
    "chars": 198,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beGreaterThan, (id expected));\nEXPMatcherInterface(beGreaterThan, (id expected"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThan.m",
    "chars": 722,
    "preview": "#import \"EXPMatchers+beGreaterThan.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beGreaterThan, (id e"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h",
    "chars": 234,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beGreaterThanOrEqualTo, (id expected));\nEXPMatcherInterface(beGreaterThanOrEqu"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m",
    "chars": 763,
    "preview": "#import \"EXPMatchers+beGreaterThanOrEqualTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beGreaterTh"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beIdenticalTo.h",
    "chars": 328,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beIdenticalTo, (void *expected));\nEXPMatcherInterface(beIdenticalTo, (void *ex"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beIdenticalTo.m",
    "chars": 692,
    "preview": "#import \"EXPMatchers+equal.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beIdenticalTo, (void *expect"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beInTheRangeOf.h",
    "chars": 344,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound));\nEXPMatcherInt"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beInTheRangeOf.m",
    "chars": 1341,
    "preview": "#import \"EXPMatchers+beInTheRangeOf.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beInTheRangeOf, (id"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beInstanceOf.h",
    "chars": 241,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beInstanceOf,   (Class expected));\nEXPMatcherInterface(beAnInstanceOf, (Class e"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beInstanceOf.m",
    "chars": 1188,
    "preview": "#import \"EXPMatchers+beInstanceOf.h\"\n\nEXPMatcherImplementationBegin(beInstanceOf, (Class expected)) {\n  BOOL actualIsNil"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beKindOf.h",
    "chars": 121,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beKindOf,  (Class expected));\nEXPMatcherInterface(beAKindOf, (Class expected));"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beKindOf.m",
    "chars": 1087,
    "preview": "#import \"EXPMatchers+beKindOf.h\"\n\nEXPMatcherImplementationBegin(beKindOf, (Class expected)) {\n  BOOL actualIsNil = (actu"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThan.h",
    "chars": 186,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beLessThan, (id expected));\nEXPMatcherInterface(beLessThan, (id expected));\n\n#"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThan.m",
    "chars": 709,
    "preview": "#import \"EXPMatchers+beLessThan.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beLessThan, (id expecte"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h",
    "chars": 222,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beLessThanOrEqualTo, (id expected));\nEXPMatcherInterface(beLessThanOrEqualTo, "
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m",
    "chars": 752,
    "preview": "#import \"EXPMatchers+beLessThanOrEqualTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beLessThanOrEq"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beNil.h",
    "chars": 94,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beNil, (void));\nEXPMatcherInterface(beNull, (void));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beNil.m",
    "chars": 497,
    "preview": "#import \"EXPMatchers+beNil.h\"\n\nEXPMatcherImplementationBegin(beNil, (void)) {\n  match(^BOOL{\n    return actual == nil;\n "
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beSubclassOf.h",
    "chars": 129,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beSubclassOf,  (Class expected));\nEXPMatcherInterface(beASubclassOf, (Class exp"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beSubclassOf.m",
    "chars": 1033,
    "preview": "#import \"EXPMatchers+beSubclassOf.h\"\n#import \"NSValue+Expecta.h\"\n#import <objc/runtime.h>\n\nEXPMatcherImplementationBegin"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beSupersetOf.h",
    "chars": 70,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beSupersetOf, (id subset));\n\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beSupersetOf.m",
    "chars": 2833,
    "preview": "#import \"EXPMatchers+contain.h\"\n\nEXPMatcherImplementationBegin(beSupersetOf, (id subset)) {\n  BOOL actualIsCompatible = "
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beTruthy.h",
    "chars": 60,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beTruthy, (void));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beTruthy.m",
    "chars": 785,
    "preview": "#import \"EXPMatchers+beTruthy.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(beTruthy, (void)) {\n  matc"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beginWith.h",
    "chars": 115,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beginWith, (id expected));\nEXPMatcherInterface(startWith, (id expected));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+beginWith.m",
    "chars": 2667,
    "preview": "#import \"EXPMatchers+beginWith.h\"\n\nEXPMatcherImplementationBegin(beginWith, (id expected)) {\n  BOOL actualIsNil = (actua"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+conformTo.h",
    "chars": 75,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(conformTo, (Protocol *expected));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+conformTo.m",
    "chars": 1064,
    "preview": "#import \"EXPMatchers+conformTo.h\"\n#import \"NSValue+Expecta.h\"\n#import <objc/runtime.h>\n\nEXPMatcherImplementationBegin(co"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+contain.h",
    "chars": 199,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_contain, (id expected));\nEXPMatcherInterface(contain, (id expected)); // to ai"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+contain.m",
    "chars": 1505,
    "preview": "#import \"EXPMatchers+contain.h\"\n\nEXPMatcherImplementationBegin(_contain, (id expected)) {\n  BOOL actualIsCompatible = [a"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+endWith.h",
    "chars": 66,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(endWith, (id expected));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+endWith.m",
    "chars": 2654,
    "preview": "#import \"EXPMatchers+endWith.h\"\n\nEXPMatcherImplementationBegin(endWith, (id expected)) {\n  BOOL actualIsNil = (actual =="
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+equal.h",
    "chars": 189,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_equal, (id expected));\nEXPMatcherInterface(equal, (id expected)); // to aid co"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+equal.m",
    "chars": 1784,
    "preview": "#import \"EXPMatchers+equal.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_equal, (id expected)) {\n  ma"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+haveCountOf.h",
    "chars": 409,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(haveCountOf,   (NSUInteger expected));\nEXPMatcherInterface(haveCount,     (NSUI"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+haveCountOf.m",
    "chars": 1819,
    "preview": "#import \"EXPMatchers+haveCountOf.h\"\n\nEXPMatcherImplementationBegin(haveCountOf, (NSUInteger expected)) {\n  BOOL actualIs"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+match.h",
    "chars": 71,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(match, (NSString *expected));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+match.m",
    "chars": 1612,
    "preview": "#import \"EXPMatchers+match.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(match, (NSString *expected)) "
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+postNotification.h",
    "chars": 143,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(postNotification, (id expectedNotification));\nEXPMatcherInterface(notify, (id e"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+postNotification.m",
    "chars": 2887,
    "preview": "#import \"EXPMatchers+postNotification.h\"\n\n@implementation NSNotification (EXPEquality)\n\n- (BOOL)exp_isFunctionallyEqualT"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+raise.h",
    "chars": 114,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(raise, (NSString *expectedExceptionName));\n#define raiseAny() raise(nil)\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+raise.m",
    "chars": 1094,
    "preview": "#import \"EXPMatchers+raise.h\"\n#import \"EXPDefines.h\"\n\nEXPMatcherImplementationBegin(raise, (NSString *expectedExceptionN"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+raiseWithReason.h",
    "chars": 120,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+raiseWithReason.m",
    "chars": 1655,
    "preview": "#import \"EXPMatchers+raiseWithReason.h\"\n#import \"EXPDefines.h\"\n\nEXPMatcherImplementationBegin(raiseWithReason, (NSString"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+respondTo.h",
    "chars": 69,
    "preview": "#import \"Expecta.h\"\n\nEXPMatcherInterface(respondTo, (SEL expected));\n"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers+respondTo.m",
    "chars": 961,
    "preview": "#import \"EXPMatchers+respondTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(respondTo, (SEL expected)"
  },
  {
    "path": "Pods/Expecta/Expecta/Matchers/EXPMatchers.h",
    "chars": 887,
    "preview": "#import \"EXPMatchers+beNil.h\"\n#import \"EXPMatchers+equal.h\"\n#import \"EXPMatchers+beInstanceOf.h\"\n#import \"EXPMatchers+be"
  },
  {
    "path": "Pods/Expecta/Expecta/NSObject+Expecta.h",
    "chars": 304,
    "preview": "#import <Foundation/Foundation.h>\n\n@interface NSObject (Expecta)\n\n- (void)recordFailureWithDescription:(NSString *)descr"
  },
  {
    "path": "Pods/Expecta/Expecta/NSValue+Expecta.h",
    "chars": 120,
    "preview": "#import <Foundation/Foundation.h>\n\n@interface NSValue (Expecta)\n\n@property (nonatomic) const char *_EXP_objCType;\n\n@end\n"
  },
  {
    "path": "Pods/Expecta/Expecta/NSValue+Expecta.m",
    "chars": 540,
    "preview": "#import \"NSValue+Expecta.h\"\n#import <objc/runtime.h>\n#import \"Expecta.h\"\n\nEXPFixCategoriesBug(NSValue_Expecta);\n\n@implem"
  },
  {
    "path": "Pods/Expecta/LICENSE",
    "chars": 1088,
    "preview": "Copyright (c) 2011-2015 Specta Team - https://github.com/specta\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "Pods/Expecta/README.md",
    "chars": 10875,
    "preview": "#Expecta\n\n[![Build Status](http://img.shields.io/travis/specta/expecta/master.svg?style=flat)](https://travis-ci.org/spe"
  },
  {
    "path": "Pods/Local Podspecs/Masonry.podspec.json",
    "chars": 1141,
    "preview": "{\n  \"name\": \"Masonry\",\n  \"version\": \"1.1.0\",\n  \"license\": \"MIT\",\n  \"summary\": \"Harness the power of Auto Layout NSLayout"
  },
  {
    "path": "Pods/Pods.xcodeproj/project.pbxproj",
    "chars": 100700,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Pods/Target Support Files/Expecta/Expecta-dummy.m",
    "chars": 118,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Expecta : NSObject\n@end\n@implementation PodsDummy_Expecta\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Expecta/Expecta-prefix.pch",
    "chars": 195,
    "preview": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPO"
  },
  {
    "path": "Pods/Target Support Files/Expecta/Expecta.xcconfig",
    "chars": 763,
    "preview": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Expecta\nENABLE_BITCODE = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited"
  },
  {
    "path": "Pods/Target Support Files/Masonry/Masonry-dummy.m",
    "chars": 118,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Masonry : NSObject\n@end\n@implementation PodsDummy_Masonry\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Masonry/Masonry-prefix.pch",
    "chars": 195,
    "preview": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPO"
  },
  {
    "path": "Pods/Target Support Files/Masonry/Masonry.xcconfig",
    "chars": 651,
    "preview": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Masonry\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-acknowledgements.markdown",
    "chars": 1236,
    "preview": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## Masonry\n\nCopyright (c) 2011-20"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-acknowledgements.plist",
    "chars": 2109,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-dummy.m",
    "chars": 154,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_Masonry_iOS_Examples : NSObject\n@end\n@implementation PodsDum"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-frameworks.sh",
    "chars": 4038,
    "preview": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_D"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples-resources.sh",
    "chars": 5226,
    "preview": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/re"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples.debug.xcconfig",
    "chars": 711,
    "preview": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\""
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Examples/Pods-Masonry iOS Examples.release.xcconfig",
    "chars": 711,
    "preview": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\""
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests-acknowledgements.markdown",
    "chars": 1235,
    "preview": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## Expecta\n\nCopyright (c) 2011-20"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests-acknowledgements.plist",
    "chars": 2108,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests-dummy.m",
    "chars": 148,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_Masonry_iOS_Tests : NSObject\n@end\n@implementation PodsDummy_"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests-frameworks.sh",
    "chars": 4038,
    "preview": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_D"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests-resources.sh",
    "chars": 5226,
    "preview": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/re"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests.debug.xcconfig",
    "chars": 797,
    "preview": "FRAMEWORK_SEARCH_PATHS = $(inherited) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(in"
  },
  {
    "path": "Pods/Target Support Files/Pods-Masonry iOS Tests/Pods-Masonry iOS Tests.release.xcconfig",
    "chars": 797,
    "preview": "FRAMEWORK_SEARCH_PATHS = $(inherited) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(in"
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader-acknowledgements.markdown",
    "chars": 1236,
    "preview": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## Masonry\n\nCopyright (c) 2011-20"
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader-acknowledgements.plist",
    "chars": 2109,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader-dummy.m",
    "chars": 150,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_MasonryTestsLoader : NSObject\n@end\n@implementation PodsDummy"
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader-frameworks.sh",
    "chars": 4038,
    "preview": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_D"
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader-resources.sh",
    "chars": 5226,
    "preview": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/re"
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader.debug.xcconfig",
    "chars": 711,
    "preview": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\""
  },
  {
    "path": "Pods/Target Support Files/Pods-MasonryTestsLoader/Pods-MasonryTestsLoader.release.xcconfig",
    "chars": 711,
    "preview": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\""
  },
  {
    "path": "README.md",
    "chars": 16167,
    "preview": "# Masonry [![Build Status](https://travis-ci.org/SnapKit/Masonry.svg?branch=master)](https://travis-ci.org/SnapKit/Mason"
  },
  {
    "path": "Tests/GcovTestObserver.m",
    "chars": 465,
    "preview": "//\n//  GcovTestObserver.m\n//  ClassyTests\n//\n//  Created by Jonas Budelmann on 19/11/13.\n//  Copyright (c) 2013 Jonas Bu"
  },
  {
    "path": "Tests/Masonry Tests.xcodeproj/project.pbxproj",
    "chars": 35335,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Tests/Masonry Tests.xcodeproj/xcshareddata/xcschemes/Masonry iOS Tests.xcscheme",
    "chars": 3901,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Tests/MasonryTests-Info.plist",
    "chars": 674,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Tests/MasonryTests-Prefix.pch",
    "chars": 373,
    "preview": "//\n// Prefix header for all source files of the 'MasonryTests' target in the 'Masonry' project\n//\n\n#ifdef __OBJC__\n    #"
  },
  {
    "path": "Tests/MasonryTestsLoader/CASAppDelegate.h",
    "chars": 196,
    "preview": "//\n//  CASAppDelegate.h\n//  MasonryTestsLoader\n//\n//  Created by Jonas Budelmann on 26/11/13.\n//\n//\n\n#import <UIKit/UIKi"
  }
]

// ... and 21 more files (download for full content)

About this extraction

This page contains the full source code of the SnapKit/Masonry GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 221 files (577.0 KB), approximately 170.0k tokens, and a symbol index with 12 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!