{
  "name": "VungleAdvertiserSDK",
  "version": "3.1.2.1",
  "summary": "Vungle Advertiser SDK.",
  "homepage": "http://www.vungle.com/",
  "deprecated": true,
  "deprecated_in_favor_of": "VungleSDK-iOS",
  "license": {
    "type": "Commercial",
    "text": "   \tVungle SDK License and Publisher Terms\n The Vungle SDK is made available by Vungle, Inc. (\"Vungle\"). \n By downloading or using the Vungle SDK, you and any company, entity, or organization on behalf of which you are accepting these Vungle SDK License and Publisher Terms (this \"Agreement\") hereby agree to be bound by all terms and conditions of this Agreement. If you do not agree to all terms and conditions of this Agreement, do not download or use the Vungle SDK. \n If you are downloading or using the Vungle SDK on behalf of a company, entity, or organization, then you represent and warrant that you are an authorized representative of such company, entity, or organization with the authority to bind such company, entity, or organization to this Agreement; and agree to be bound by this Agreement on behalf of such company, entity, or organization. You and, if applicable, such company, entity, or organization may be referred to as the \"Developer\". \n Definitions \n \"Developer Apps\" means the mobile applications owned and/or controlled by Developer for which Developer wishes to use the Vungle SDK. \n \"Vungle Platform\" means Vungle’s hosted video advertising system, which supports video advertisement insertion within mobile applications, and related advertisement reporting tools.\n\"Vungle SDK\" means the software development kit and any other software that may be provided by Vungle to Developer with the software development kit (including any updates to the foregoing).\nVungle SDK License. During the term of this Agreement, Vungle hereby grants Developer a worldwide, non-transferable (except for a permitted assignment of this Agreement), non-exclusive license to (a) use the Vungle SDK internally for the sole purpose integrating the Vungle SDK with Developer Apps, (b) use, reproduce and distribute certain portions of the Vungle SDK solely as required for Developer’s distribution of Developer Apps, solely in the manner enabled by Vungle and in accordance with any applicable documentation provided by Vungle, and provided that any such distribution to an end user is subject to terms at least as protective of the Vungle SDK as those set forth herein; (c) use the Vungle SDK and Vungle Platform to have video advertisements inserted within Developer Apps pursuant to this Agreement and any insertion order entered into between the parties, in the manner enabled by Vungle and in accordance with any applicable documentation provided by Vungle; and (d) to internally use any provided documentation for the sole purpose of exercising the foregoing licenses.\nLicense Restrictions. Developer has no rights or licenses with respect to the Vungle SDK or any documentation (collectively, the \"Vungle Materials\") except as expressly provided in this Agreement. Without limiting the generality of the foregoing, except as expressly provided in this Agreement, Developer may not (a) copy, distribute, rent, lease, lend, sublicense, transfer or make the Vungle Materials available to any third party or use the Vungle Materials on a service bureau basis, (b) decompile, reverse engineer, or disassemble the Vungle Materials, (c) create derivative works based on the Vungle Materials; or (d) modify, remove, or obscure any copyright, trademark, patent or other notices or legends that appear on the Vungle Materials or during the use and operation thereof.\nInsertion of Advertising. Vungle and Developer agree that any insertion order agreed to by the parties for the serving and insertion of advertisements from the Vungle Platform to or through the Developer Apps shall be subject to the terms and conditions of Exhibit A.\nOwnership \n\nVungle Rights. As between Vungle and Developer, Vungle retains all right, title and interest in and to the Vungle Platform, the Vungle Materials and any materials created, developed or provided by Vungle in connection with this Agreement, including all intellectual property rights related to each of the foregoing. All rights not expressly granted by Vungle to Developer herein are hereby reserved by Vungle.\nDeveloper Rights. Subject to Section 5.1, as between Developer and Vungle, Developer retains all right, title and interest in and to the Developer Apps, including all intellectual property rights related to each of the foregoing. All rights not expressly granted by Developer to Vungle herein are hereby reserved by Developer.\nCollection of Unique Identifiers. Developer acknowledges that unique identifiers and other technologies may be used in connection with the Vungle SDK and Vungle Advertisements in order to collect and use data regarding advertisement performance and end user interests and to display Vungle Advertisments to end users, and that the collection of such data is regulated by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\") and other applicable laws. Vungle will collect and use such unique identifiers in accordance with the Vungle Privacy Policy, which is available at http://www.vungle.com/privacy.html (as updated from time to time) and incorporated by reference into this Agreement.\nCompliance with Laws. Developer acknowledges and agrees that Vungle may collect unique identifiers from end users via the Vungle SDK and use them in accordance with the Vungle Privacy Policy. Developer further acknowledges and agrees that it is responsible for providing adequate notice and obtaining any required end user or parental consent, including as required by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\"), to the collection of unique identifiers and other information via the Vungle SDK and Developer's App. Developer expressly represents, warrants and covenants that it and its App shall fully comply with, and Developer shall ensure that the collection of unique identifiers and other information by the Vungle SDK as set forth in the Vungle Privacy Policy (as amended from time to time) complies with, COPPA and all other applicable laws, rules and regulations. For the avoidance of doubt, as between Vungle and Developer, Developer shall be responsible for ensuring that Developer's App, and the information collected from end users of Developer's App (including by the Vungle SDK), complies with COPPA and all applicable laws, rules and regulations. Developer shall fully indemnify, defend, and hold harmless Vungle and its directors, officers, agents, representatives, assigns, and employees from and against any liabilities, damages, costs, fines, penalties and expenses (including reasonable attorneys’ fees) arising out of or relating to a violation of this paragraph 7 and/or any claims of COPPA violations or other violations of laws relating to Developers Apps.\nSupport.\n  Vungle shall have no obligation under this Agreement to provide any upgrades, patches, enhancements, fixes or any other support for the Vungle Platform or Vungle Materials. Vungle may make maintenance and support services available under a separate agreement.\nTerm and Termination. \n \nTerm. This Agreement is effective until terminated. \n \nTermination by Vungle. Vungle may terminate this Agreement at any time by providing sixty (60) days’ notice to Developer.Additionally, Vungle may terminate this Agreement and the licenses granted herein immediately if Developer breaches any provision of this Agreement.\nTermination by Developer. Developer may terminate this Agreement and the licenses granted herein at any time by ceasing all use of the Vungle Platform and Vungle Materials and destroying or removing from all hard drives, networks, and other storage media all copies of the Vungle Materials.\nEffect of Termination. Sections 3, 4, 5, 7.4, and 8 through 12 shall survive any expiration or termination of this Agreement. \n Confidentiality \n\nDefinition. \"Confidential Information\" means any and all information disclosed by Vungle to Developer, either directly or indirectly, in writing, orally or by inspection of tangible objects, including without limitation the Vungle SDK, the features and functionality of the Vungle Platform and the results and performance of the Vungle Materials. Confidential Information does not include information that: (i) is or becomes generally known to the public through no fault of or breach of this Agreement by Developer; (ii) is rightfully known by Developer at the time of disclosure without an obligation of confidentiality; or (iii) Developer rightfully obtains from a third party without restriction on use or disclosure.\nUse and Disclosure Restrictions. Developer shall not use the Confidential Information except as necessary to exercise its rights or perform its obligations under this Agreement. Developer shall not disclose the Confidential Information to any third party except to those of its employees, subcontractors, and advisers that need to know such Confidential Information for the purposes of this Agreement, provided that each such employee and subcontractor is subject to a written agreement that includes binding use and disclosure restrictions that are at least as protective of Confidential Information as those set forth herein. Developer will use at least the efforts Developer ordinarily uses with respect to its own proprietary information of similar nature and importance to maintain the confidentiality of all Confidential Information in its possession or control, but in no event less than reasonable efforts. The foregoing obligations will not restrict Developer from disclosing Confidential Information pursuant to the order or requirement of a court, administrative agency, or other governmental body, provided that Developer gives reasonable notice to Vungle to contest such order or requirement.\nWarranty Disclaimer. EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, VUNGLE DOES NOT MAKE ANY WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, WITH RESPECT TO THE SUBJECT MATTER OF THIS AGREEMENT, AND VUNGLE EXPRESSLY DISCLAIMS THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, AND ANY IMPLIED WARRANTIES ARISING FROM COURSE OF DEALING OR PERFORMANCE. VUNGLE AND ITS SUPPLIERS, LICENSORS, AND PARTNERS DO NOT WARRANT THAT THE VUNGLE PLATFORM OR VUNGLE SDK WILL BE CORRECT, UNINTERRUPTED OR ERROR-FREE, THAT DEFECTS WILL BE CORRECTED, OR THAT THE VUNGLE PLATFORM OR VUNGLE SDK ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. VUNGLE DOES NOT WARRANT THE RESULTS OF USE OF THE VUNGLE PLATFORM OR VUNGLE SDK. DEVELOPER ACKNOWLEDGES THAT VUNGLE MAY MODIFY OR SUSPEND THE VUNGLE PLATFORM AT ANY TIME IN ITS SOLE DISCRETION AND WITHOUT NOTICE.\nIndemnification. Developer agrees to indemnify, defend, and hold harmless Vungle and its directors, officers, and employees from and against any liabilities, damages, costs and expenses (including reasonable attorneys’ fees) arising out of any claim, demand, action, or proceeding initiated by a third party to the extent attributable to the alleged or actual breach of Developer’s obligations, representations or warranties set forth in this Agreement, provided that Vungle: (a) promptly notifies Developer in writing of the claim, except that any failure to provide this notice promptly only relieves Developer of its responsibility pursuant to this Section 10 to the extent its defense is materially prejudiced by the delay; (b) grants Developer sole control of the defense and/or settlement of the claim; and (c) provides Developer, at Developer’s expense, with all assistance, information and authority reasonably required for the defense and/or settlement of the claim, but in a manner consistent with Vungle’s respective confidentiality obligations and preservation of attorney/client, work product, and other privileges.\nLimitation of Liability. VUNGLE SHALL NOT BE LIABLE TO DEVELOPER FOR ANY PUNITIVE, INCIDENTAL, INDIRECT, SPECIAL, RELIANCE OR CONSEQUENTIAL DAMAGES, INCLUDING LOST BUSINESS, REVENUE, OR ANTICIPATED PROFITS, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT VUNGLE WAS ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES. IN NO EVENT WILL VUNGLE’S AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED THE GREATER OF ONE HUNDRED DOLLARS ($100) AND THE TOTAL FEES PAYABLE TO DEVELOPER UNDER THIS AGREEMENT DURING THE TWELVE MONTHS IMMEDIATELY PRECEDING THE DATE THE CLAIM FIRST AROSE. THE PARTIES AGREE THAT THE LIMITATIONS OF LIABILITY SET FORTH IN THIS SECTION WILL APPLY EVEN IF ANY LIMITED REMEDY SPECIFIED IN THIS AGREEMENT IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE.\nGeneral \n \nRelationship of the Parties. The parties are independent contractors with respect to each other. This Agreement does not constitute and shall not be construed as constituting a partnership or joint venture among the parties hereto, or an employee-employer relationship. No party shall have any right to obligate or bind any other party in any manner whatsoever, and nothing herein contained shall give, or is intended to give, any rights of any kind to any third parties.\nAssignment. Neither party may assign any of its rights or obligations under this Agreement without the prior written consent of the other party, except that either party may assign its rights and obligations under this Agreement without the consent of the other party in connection with any merger (by operation of law or otherwise), consolidation, reorganization, change in control or sale of all or substantially all of its assets related to this Agreement or similar transaction. This Agreement inures to the benefit of and shall be binding on the parties’ permitted assignees, transferees and successors.\nForce Majeure. Neither party will be responsible for any failure or delay in its performance under this Agreement due to causes beyond its reasonable control, including, but not limited to, labor disputes, strikes, lockouts, internet or telecommunications failures, shortages of or inability to obtain labor, energy, or supplies, war, terrorism, riot, acts of God or governmental action, acts by hackers or other malicious third parties and problems with the Internet generally, and such performance shall be excused to the extent that it is prevented or delayed by reason of any of the foregoing.\nHeadings and Wording. Unless otherwise expressly stated in this Agreement, the words \"herein,\" \"hereof,\" \"hereto,\" and \"hereunder\" and other words of similar import refer to this Agreement as a whole and not to any particular Article, Section, Subsection, or other subdivision. The words \"include\" and \"including\" are not and should not be construed or interpreted as terms of limitation. The words \"day,\" \"month,\" and \"year\" mean, respectively, calendar day, calendar month, and calendar year. Section headings are for reference purposes only, and should not be used in the interpretation hereof. No provision of this Agreement will be construed against either party as the drafter thereof.\nNotices. All notices under the terms of this Agreement shall be given in writing and sent by registered mail, internationally recognized carrier, or facsimile transmission with machine confirmation or shall be delivered by hand.\nAmendments. An amendment of this Agreement shall be binding upon the parties so long as it is either in writing and executed by both parties or is presented by Vungle electronically via the Vungle Platform and accepted by Developer by clicking on \"I Accept\" or similar language.\nWaiver. A waiver of any provision of this Agreement will only be valid if provided in writing and will only be applicable to the specific incident and occurrence so waived. The failure by either party to insist upon the strict performance of this Agreement, or to exercise any term hereof, will not act as a waiver of any right, promise or term, which will continue in full force and effect.\nConstruction. This Agreement shall be fairly interpreted and construed in accordance with its terms and without strict interpretation or construction in favor of or against either party.\nSeverability. If any provision, or portion thereof, of this Agreement is determined by a court of competent jurisdiction to be invalid, illegal or unenforceable, such determination will not impair or affect the validity, legality, or enforceability of the remaining provisions of this Agreement, and each provision, or portion thereof, is hereby declared to be separate, severable, and distinct.\nGoverning Law; Jurisdiction. This Agreement shall be governed by, and construed in accordance with, the laws of the State of California, without reference to conflicts of laws principles. The parties agree that the federal and state courts in San Francisco County, California will have exclusive jurisdiction and venue under this Agreement, and the parties hereby agree to submit to such jurisdiction exclusively.\nEntire Agreement. This Agreement, together with the Exhibits attached hereto and hereby incorporated herein by reference, constitutes the complete, final and exclusive agreement between the parties with respect to the subject matter hereof, and supersedes any and all prior or contemporaneous oral or written representations, understandings, agreements or communications between them concerning the subject matter hereof. Neither party is relying upon any warranties, representations, assurances or inducements not expressly set forth herein.\n\nExhibit A \n \n\nAdvertising Insertion Order Terms \n \nDefinitions \n\n\"Advertisers\" means third-party advertisers.\n\"Content\" means any content or materials\navailable in, distributed with, or that otherwise may be viewed or downloaded by end users of the Developer Apps (excluding Vungle Advertisements).\n\"CPM\" means the cost per thousand advertisement impressions.\n\"Net Revenue\" means the gross revenue actually collected by Vungle from Advertisers for Vungle Advertisements, less (i) any refunds to Advertisers; (ii) a deduction of 10% to cover expenses related to discounts, payment transaction fees, telecommunications, data center and other serving costs, ; (iii) any amounts payable by Vungle to providers of targeting, reporting, verification or other data, technology or services used in connection with a given advertisement campaign hereunder.\n\"Vungle Advertisements\" means video advertisements, sourced by or on behalf of Vungle, which are routed and/or served by the Vungle Platform to the Developer Apps.\nVungle Advertisement Sales. Upon agreement between Developer and Vungle on an insertion order for the placement of Vungle Advertisements in Developer Apps, Developer hereby grants Vungle the right to sell and have sold advertisement inventory in the Developer Apps and to insert Vungle Advertisements within such inventory during the term of the applicable insertion order, including the right to list such inventory in pitch materials to prospective Advertisers and to report such inventory as being part of Vungle’s advertising network. In addition, Developer hereby grants Vungle a nonexclusive license during the term of this Agreement to use Developer’s trademarks and logos and images of the Developer Apps in connection with exercising the foregoing right. Vungle is solely responsible for, and has final authority on, decisions related on how to sell Vungle Advertisement inventory, including packaging, pricing, promotional offers, and all other related deal terms and conditions. Developer shall designate a representative that will serve as the point of contact on an ongoing basis with Vungle’s account management team.\nDeveloper Permissions. Developer agrees that, in connection with fulfillment of any insertion order entered into between the parties, Vungle may: (a) access or call to the Developer Apps or the servers that make them available and to cause the routing, transmission, reproduction, and display of Vungle Advertisements as contemplated herein; and (b) collect data and information, including unique identifiers, usage data, and streaming data, with regard to the Content and Developer Apps within which Vungle Advertisements are routed and/or served and (i) use such information for Vungle’s internal business purposes; (ii) disclose such information to third parties (including Advertisers and partners) as reasonably necessary in connection with the operation of the Vungle Platform or as may be required by law or legal process; and (iii) disclose such information generally when it is aggregated with similar information relating to other Vungle publishers such that the specific information relating to Developer is not identified as such.\nRepresentations and Warranties of Developer. During the term of this Agreement, Developer represents, warrants and covenants to Vungle that: (a) it has all necessary rights, title, and interest in and to the Developer Apps to allow Vungle to insert Vungle Advertisements as contemplated herein; (b) it shall not use the Vungle Materials in connection with any Developer Apps, Content or technology that violate any law, rule or regulation, including without limitation applicable FTC regulations and COPPA; (c) it has any and all consents, authorizations and clearances from end users of the Developer Apps as may be required for Vungle to provide services hereunder; and (d) the Developer Apps do not and will not (i) infringe upon, violate, or misappropriate any third-party right, including any copyright, trademark, patent, trade secret, moral right, privacy right, right of publicity, or any other intellectual property or proprietary right or (ii) slander, defame, or libel any person.\n<\nRestrictions. Developer may not, and may not authorize or encourage any third party to: (i) generate fraudulent impressions of or fraudulent clicks on any advertisements, including through repeated manual clicks, the use of robots or other automated tools or any other method that may lead to artificially high numbers of impressions, downloads, or clicks; (ii) edit, modify, filter, or change the order of the information contained in any Vungle Advertisement, or remove, obscure or minimize any Vungle Advertisement in any way; and (iii) redirect an end user away from any web page accessed by an end user after selecting or clicking on any part of a Vungle Advertisement (\"Advertiser Page\"), provide a version of the Advertiser Page different from the page an end user would access by going directly to the Advertiser Page, or intersperse any content between the Vungle Advertisement and the Advertiser Page. Vungle may suspend Developer’s use of the Vungle Platform and/or terminate this Agreement immediately should Developer violate the foregoing provisions of this Section 5.\nContent. Developer acknowledges and agrees that it may not use the Vungle Platform in connection with any Developer Apps or Content containing, consisting of or promoting discrimination, illegal activities, hate speech, graphic violence, firearms, tobacco, illegal drugs, pornography, profanity, obscenity or sexually explicit material, and that it will notify Vungle immediately of any Developer Apps or Content relating to alcohol or gambling. Developer agrees that Vungle has no responsibility for any Content, and Vungle has no obligation or ability to monitor or edit the Developer Apps. Developer agrees to provide as much advance notice as is reasonably practicable (but in no event less than fifteen (15) days’ notice) regarding any material changes to the nature or design of any Developer App, including without limitation changes to the placement of Vungle Advertisement inventory, the type of Content, or the target audience.\nTracking Data. Developer acknowledges that unique identifiers and other technologies may be used in connection with the Vungle SDK Vungle Advertisements in order to collect and use data regarding advertisement performance and end user interests and to display Vungle Advertisements to end users, and that the collection of such data is regulated by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\"). Developer hereby grants Vungle a perpetual, irrevocable, worldwide, sublicenseable right and license to ussde, copy, modify, distribute and otherwise exploit data collected through such cookies, beacons, and other technologies for Vungle’s business purposes. Without limiting any other terms of the Agreement or (including paragraphs 6 and 7) and this Exhibit A, during the term of this Agreement, Developer shall obtain all consents, authorizations and clearances from end users of the Developer Apps required in connection with the use of such cookies, beacons, and other technologies. Developer shall provide or make available to users of each Developer App a privacy notification in a conspicuous manner (via a privacy policy or other method appropriate for the type of such Developer App)which (i) complies with all applicable laws, rules and regulations; and (ii) to the extent applicable to the type of such Developer App, discloses to users of such Developer App that cookies, web beacons and other technologies may be used in connection with such Developer App. Developer shall comply with such other requirements that Vungle may issue in writing from time to time (including through the Vungle Platform) that relate to compliance with laws, rules, regulations, guidelines and industry standards relating to online advertising.\nPayment Amounts. Subject to the terms and conditions of this Agreement, Vungle shall pay to Developer amounts calculated in accordance with the applicable insertion order entered into between the parties and the definitions of CPM and Net Revenue set forth herein. Developer acknowledges that all payments hereunder shall be based on the impression counts used by the applicable Advertisers to pay Vungle. For the avoidance of doubt, all payments hereunder are based on advertisement requests from the Developer Apps that are actually fulfilled with a Vungle Advertisement, except as expressly provided in this Agreement. All amounts received from activities Vungle deems to be fraudulent may be refunded to Advertisers in Vungle’s sole discretion.\nPayment Terms. Vungle agrees to pay all amounts due hereunder within 60 days after the last day of the month in which Vungle received the corresponding payment from the Advertiser, provided that no check will be issued for any amount less than $50 U.S. If there are any payment fees from the receiving bank, immediate bank or from paypal, Developer will be responsible for these fees. All unpaid earnings will rollover to the next pay period. All payments will be made in U.S. dollars ($U.S.). Vungle may deduct from such payments any withholding, sales, value added, and other applicable taxes (other than its net income taxes) which Vungle is required by law to deduct. Developer is responsible for paying any other taxes, duties, or fees for which Developer is legally responsible.\n \n"
  },
  "authors": {
    "Vungle": "support@vungle.com"
  },
  "source": {
    "http": "https://s3.amazonaws.com/vvv-releases/iOS/vungle312.zip"
  },
  "platforms": {
    "ios": "6.0"
  },
  "requires_arc": true,
  "resources": "VungleSDK.embeddedframework/Resources/*.*",
  "vendored_frameworks": "VungleSDK.embeddedframework/VungleSDK.framework",
  "frameworks": [
    "AdSupport",
    "AudioToolbox",
    "AVFoundation",
    "CFNetwork",
    "CoreGraphics",
    "CoreMedia",
    "Foundation",
    "MediaPlayer",
    "QuartzCore",
    "StoreKit",
    "SystemConfiguration",
    "UIKit"
  ],
  "libraries": [
    "z",
    "sqlite3"
  ]
}
