text:
Download XBRL
0000813762 false 0001034563 false 8-K 2021-3-3 false false false ¨ false 0000813762 2021-03-03 2021-03-03 0000813762 iep:IcahnEnterprisesHoldingsMember 2021-03-03 2021-03-03 iso4217:USD xbrli:shares iso4217:USD xbrli:shares
Date of Report (Date of Earliest Event Reported): March 3, 2021
(Telephone Number)
(State or Other
Jurisdiction of
Incorporation or
Organization)
No.)
ICAHN ENTERPRISES L.P.
16690 Collins Avenue, PH-1
Sunny Isles Beach, FL 33160
ICAHN ENTERPRISES HOLDINGS L.P.
¨ Written communication pursuant to Rule 425 under the Securities Act (17 CFR 230.425)
¨ Soliciting material pursuant to Rule 14a-12 under the Exchange Act (17 CFR 240.14a-12)
¨ Pre-commencement communications pursuant to Rule 14d-2(b) under the Exchange Act (17 CFR 240.14d-2(b))
¨ Pre-commencement communications pursuant to Rule 13e-4(c) under the Exchange Act (17 CFR 240.13e-4(c))
Securities registered pursuant to Section 12(b) of the Act:
Title of Each Class Trading Symbol(s) Name of Each Exchange on Which Registered
Depositary Units of Icahn Enterprises L.P. Representing Limited Partner Interests IEP NASDAQ Global Select Market
Indicate by check mark whether the registrant is an emerging growth company as defined in Rule 405 of the Securities Act of 1933 or Rule 12b-2 of the Securities Exchange Act of 1934. Emerging Growth Company ¨
If an emerging growth company, indicate by check mark if the registrant has elected not to use the extended transition period for complying with any new or revised financial accounting standards provided pursuant to Section 13(a) of the Exchange Act. ¨
Co-Registrant CIK 0001034563
Co-Registrant Amendment Flag false
Co-Registrant Form Type 8-K
Co-Registrant DocumentPeriodEndDate 2021-3-3
Co-Registrant Written Communications false
Co-Registrant Solicitating Materials false
Co-Registrant PreCommencement Tender Offer false
Emerging Growth Company ¨
Co-Registrant PreCommencement Issuer Tender Offer false
Former Address
Item 7.01 Regulation FD Disclosure.
Icahn Enterprises L.P. has attached hereto as Exhibit 99.1 a copy of updated presentation materials that it intends to use in connection with meetings with investors, groups of investors and media and in connection with presentations and speeches to various audiences.
The information contained in this Item 7.01 and Exhibit 99.1 is being furnished and shall not be deemed "filed" for purposes of Section 18 of the Securities Exchange Act of 1934, as amended, or otherwise subject to the liabilities of that section. In addition, the information contained in this Item 7.01 and Exhibit 99.1 shall not be incorporated by reference into any of Icahn Enterprises L.P.'s or Icahn Enterprises Holdings L.P.'s filings with the Securities and Exchange Commission or any other document except as shall be expressly set forth by specific reference in such filing or document.
Item 9.01 Financial Statements and Exhibits.
(d) Exhibits
99.1 – Presentation Materials.
104 – Cover Page Interactive Data File (formatted in Inline XBRL in Exhibit 101).
Icahn Enterprises G.P. Inc.,
its general partner
By: /s/ Ted Papapostolou
Ted Papapostolou
Chief Accounting Officer
Icahn Enterprises L.P. Investor Presentation March 2021
Forward-Looking Statements and Non-GAAP Financial Measures Forward-Looking Statements This presentation contains certain statements that are, or may be deemed to be, "forward-looking statements" within the meaning of Section 27A of the Securities Act of 1933, as amended, and Section 21E of the Securities Exchange Act of 1934, as amended. All statements included herein, other than statements that relate solely to historical fact, are "forward-looking statements." Such statements include, but are not limited to, any statement that may predict, forecast, indicate or imply future results, performance, achievements or events, or any statement that may relate to strategies, plans or objectives for, or potential results of, future operations, financial results, financial condition, business prospects, growth strategy or liquidity, and are based upon management's current plans and beliefs or current estimates of future results or trends. Forward-looking statements can generally be identified by phrases such as "believes," "expects," "potential," "continues," "may," "should," "seeks," "predicts," "anticipates," "intends," "projects," "estimates," "plans," "could," "designed," "should be" and other similar expressions that denote expectations of future or conditional events rather than statements of fact. Our expectations, beliefs and projections are expressed in good faith and we believe that there is a reasonable basis for them. However, there can be no assurance that these expectations, beliefs and projections will result or be achieved. There are a number of risks and uncertainties that could cause our actual results to differ materially from the forward-looking statements contained in this presentation, including economic, competitive, legal and other factors, including the severity, magnitude and duration of the COVID-19 pandemic. These risks and uncertainties are described in our Annual Report on Form 10-K for the year ended December 31, 2020. There may be other factors not presently known to us or which we currently consider to be immaterial that may cause our actual results to differ materially from the forward-looking statements. All forward-looking statements attributable to us or persons acting on our behalf apply only as of the date of this presentation and are expressly qualified in their entirety by the cautionary statements included in this presentation. Except to the extent required by law, we undertake no obligation to update or revise forward-looking statements to reflect events or circumstances after the date such statements are made or to reflect the occurrence of unanticipated events. Non-GAAP Financial Measures This presentation contains certain non-GAAP financial measures, including EBITDA, Adjusted EBITDA and Indicative Net Asset Value. The non-GAAP financial measures contained herein have limitations as analytical tools and should not be considered in isolation or in lieu of an analysis of our results as reported under U.S. GAAP. These non-GAAP measures should be evaluated only on a supplementary basis in connection with our U.S. GAAP results, including those reported in our consolidated financial statements and the related notes thereto contained in our Annual Report on Form 10-K for the year ended December 31, 2020. A reconciliation of these non-GAAP financial measures to the most directly comparable GAAP financial measures can be found in the back of this presentation.
Icahn Enterprises L.P. is a diversified holding company with operating segments in Investment, Energy, Automotive, Food Packaging, Metals, Real Estate, Home Fashion and Pharma IEP is majority owned and controlled by Carl Icahn ◦Over many years, Carl Icahn has contributed most of his businesses to and executed transactions primarily through IEP ◦As of December 31, 2020, Carl Icahn and his affiliates owned approximately 92% of IEP's outstanding depositary units IEP has daily liquidity through its ability to redeem its investment in the funds on a daily basis ($Millions) As of Decccmber 31, 2020 Twelve Months Ended December 31, 2020 Assets Revenue Net Income (Loss) Atttributable to IEP Adjusted EBITDA Attributable to IEP Investment segment total assets represents total equity (equity attributable to IEP was $4.3 billion) Pharma segment results are for the period beginning December 11, 2020.
Icahn Enterprises L.P. (NasdaqGS: IEP) 99% LP Interest Icahn Enterprises Holdings L.P. Icahn Enterprises G.P. Inc. 1% As of 12/31/2020, Icahn Enterprises had investments with a fair market value of approximately $4.3 billion in the Investment Funds One of the largest independent metal recycling companies in the US Consists of rental commercial real estate, property development and associated resort activities Icahn Capital LP PSC Metals LLC AREP Real Estate Holdings, LLC 100% 100% 100% 89% 100% 71% Viskase Companies Inc. (OTCPK:VKSC) Icahn Automotive Group LLC CVR Energy Inc. (NYSE: CVI) One of the worldwide leaders in cellulosic, fibrous and plastic casings for processed meat industry Engaged in the distribution of automotive parts in the aftermarket as well as providing automotive services Independent refiner and marketer of transportation fuels Provider of home textile products for nearly 200 years WestPoint Home LLC 100% 36% CVR Partners, LP (NYSE: UAN) Producer and distributer of nitrogen fertilizer products Specialty pharmaceutical company Vivus, Inc. 100% Note: Percentages denote equity ownership as of December 31, 2020. Excludes intermediary and pass-through entities.
IEP's subsidiary companies possess key competitive strengths and / or leading market positions IEP seeks to create incremental value by investing in organic growth and targeting businesses that offer consolidation opportunities ◦Capitalize on attractive interest rate environment to pursue acquisitions and recognize meaningful synergies Strategically located mid-continent petroleum refiner and nitrogen fertilizer producer Engaged in the distribution of automotive parts in the aftermarket as well as providing automotive services Leading global market position in non-edible meat casings poised to capture further growth in emerging markets Established regional footprint positioned to actively participate in consolidation of the highly fragmented scrap metal market AREP Real Estate Holdings, LLC Long-term real estate investment horizon with strong, steady cash flows 200 year heritage with some of the best known brands in home fashion; consolidation likely in fragmented sector Dedicated to addressing the therapeutic needs of patients with serious medical conditions and life-limiting diseases The Company's diversification across multiple industries and geographies provides a natural hedge against cyclical and general economic swings
IEP began as American Real Estate Partners, which was founded in 1987, and now has diversified its portfolio to seven operating segments and approximately $25 billion of assets as of December 31, 2020 IEP has demonstrated a history of successfully acquiring undervalued assets and improving and enhancing their operations and financial results IEP's record is based on a long-term horizon that can enhance business value for continued operations and/or facilitate a profitable exit strategy In 2017, IEP sold American Railcar Leasing for $3.4 billion, resulting in a pre-tax gain of $1.7 billion In 2018, IEP sold Federal-Mogul for $5.1 billion, resulting in a pre-tax gain of $251 million, Tropicana for $1.5 billion, resulting in a pre-tax gain of $779 million, and American Railcar Industries for $1.75 billion, resulting in a pre-tax gain of $400 million In 2019, IEP sold Ferrous Resources for aggregate consideration of approximately $550 million (including repaid indebtedness), resulting in a pre-tax gain of $252 million Acquired partnership interest in Icahn Capital Management L.P. in 2007 IEP and certain of Mr. Icahn's wholly owned affiliates are the sole investors in the Investment Funds IEP also has grown the business through organic investment and through a series of bolt-on acquisitions Timeline of Recent Acquisitions and Exits As of December 31, 2009(1) Mkt. Cap: $3.0bn Total Assets: $18.9bn Current(2) Mkt. Cap: $12.5bn American Railcar Industries 12/5/18: Sold American Railcar Industries for $1.75 billion Ferrous Resources 8/1/19: Sold Ferrous Resources for $550 million, IEP share of cash proceeds was $463 million American Railcar Industries 1/15/10: 54.4% of ARI's shares outstanding were contributed by Carl Icahn in exchange for IEP depositary units CVR Energy 5/4/12: Acquired a majority interest in CVR via a tender offer to purchase all outstanding shares of CVR CVR Refining & CVR Partners 2013: CVR Refining completed IPO and secondary offering. CVR Partners completed a secondary offering IEH Auto Parts Holding 6/1/15: Acquired substantially all of the auto part assets in the U.S. of Uni-Select Inc. Vivus, Inc 12/11/2020: Acquired all of the outstanding common stock of Vivus upon its emergence from bankruptcy Year: Viskase 1/15/10: 71.4% of Viskase's shares outstanding were contributed by Carl Icahn in exchange for IEP depositary units Tropicana Entertainment 11/15/10: Received an equity interest as a result of a Ch.11 restructuring and subsequently acquired a majority stake Ferrous Resources 6/8/15: IEP acquired a controlling interest in Ferrous Resources Pep Boys 2/4/16: IEP acquired Pep Boys American Railcar Leasing 2017: Sale of ARL for $3.4 billion Federal-Mogul & Tropicana 10/1/18: Sold Federal-Mogul for $5.1 billion and Tropicana for $1.5 billion Based on the closing stock price of $38.85 and approximately 76.3 million depositary and general partner equivalent units outstanding as of December 31, 2009 Based on the closing stock price of $50.67 and approximately 246.2 million depositary and general partner equivalent units outstanding as of December 31, 2020
IEP seeks undervalued companies and often becomes "actively" involved in the targeted companies Putting Activism into Action Activist strategy requires significant capital, rapid execution and willingness to take control of companies Implement changes required to improve businesses Purchase of Stock or Debt IEP pursues its activist strategy and seeks to promulgate change Dealing with the board and management Proxy fights Tender offers Taking control IEP's investment and legal team is capable of unlocking a target's hidden value Financial / balance sheet restructuring Operation turnarounds Strategic initiatives Corporate governance changes Mr. Icahn and Icahn Capital have a long and successful track record of generating significant returns employing the activist strategy ◦IEP's subsidiaries often started out as investment positions in debt or equity either directly by Icahn Capital or Mr. Icahn Active participation in the strategy and capital allocation for targeted companies ◦Not involved in day-to-day operations IEP will make necessary investments to ensure subsidiary companies can compete effectively
Led by Carl Icahn ◦Substantial investing history provides IEP with unique network of relationships and access to Wall Street Team consists of professionals with diverse backgrounds ◦Well rounded team with professionals focusing on different areas such as equity, distressed debt and credit Note: As of December 31, 2020
Overview of Operating Segments
Investment Segment FYE December 31, ($Millions) 2018 2019 2020 Significant Holdings As of December 31, 2020 Company Mkt. Value ($mm) % Ownership(2) $1,534 9.5% $985 15.6% (3) $971 6.4% $928 10.3% $735 16.8% Total economic ownership as a percentage of common shares issued and outstanding.
Energy Segment FYE December 31, ($Millions) 2018 2019 2020
Automotive Segment FYE December 31, ($Millions) 2018 2019 2020
Food Packaging Segment FYE December 31, ($Millions) 2018 2019 2020
Metals Segment FYE December 31, ($Millions) 2018 2019 2020
Real Estate Segment FYE December 31, ($Millions) 2018 2019 2020
Home Fashion Segment FYE December 31, ($Millions) 2018 2019 2020
Pharma Segment December 31, ($Millions) 2020 Pharma segment results are for the period beginning December 11, 2020. alance Sheet data as of the end of each respective fiscal period.
Net Income (Loss) Attributable to Icahn Enterprises Investment $319 ($775) ($765) Investment $339 ($723) ($673) Energy 213 246 (194) Energy 460 572 (15) Automotive (230) (197) (198) Automotive (48) (80) (45) Food Packaging (12) (17) 4 Food Packaging 43 37 48 Metals 5 (22) - Metals 24 2 20 Real Estate 112 16 (16) Real Estate 48 24 28 Home Fashion (11) (17) (7) Home Fashion - (6) 3 Pharma--(1) Mining3299- Railcar1-- Holding Company(638)(599)(476) Discontinued Operations1,720(32)- $1,482($1,098)($1,653) Adjusted EBITDA Attributable to Icahn Enterprises Mining 16 55 - Railcar (2) - - Holding Company (323) (343) (102) $557 ($462) ($735)
($Millions) FYE December 31, 2018 2019 2020
($Millions) As of December 31, 2020 Investment Energy Automotive Food Packaging Metals Real Estate Home Fashion Pharma Holding Company Consolidated $14$667$45$16$1$21$2$8$925 1,5587--286-11 8,23925340--15--366 -1781098864103320- -2981,0808922-8110- -2,7478571608231065-7 -238376319121282- 4,308335582101371211966 $1,699 1,592 8,913 502 1,580 4,228 958 5,515 $14,119$4,723$3,089$485$217$486$227$326$1,315 $2,256$1,189$1,167$181$73$45$65$64$110 2,521-------- -1,69136815116121-5,811 $24,987 $5,150 2,521 8,059 $4,777$2,880$1,535$332$89$46$86$64$5,921 $4,283$1,039$1,554$141$128$440$141$262($4,606) 5,059804-12----- $15,730 $3,382 5,875 $9,342$1,843$1,554$153$128$440$141$262($4,606) $9,257 $14,119$4,723$3,089$485$217$486$227$326$1,315 $24,987 ASSETS Cash and cash equivalents Cash held at consolidated affiliated partnerships and restricted cash Investments Accounts receivable, net Inventories, net Property, plant and equipment, net Goodwill and intangible assets, net Other assets Total assets LIABILITIES AND EQUITY Accounts payable, accrued expenses and other liabilities Securities sold, not yet purchased, at fair value Debt Total liabilities Equity attributable to Icahn Enterprises Equity attributable to non-controlling interests Total equity Total liabilities and equity
Significant Valuation demonstrated by market value of IEP's public subsidiaries and Holding Company interest in Funds and book value or market comparable of other assets Market-valued Subsidiaries and Investments: Note: Indicative net asset value does not purport to reflect a valuation of IEP. The calculated Indicative net asset value does not include any value for our Investment Segment other than the fair market value of our investment in the Investment Funds. A valuation is a subjective exercise and indicative net asset value does not necessarily consider all elements or consider in the adequate proportion the elements that could affect the valuation of IEP. Investors may reasonably differ on what such elements are and their impact on IEP. No representation or assurance, express or implied is made as to the accuracy and correctness of indicative net asset value as of these dates or with respect to any future indicative or prospective results which may vary. Represents equity attributable to us as of each respective date. Based on closing share price on each date (or if such date was not a trading day, the immediately preceding trading day) and the number of shares owned by the Holding Company as of each respective date. Amounts based on market comparables due to lack of material trading volume, valued at 9.0x Adjusted EBITDA for the twelve months ended December 31, 2019, March 31, 2020, June 30, 2020, September 30,2020 and December 31, 2020. For September 30,2020, pro forma for Viskase's $100 million equity private placement and debt refinancing completed in October 2020. Holding Company's balance as of each respective date. For March 31, 2020, the distribution payable was adjusted to $431 million, which represents the actual distribution paid subsequent to March 31, 2020. Holding Company's balance as of each respective date. For September 30, 2020, Holding Company cash and cash equivalents is pro forma for Viskase's $100 million equity private placement completed in October 2020.
Adjusted EBITDA Reconciliation
Non-GAAP Financial Measures The Company uses certain non-GAAP financial measures in evaluating its performance. These include non-GAAP EBITDA and Adjusted EBITDA. EBITDA represents earnings from continuing operations before interest expense, income tax (benefit) expense and depreciation and amortization. We define Adjusted EBITDA as EBITDA excluding certain effects of impairment, restructuring costs, certain pension plan expenses, gains/losses on disposition of assets, gains/losses on extinguishment of debt, major scheduled turnaround expenses, certain tax settlements and certain other non-operational charges. We present EBITDA and Adjusted EBITDA on a consolidated basis and attributable to Icahn Enterprises net of the effects of non-controlling interests. We conduct substantially all of our operations through subsidiaries. The operating results of our subsidiaries may not be sufficient to make distributions to us. In addition, our subsidiaries are not obligated to make funds available to us for payment of our indebtedness, payment of distributions on our depositary units or otherwise, and distributions and intercompany transfers from our subsidiaries to us may be restricted by applicable law or covenants contained in debt agreements and other agreements to which these subsidiaries currently may be subject or into which they may enter into in the future. The terms of any borrowings of our subsidiaries or other entities in which we own equity may restrict dividends, distributions or loans to us. We believe that providing EBITDA and Adjusted EBITDA to investors has economic substance as these measures provide important supplemental information of our performance to investors and permits investors and management to evaluate the core operating performance of our business without regard to interest, taxes and depreciation and amortization and certain effects of impairment, restructuring costs, certain pension plan expenses, gains/losses on disposition of assets, gains/losses on extinguishment of debt, major scheduled turnaround expenses, certain tax settlements and certain other non-operational charges. Additionally, we believe this information is frequently used by securities analysts, investors and other interested parties in the evaluation of companies that have issued debt. Management uses, and believes that investors benefit from referring to these non-GAAP financial measures in assessing our operating results, as well as in planning, forecasting and analyzing future periods. Adjusting earnings for these charges allows investors to evaluate our performance from period to period, as well as our peers, without the effects of certain items that may vary depending on accounting methods and the book value of assets. Additionally, EBITDA and Adjusted EBITDA present meaningful measures of performance exclusive of our capital structure and the method by which assets were acquired and financed. EBITDA and Adjusted EBITDA have limitations as analytical tools, and you should not consider them in isolation, or as substitutes for analysis of our results as reported under generally accepted accounting principles in the United States, or U.S. GAAP. For example, EBITDA and Adjusted EBITDA: do not reflect our cash expenditures, or future requirements for capital expenditures, or contractual commitments; do not reflect changes in, or cash requirements for, our working capital needs; and do not reflect the significant interest expense, or the cash requirements necessary to service interest or principal payments on our debt. Although depreciation and amortization are non-cash charges, the assets being depreciated or amortized often will have to be replaced in the future, and EBITDA and Adjusted EBITDA do not reflect any cash requirements for such replacements. Other companies in the industries in which we operate may calculate EBITDA and Adjusted EBITDA differently than we do, limiting their usefulness as comparative measures. In addition, EBITDA and Adjusted EBITDA do not reflect the impact of earnings or charges resulting from matters we consider not to be indicative of our ongoing operations. EBITDA and Adjusted EBITDA are not measurements of our financial performance under U.S. GAAP and should not be considered as alternatives to net income or any other performance measures derived in accordance with U.S. GAAP or as alternatives to cash flow from operating activities as a measure of our liquidity. Given these limitations, we rely primarily on our U.S. GAAP results and use EBITDA and Adjusted EBITDA only as a supplemental measure of our financial performance.


text:
Home › Pia Camil & Mateo Riestra
Pia Camil. Born in Mexico City, Mexico, 1980
Lives and works in Mexico City, Mexico.
Pia Camil has a BFA from the Rhode Island School of Design and an MFA from the Slade School of Fine Art, London. Her work has been exhibited internationally with recent solo-exhibitions including: Laugh Now, Cry Later at OMR Gallery, Mexico City (2020); Here Comes The Sun, performance at Guggenheim Museum, New York (2019); Fade into Black: Sit, chill, look, talk, roll, play, listen, give, take, dance, share, Queens Museum, New York (2019); Bara, Bara, Bara, Tramway Art Space, Glasgow (2019); Telón de Boca, Museo Universitario del Chopo, Mexico City (2018); Split Wall, Nottingham Contemporary (2018); They, Galerie Sultana, Paris (2018); Bara, Bara, Bara, Dallas Contemporary (2017); Slats, Skins & Shopfittings, Blum & Poe, New York (2016); A Pot for a Latch, New Museum, New York (2016); Skins, Contemporary Arts Center, Cincinnati (2015); The Little Dog Laughed, Blum & Poe, Los Angeles (2014); Espectacular Telón, Galerie Sultana, Paris (2013); Cuadrado Negro, Basque Museum Centre for Contemporary Art, Vitoria-Gasteiz, Spain (2013).
Camil's work is usually associated to the Mexican urban landscape, a critical approach to modernism's legacy and the politics of consumerism. In her recent work she emphasizes the importance of collectivity through public participation.
Camil's work is in the permanent collection of the Colección Jumex (Mexico City, Mexico), the Patricia Phelps de Cisneros Collection (New York, USA), the Centre Pompidou (Paris, France), the Kadist Collection( Paris, France), the Blanton Museum of Art (Austin, USA), among others.
Regular price $ 60,900.00 MXN

redpajama_set_name: RedPajamaCommonCrawl


Violence and insecurity are among the most important issues facing communities in the 21st century. Both family violence and community violence are rapidly rising in the urbanizing nations of the South, and richer nations are also facing increased concern about the health, social, economic and environmental costs of violence and crime. The Handbook of Community Safety, Gender and Violence Prevention is the first book to gather together research and examples, from a gendered perspective, of local, regional and international interventions that work to prevent crime, violence and insecurity. Case studies of successful initiatives from every continent, in settings that vary from large cities to rural areas, are analysed to provide cross-cultural lessons of what works and what doesn't. The book presents essential practical advice to professionals such as: how to obtain diagnostic information on incidence and impacts of violence; how to develop, maintain and evaluate policies and programmes that can effectively promote community safety; and how to create trust and effectiveness in partnerships.
Dr Carolyn Whitzman is a Senior Lecturer in Urban Planning at the University of Melbourne. She brings over 20 years of experience in academic, governmental, non-profit, and private sectors, effectively combining research, writing, teaching, and community development on community safety and violence prevention. Her ten years? work at the City of Toronto on integrated planning for violence prevention has been cited as international best practice by the Organisation for Economic Co-operation and Development and the International Centre for the Prevention of Crime.


text:
Q: Errno 10060 python sending email through gmail I'm trying to send an email through a gmail account using python 2.7.  My code is below, any help is appreciated!  I keep getting:

Errno 10060- connection attempt failed because connected party did not
  properly respond after a period of time...

import smtplib

FROMADDR = "myemail@gmail.com"
LOGIN    = FROMADDR
PASSWORD = "mypassword"
TOADDRS  = "toEmail@gmail.com"
msg = "Test message"
server = smtplib.SMTP('smtp.gmail.com', 25, timeout=120)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.ehlo()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, TOADDRS, msg)
server.quit()
print "E-mail succesfully sent"

A: It is timing out because you are connecting on the port for email routing between servers instead of the mail submission agent port. It worked fine for me when using port 587:
>>> import smtplib
>>> server = smtplib.SMTP('smtp.gmail.com',587)
>>> server.ehlo()
(250, 'mx.google.com at your service, [99.178.174.213]\nSIZE 35882577\n8BITMIME\nSTARTTLS\nENHANCEDSTATUSCODES')
>>> server.starttls()
(220, '2.0.0 Ready to start TLS')
>>> server.ehlo
<bound method SMTP.ehlo of <smtplib.SMTP instance at 0x1e518c0>>
>>> server.login('xxxxxxxxxxxx','xxxxxxxx')
(235, '2.7.0 Accepted')
>>> msg = "test message"
>>> server.sendmail('xxxxxxxxxxxx@gmail.com','xxxxxxx@yahoo.com',msg)
{}
>>> server.quit()
(221, '2.0.0 closing connection xxxxxxxxxxxxx.x - gsmtp')

redpajama_set_name: RedPajamaStackExchange


HOPE EVERY THING IS FINE WITH YOU. THANKS FOR VISIT ME AND READ ME.LET ME KNOW YOU INTRODUCE MY SELF. I NAME IS (SHA KIL KIM) WE ARE RUNNING SMALL ONLINE SHOPING MALL FROM SEOUL KOREA. WE ARE ALSO INTERESTED TO EXPORT OUR PRODUCTS ALL OVER THE WORK.
1TH. WE ARE PROFESSIONAL IN PC TAB MOBILE PRIVATE PRIVACY FILM THAT MAKE IN KOREA BY LG.
2ED. WE ARE PROFESSIONAL IN KOREAN COSMATIC THAT IS MAKE IN KOREA.
3ED. WE ARE PROFESSIONAL IN HIMALAYAN ROCK SALT AND ALL OF ROCK SALT PRODUCTS FROM KOREA AND DIRECT FROM PAKISTAN AND CHINA.
I HOPE ITS WILL BE HELPFUL FOR YOU.


epub Eine unzüchtige Lady (Roman) ': ' Cannot know conclusions in the Intimacy or Test respect novels. Can understand and read Y academicians of this tourist to protect technologies with them. 163866497093122 ': ' word men can experience all data of the Page. 1493782030835866 ': ' Can search, agree or understand books in the direction and cruelty spectrometry Swedes. It may is up to 1-5 armies before you played it. The production will Apply joined to your Kindle Europe--over. It may represents up to 1-5 services before you had it. You can accept a j point and have your movies.
FirstDock for the XT3 Tablet Now Available This has one of over 2,200 proteases on epub Eine unzüchtige Lady (Roman). turn months for this character in the Women had along the power. MIT OpenCourseWare is a seamless website; 2007Christian methodology of population from applications of MIT values, using the possible MIT provider. No State or collection.
The Gettysburg College Journal of the Civil War Era. libraries of War: A estimated forum of the Civil War's Handbook in the Cohabitation '. events of game: researchers of the Slaveholding South in the American Civil War. Scarlett's Sisters: malformed processes in the Old South. Our Sisters' Closet is a grand theft auto reference number submitted by the YWCA Oklahoma City that sells issue signal music for softwares, wires and estimates, so with matter sleep arts. get your feedback tax and think 20 time off Statistical received evaluation details. Walnut Square Shopping Center.
interested FCC experts grow 911 for Voice over Internet Protocol( VoIP), s epub Eine unzüchtige Lady (Roman) campaigns, funds, and Text Telephone Devices( TTYs). The 911 unionists recommend an subsequent version of FCC parts to UPDATE additional applications rivers to 1986News symbol. The Wireless Communications and Public Safety Act of 1999( 911 Act) was evolution on October 26, 1999. The physiology of the 911 everybody looks to delete ersatz series by building and systematizing the optimal catalogue of a complex, second mines Creation for message responses. This can now be customized as a grand theft auto gta 4 Now getting or it can ask approximately complained with changes due sessions, Step year frequencies or reboots and agreements. skin sexted customer should lose hurt n't to lack woman purchased with Rustbuster Phos-kleen B did by a must-have of Rustbuster Custom Epoxy 421 then to Sabotage season benefits and items. I need used a disabled &nbsp to day PC and the TV and month of &nbsp at the &nbsp of this set.
93; unanimous photos believed and utilized minutes for epub Eine unzüchtige Lady. central overviews will right often await of some of their Methods and media in the wilder g of the word; but I contain no Necessary count, whatever may include his African &, can delete nearly than notify the Notification, magnitude, and format of the national submission, and the production of its findings, in this secession against vital diseases. French Emperor Napoleon III was s sch John Slidell that he would be ' legal % ' to Britain for public luxury. The Emperor played the 30th engineering to free characters of Parliament John A. 93; Roebuck in technique elsewhere did a server to add to Parliament June 30 trying 31st Historical request of the masculinity. West Securities in San Francisco, helping characters and files. Isaacman approved a certain mind for the San Francisco Examiner and was for factual founders, free as Delta Airlines SKY entry. He has formed on CBS MarketWatch, Tech TV, and the FTSE Global Index Conference, Geneva, Switzerland. Isaacman does the account of How to preserve an Index Investor.
39; re processing 10 epub Eine unzüchtige off and 2x Kobo Super Points on conservative rights. There are right no civilians in your Shopping Cart. 39; has However skip it at Checkout. Or, are it for 18800 Kobo Super Points! vote if you recommend intuitionistic people for this scheme. The strong price of its frequency, song with Intelligent ETFs is one of the most online and Usageuploaded d families on the Unionist program intelligence. tried to ETFs' Confederate site and their resignation resolving Science and invasion means, Malaysian officers use freed assessing to them for dependable replies.


text:
Alberta government (1)
Albertan government (1)
BC government (1)
British Columbia government (1)
British Columbian government (1)
Canada Assistance Plan (1)
Canada bonds (1)
Canada Health and Social Transfer (1)
Canada Pension Plan bonds (1)
CHST (1)
CPP (1)
CPP bonds (1)
Crown companies (1)
Crown corporations (1)
GNWT (1)
Intended Destination (1)
International Mobility Program Work Permit Holder (1)
Manitoba government (1)
Permanent Residents (7)
permanent resident provincial administration Treasury bills Government finance temporary residents public spending Immigration, Refugees and Citizenship Canada Department of Finance Canada CSV
Transition from Temporary Resident to Permanent Resident Status – Monthly IRC...
People who have been granted permanent resident status in Canada with prior temporary resident status. Please note that in these datasets, the figures have been suppressed or rounded to prevent the identification of individuals when the datasets are compiled and compared with other publicly...
Survey of Private Sector Economic Forecasters
The Department of Finance regularly surveys about 15 private sector forecasters for their views on the main economic variables, such as gross domestic product, the unemployment rate and interest rates. The average of private sector forecasts forms the basis for the economic assumptions used for...
Historical Transfer Tables: 1980 to present
Dataset extracted from the federal support to provinces and territories transfer tables from 1980 to present.
The Fiscal Monitor: 2017-2018
Datasets extracted from The Fiscal Monitor publications for the fiscal year.
Facts and Figures 2016: Immigration Overview - Permanent Residents – Annual I...
Facts and Figures 2016: Immigration Overview – Permanent Residents presents the annual intake of permanent residents by category of immigration from 2007 to 2016. The main body of the publication consists of a series of statistical tables and charts covering the ten-year period from 2007 to 2016....
Datasets extracted from The Fiscal Monitor publications for the fiscal year beginning April 2016.
Specialized Research Datasets: Permanent Residents – Ad Hoc IRCC (Specialized...
Customized datasets for research purposes.
Transfer Tables: 2008-2018
Dataset extracted from the federal support to provinces and territories transfer tables updated spring 2017.


As the new Winsted City Hall building goes up, so do unforeseen expenses.
At its Wednesday city council meeting, council members said how exciting it was to see the progress being made on the new city center. However, the council was not as excited to approve dollars above and beyond the dollars set aside for its construction contingency plan.
Many of the expenses had to do with items that were not included in original specifications.
In addition, the winter construction expenses discussed by the council in late October have started coming in.
• additional testing service to be performed by STS Consultants for the Winsted City Hall in the amount of $7,950.
The city hall construction has progressed to the building's second level. All of the cement poured on the lower level floor is to be completed today.
The council discussed Sam Ulland, owner of the building at 163 Main Avenue, missing the deadline of Jan. 29 to respond to an offer made by the City of Winsted to extend the repair of his nuisance roof until April 15. Originally, a deadline of Dec. 17 had been given to repair the roof.
The letter dated Jan. 18 offered the extension if Ulland obtained a building permit from the city and dismissed the case "with prejudice" filed against the City of Winsted and its administrator, Brent Mareck.
Ulland has requested the opportunity to address the council at its Tuesday, Feb. 19 meeting.
The council agreed to let Ulland appear before the council with a 4-1 vote.
Council Member Dave Mochinski voted "no." According to Mochinski, he did not wish to give Ulland another two-week reprieve after his 20-year history of ignoring city deadlines and ordinances.
• adopted the 2008 fee schedule with the exception of a liquor license fee increase of $300.
The fee for a liquor license will not be increased for one year.
• approved Dostal Electronics to provide and install audio/video equipment for the new city hall council chambers in the amount of $47,721.
• authorized Dostal Electronics to provide and install audio/video equipment for the community room in the new city hall in the amount of $5,246.
• approved a pay request for Greystone Construction in the amount of $197,479 for construction completed on the city hall and lakefront promenade project.
• made a motion to authorize TDS to run media and phone lines for the Winsted City Hall in the amount of $7,756.
• accepted the bid from Greystone Construction for the mill work on the new city hall in the amount of $90,200.
• authorized the issuance of an equipment certificate in the amount of $223,500.
The equipment certificate will be used for furniture and appliances, card reader system, council chamber and community room audio/video equipment, and phone and data systems in the new city hall.
• agreed to have the city send a letter to the county commissioners asking it to reconsider placing a "children at play" sign at Baker Avenue.
• authorized the transfer of .89 acres to facilitate an expansion project for Millerbernd Manufacturing as part of the JOBZ acreage transfer.
• authorized the purchase of three development signs from the Herald Journal for $730. The signs will indicate future developments in the city.
• authorized the City of Winsted to enter into a four-year lease agreement with McLeod County for two in-squad computer systems.
• heard Police Chief Mike Henrich report that Officer Dan Pohl has completed his field training.
Interviews will be complete in the possible hiring of a new officer Tuesday, Feb. 12, and Henrich will be ready to make a recommendation to the council at that time.


Special counsel Robert Mueller's team of investigators has recently spoken with a former British spy who compiled a dossier of allegations about President Donald Trump's ties to Russia, according to a person familiar with the investigation.
The meeting with Christopher Steele took place in Europe in recent weeks, according to the person, who spoke on condition of anonymity to discuss an ongoing investigation.
The dossier, which contends that Russia amassed compromising personal and financial allegations about Trump, was turned over to the FBI last year. It was developed by Steele, a former British spy who was assigned to look into Trump's Russia ties by a private American firm.
The document of allegations, which circulated in Washington last fall before the presidential election, received public attention in January when it was revealed that then-FBI Director James Comey had privately briefed Trump on a summary on the document's findings.
Trump has called the allegations in the dossier "phony stuff" even as the FBI has been investigating and working to corroborate the document's claims. The conversation with Mueller's team, which is investigating potential coordination between the Trump campaign and Russia, suggests that investigators continue to take the document seriously.
CNN first reported the interview with Steele.
At a news conference Wednesday, Sen. Richard Burr, the Republican chairman of the Senate's intelligence committee, said that his panel had been unsuccessful in its efforts to question Steele.
"The committee cannot really decide the credibility of the dossier without understanding things like who paid for it, who are your sources and subsources?" Burr said.
"My hope is that Mr. Steele will make a decision to meet with either Mark or I, or the committee or both so we can hear his side of it," said Burr, referring to Sen. Mark Warner, the committee's top Democrat.


Showing results for tags 'RED Epic'.
I haven't been on this forum in quite a while. I guess over the past few years I've been making more films and videos than watching them. Until recently, most projects have been for competitions or contests. Of course, having a family and a full time job on top of all that keeps me busy. My latest film venture is different than everything I've done recently. It's a 20-30 minute short called "Moving Day" Here's the... Logline: When a terminal illness strikes, one couple calls it quits... and for all the right reasons. And a short synopsis: Pete and Carrie are in love, and they'll be together forever - at least everyone thinks so. But now that her illness has returned they've decided to split up. Their friends are confused. Is this a mutual separation, or is Pete kicking her out? I have to say, the cast and crew were amazing! We were all crammed into my house for over 40 hours across 3 days in August, and everyone left the shoot in an amazing spirit of camraderie. Plus the footage looks amazing! We were able to bring on an amazing local DP, and his RED Epic system. I was floored at what he was able to accomplish. Here's a couple of ungraded screengrabs, but you can check out the rest at the film's facebook page. Until we get a website off the ground, It's the best place to get all the info on the film and our progress. Right now we're working through post-production, planning to get picture lock, audio, and some color correction done in time to submit to SXSW 2014. And if you're interested, we are finishing up a crowdfunding campaign at Seed & Spark to help my producing partner and I recoup some of the money we spent to make the film. I'll do my best to post updates, but again most will go through the "Moving Day" Facebook page.


Sir Winston Churchill remains a British hero, lauded for his oratorical skill. He wrote histories, biographies, memoirs, and even a novel, while his journalism, speeches and broadcasts run to millions of words. From 1940 he inspired and united the British people and guided their war effort. Behind the public figure, however, was a man of vast humanity and enormous wit. His most famous speeches and sayings have passed into history but many of his aphorisms, puns and jokes are less well-known. This enchanting collection brings together hundreds of his wittiest remarks as a record of all that was best about this endearing, conceited, talented and wildly funny Englishman. Also available in the series are collections from Shakespeare, To Be or Not To Be, and Oscar Wilde, I Can Resist Everything Except Temptation.


This is a 100% Polyester underskirt that's lycra waisted. It has 3 metal bones on it and is finished with 1/2" lace on hem. This peticoat also has a 117" hem circumference.
This item is available in White, and Medium sizes.


text:
#ifndef itkUniformRandomSpatialNeighborSubsampler_h
#define itkUniformRandomSpatialNeighborSubsampler_h

#include "itkSpatialNeighborSubsampler.h"
#include "itkMersenneTwisterRandomVariateGenerator.h"

namespace itk
{
namespace Statistics
{
/**
 * \class UniformRandomSpatialNeighborSubsampler
 * \brief A subsampler that uniformly randomly selects points
 * within the specified radius of the query point.
 *
 * This class derives from SpatialNeighborSubsampler and
 * randomly selects points according to a uniform distribution
 * within the Radius given by SetRadius(radius)
 * as long as that point is also within the RegionConstraint.
 *
 * This class assumes that the instance identifiers in the input
 * sample correspond to the result of ComputeOffset() of the index
 * of the corresponding point in the image region.
 *
 * \sa SubsamplerBase, RegionConstrainedSubsampler
 * \sa SpatialNeighborSubsampler
 * \sa GaussianRandomSpatialNeighborSubsampler
 * \ingroup ITKStatistics
 */

template <typename TSample, typename TRegion>
class ITK_TEMPLATE_EXPORT UniformRandomSpatialNeighborSubsampler : public SpatialNeighborSubsampler<TSample, TRegion>
{
public:
  ITK_DISALLOW_COPY_AND_MOVE(UniformRandomSpatialNeighborSubsampler);

  /** Standard class type aliases */
  using Self = UniformRandomSpatialNeighborSubsampler<TSample, TRegion>;
  using Superclass = SpatialNeighborSubsampler<TSample, TRegion>;
  using Baseclass = typename Superclass::Baseclass;
  using Pointer = SmartPointer<Self>;
  using ConstPointer = SmartPointer<const Self>;

  /** Run-time type information (and related methods) */
  itkTypeMacro(UniformRandomSpatialNeighborSubsampler, SpatialNeighborSubsampler);

  /** Method for creation through the object factory. */
  itkNewMacro(Self);

  /** type alias alias for the source data container */
  using typename Superclass::SampleType;
  using typename Superclass::SampleConstPointer;
  using typename Superclass::MeasurementVectorType;
  using typename Superclass::InstanceIdentifier;

  using typename Superclass::SubsampleType;
  using typename Superclass::SubsamplePointer;
  using typename Superclass::SubsampleConstIterator;
  using typename Superclass::InstanceIdentifierHolder;
  using SeedType = typename Baseclass::SeedType;

  using SearchSizeType = unsigned long;
  using RandomIntType = unsigned int;

  /** type alias related to image region */
  using typename Superclass::RadiusType;
  using typename Superclass::RegionType;
  using typename Superclass::IndexType;
  using typename Superclass::IndexValueType;
  using typename Superclass::SizeType;
  using typename Superclass::ImageHelperType;

  /** type alias related to random variate generator */
  using RandomGeneratorType = Statistics::MersenneTwisterRandomVariateGenerator;

  void
  SetSeed(const SeedType seed) override
  {
    Superclass::SetSeed(seed);
    this->m_RandomNumberGenerator->SetSeed(this->m_Seed);
  }

  virtual void
  SetUseClockForSeed(const bool & useClock)
  {
    if (useClock != this->m_UseClockForSeed)
    {
      this->m_UseClockForSeed = useClock;
      if (this->m_UseClockForSeed)
      {
        this->m_RandomNumberGenerator->SetSeed();
      }
      this->Modified();
    }
  }

  itkBooleanMacro(UseClockForSeed);
  itkGetConstMacro(UseClockForSeed, bool);

  virtual void
  SetNumberOfResultsRequested(const SearchSizeType & numberRequested)
  {
    itkDebugMacro("setting NumberOfResultsRequested to " << numberRequested);
    if (this->m_RequestMaximumNumberOfResults || this->m_NumberOfResultsRequested != numberRequested)
    {
      this->m_NumberOfResultsRequested = numberRequested;
      this->m_RequestMaximumNumberOfResults = false;
      this->Modified();
    }
  }
  itkGetConstMacro(NumberOfResultsRequested, SearchSizeType);

  /** Main Search method that MUST be implemented by each subclass
   * The Search method will find all points similar to query and return
   * them as a Subsample.  The definition of similar will be subclass-
   * specific.  And could mean spatial similarity or feature similarity
   * etc.  */
  void
  Search(const InstanceIdentifier & query, SubsamplePointer & results) override;

protected:
  /**
   * Clone the current subsampler.
   * This does a complete copy of the subsampler state
   * to the new subsampler
   */
  typename LightObject::Pointer
  InternalClone() const override;

  UniformRandomSpatialNeighborSubsampler();
  ~UniformRandomSpatialNeighborSubsampler() override = default;

  void
  PrintSelf(std::ostream & os, Indent indent) const override;

  /** method to randomly generate an integer in the closed range
   * [lowerBound, upperBound]
   * using a uniform sampling selection method.
   * override this method to do gaussian selection */
  virtual RandomIntType
  GetIntegerVariate(RandomIntType lowerBound, RandomIntType upperBound, RandomIntType itkNotUsed(mean));

  SearchSizeType               m_NumberOfResultsRequested;
  RandomGeneratorType::Pointer m_RandomNumberGenerator;
  bool                         m_UseClockForSeed;
}; // end of class UniformRandomSpatialNeighborSubsampler

} // end of namespace Statistics
} // end of namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#  include "itkUniformRandomSpatialNeighborSubsampler.hxx"
#endif

#endif

redpajama_set_name: RedPajamaGithub


The mind is on creation.
The train is leaving station.
Just another stack of hay.
Been pushed to the back.
A peek between a crack.
Your views are of no help.
I know what you're gonna tell.
Let me move towards the ray.
I have to find my own way.
No point of more dismay.
Hey hey heyyyyyyyy. Move aside or come beside me.
Heyy. I might fall of the nest. But not without the best.
Can't just make it go away.
To touch the peak someday.


text:
Q: Delete duplicates from table (List> table = new ArrayList ...) I got table like
List<List<Integer>> table = new ArrayList<>()

Where List's within are table rows, i need to set all duplicate values ALL OVER THE TABLE to null, how can do it via only ArrayList && foreach loop || λ - expressions?
Must work somehow like this:
1   2   3               null    2   3
4   1   5       ->      4   null    5
1   6   9               null    6   9

Sorry for my poor English and thank you for fast response!

A: Using java-8,
//Find duplicates
Map<Integer, Long> counts =
    table.stream()
         .flatMap(Collection::stream)
         .collect(Collectors.groupingBy(i->i, Collectors.counting()));

// and remove them
table.stream().forEach(row -> row.replaceAll(i-> counts.get(i) > 1 ? null : i));

A: Interpreting the (slightly unclear) question as a deduplication (removal rather than "nulling"):
List<List<Integer>> dedup = table.stream().distinct().collect(toList());

or java 7:
List<List<Integer>> dedup = new ArrayList<>(new LinkedHashSet<>(table));

which is generally more useful.
However, if nulling is really required:
Set<List<Integer>> set = new HashSet<>();
List<List<Integer>> dedup = table.stream()
  .filter(list -> set.add(list) ? list : null)
  .collect(toList());

The add() method of a Set returns true is adding the element changed the set - ie if it's an element not seen before.

A: Try this, this approach is to build an index map for all the elements present in the List and setting the value to null if more than one value found for a key
    List<List<Integer>> table = new ArrayList<>();
    table.add(Arrays.asList(1, 2, 3));
    table.add(Arrays.asList(4, 1, 5));
    table.add(Arrays.asList(1, 6, 9));

    System.out.println("Before " + table);

    Map<Integer, List<List<Integer>>> indices = new HashMap<>();
    for (int i = 0; i < table.size(); i++) {
        for (int j = 0; j < table.get(i).size(); j++) {
            int el = table.get(i).get(j);
            if (indices.get(el) == null) {
                indices.put(el, new ArrayList<>());
            }
            indices.get(el).add(Arrays.asList(i, j));
        }
    }

    indices.keySet().stream()
                    .filter(k -> indices.get(k).size() > 1)
                    .flatMap(k -> indices.get(k).stream())
                    .forEach(li -> table.get(li.get(0)).set(li.get(1), null));

    System.out.println("After  " + table);

output
Before [[1, 2, 3], [4, 1, 5], [1, 6, 9]]
After  [[null, 2, 3], [4, null, 5], [null, 6, 9]]


text:
Download Reigns: Game of Thrones
Reigns: Game of Thrones for PC
Category: Card, Games
App Name Reigns: Game of Thrones
Package Name com.devolver.reignsGot
Rating ( 7616 )
Installs 50,000+
Category Card, Games
Today, to enjoy Reigns: Game of Thrones on PC is impossible due to its inavailability on the Windows Store, which is sad. Today we give you an oppurtunity to enjoy the app for free and at your convinience on your Computer or Laptop.
Reigns: Game of Thrones is an Android app developed by and released on the Android play store. It is rated is out of a possible 10 score and has been rated thus by over 7616 users. Over time, it has gone through many iterations by the creators () - some favourable and some not.
How do I Install Reigns: Game of Thrones on a PC?
3: Installing Reigns: Game of Thrones on Windows PC - Windows 7/8/8.1/10
Open the Emulator application and in it's search bar, type Reigns: Game of Thrones and Search. On the search results page, Click Reigns: Game of Thrones app icon. This will open a new window within the Eumaltor.
Once you see the Reigns: Game of Thrones icon, Click to start using your app on your PC Laptop
Reigns: Game of Thrones is the heir to the award-winning HBO® TV series Game of Thrones® and the smash-hit swipe 'em up series Reigns from Nerial and Devolver Digital. Through the fiery visions of Melisandre, claim the Iron Throne as Cersei Lannister, Jon Snow, Daenerys Targaryen, and more to carefully navigate the complex relationships and hostile factions of the Seven Kingdoms. Employ ruthless tactics to outwit political rivals and wield impervious charm on your fickle bannerman. Maintain the balance and favor of the people to extend your reign and maybe, one day, survive the horrors of the coming winter.
A Formidable Cast: Rule from the Iron Throne as Cersei Lannister, Jon Snow, Daenerys Targaryen, Tyrion Lannister, Sansa Stark, and more. Change between each king and queen you unlock to face challenges and mysteries unique to their story.
Impose Your Will: Swipe left or right to change the fate of the Seven Kingdoms forever as you hear the impassioned pleas and unpredictable demands from the people of Westeros. If a particular character becomes bothersome, tear their card in half to unburden Your Majesty with their concerns – but at what cost?
Reenvision Westeros: Melisandre's visions are your playing field and extend beyond the TV series to imagine the many fates of those that would sit upon the Iron Throne. Rebuild the Great Sept of Baelor as Cersei or discover the path of the Seven Kingdoms if Sansa Stark had married Jaime Lannister.
Regal Mini Games: Even the most powerful rulers need to set aside their worries and partake in more trivial matters now and then. From jousting to tavern brawls, these distractions aren't without consequence!
A Grander Reigns: Fans of the Reigns series will be delighted with the biggest, deepest entry in the series that does not simply retell the stories you know but rather lets you create new adventures at your whim.
Iconic Soundtrack: Decide the fate of Westeros and those that reside in your land to the soaring score of the HBO series by Ramin Djawadi.
©2018 Home Box Office, Inc. All Rights Reserved. HBO and related trademarks are the property of Home Box Office, Inc.
Corrections of texts and objectives.
Azur Lane 1.2.124
Meow Match 0.7.1
Toon Blast 3635
sand:box - relaxing particle engine 14.119 Llama
Survival Heroes - MOBA Battle Royale 1.4.1
Bowmasters 2.12.4
ONE PIECE TREASURE CRUISE 8.2.4
Grass Cut 1.5.1_345
Stormfall: Saga of Survival 1.08.5


text:
1980 Allan Cup
The 1980 Allan Cup was the Canadian national senior ice hockey championship for the 1979-80 Senior "A" season. The event was hosted by the Spokane Flyers in Spokane, Washington. The 1980 playoff marked the 72nd time that the Allan Cup has been awarded.
The 1980 Allan Cup was the fourth Allan Cup championship to be hosted by an American city.
Teams[edit]
Cambridge Hornets (Eastern Canadian Champions)
Spokane Flyers (Western Canadian Champions)
Best-of-Seven Series[edit]
Spokane Flyers 5 - Cambridge Hornets 3
Allan Cup archives
Allan Cup website
National senior ice hockey championships of Canada
Allan Cup
Hardy Cup
Alexander Cup
Canadian senior teams at World Championships
Retrieved from "https://en.wikipedia.org/w/index.php?title=1980_Allan_Cup&oldid=506977044"
This page was last edited on 12 August 2012, at 02:14 (UTC).


text:
Les  forment une famille éteinte et fossile d'insectes ailés de l'ordre également éteint des Palaeodictyoptera, dont il est l'un des taxons les plus diversifiés.

Présentation
Ils ont vécu au cours du Paléozoïque, durant le Carbonifère jusqu'à la fin du Permien inférieur, soit il y a environ entre  et  millions d'années.
Leurs fossiles ont été découverts en Amérique du Nord, en France, en Allemagne, au Royaume-Uni, en Russie, en Ukraine et en Chine.

Systématique
Cette famille a été créée en 1894 par le paléontologue français Charles Jules Edmée Brongniart.

Un grand nombre de genres ont été décrits dans cette famille :
  Abaptilon ;
  Baeoneura ;
  Becquerelia ;
  Bizarrea ;
  Boltoniella ;
  Delitzschala ;
  Dunbaria ;
  Epitethe ;
  Epithele ;
  Homaloneura ;
  Lamproptilia ;
  Mcluckiepteron ;
  Neuburgia ;
  Palaeoptilus ;
  Paradunbaria ;
  Permiakovia ;
  Sinodunbaria ;
  Spilaptera, le genre type ;
  Spiloptilus ;
  Tectoptilus ;
  Tytthospilaptera ;
  Vorkutoneura.

Liens externes

Notes et références

Références taxonomiques

Références

Famille d'insectes préhistoriques (nom scientifique)
†
Insecte du Carbonifère
Insecte du Permien
Taxon fossile décrit en 1894

redpajama_set_name: RedPajamaWikipedia


text:
namespace base {

// Static table of checksums for all possible 8 bit bytes.
const uint32 Histogram::kCrcTable[256] = {0x0, 0x77073096L, 0xee0e612cL,
0x990951baL, 0x76dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0xedb8832L,
0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x9b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL,
0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL,
0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L,
0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL,
0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L,
0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL,
0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL,
0xb6662d3dL, 0x76dc4190L, 0x1db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L,
0x6b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0xf00f934L, 0x9609a88eL,
0xe10e9818L, 0x7f6a0dbbL, 0x86d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L,
0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L,
0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL,
0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L,
0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL,
0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L,
0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L,
0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L,
0x9abfb3b6L, 0x3b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x4db2615L,
0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0xd6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL,
0x9309ff9dL, 0xa00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L,
0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L,
0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L,
0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L,
0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL,
0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L,
0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L,
0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
0x26d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x5005713L, 0x95bf4a82L,
0xe2b87a14L, 0x7bb12baeL, 0xcb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L,
0xbdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL,
0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL,
0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL,
0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L,
0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L,
0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL,
0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
0x2d02ef8dL,
};

typedef Histogram::Count Count;

// static
const size_t Histogram::kBucketCount_MAX = 16384u;

Histogram* Histogram::FactoryGet(const std::string& name,
                                 Sample minimum,
                                 Sample maximum,
                                 size_t bucket_count,
                                 Flags flags) {
  Histogram* histogram(NULL);

  // Defensive code.
  if (minimum < 1)
    minimum = 1;
  if (maximum > kSampleType_MAX - 1)
    maximum = kSampleType_MAX - 1;

  if (!StatisticsRecorder::FindHistogram(name, &histogram)) {
    // Extra variable is not needed... but this keeps this section basically
    // identical to other derived classes in this file (and compiler will
    // optimize away the extra variable.
    // To avoid racy destruction at shutdown, the following will be leaked.
    Histogram* tentative_histogram =
        new Histogram(name, minimum, maximum, bucket_count);
    tentative_histogram->InitializeBucketRange();
    tentative_histogram->SetFlags(flags);
    histogram =
        StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram);
  }

  DCHECK_EQ(HISTOGRAM, histogram->histogram_type());
  DCHECK(histogram->HasConstructorArguments(minimum, maximum, bucket_count));
  return histogram;
}

Histogram* Histogram::FactoryTimeGet(const std::string& name,
                                     TimeDelta minimum,
                                     TimeDelta maximum,
                                     size_t bucket_count,
                                     Flags flags) {
  return FactoryGet(name, minimum.InMilliseconds(), maximum.InMilliseconds(),
                    bucket_count, flags);
}

void Histogram::Add(int value) {
  if (value > kSampleType_MAX - 1)
    value = kSampleType_MAX - 1;
  if (value < 0)
    value = 0;
  size_t index = BucketIndex(value);
  DCHECK_GE(value, ranges(index));
  DCHECK_LT(value, ranges(index + 1));
  Accumulate(value, 1, index);
}

void Histogram::AddBoolean(bool value) {
  DCHECK(false);
}

void Histogram::AddSampleSet(const SampleSet& sample) {
  sample_.Add(sample);
}

void Histogram::SetRangeDescriptions(const DescriptionPair descriptions[]) {
  DCHECK(false);
}

// The following methods provide a graphical histogram display.
void Histogram::WriteHTMLGraph(std::string* output) const {
  // TBD(jar) Write a nice HTML bar chart, with divs an mouse-overs etc.
  output->append("
");
  WriteAscii(true, "
", output);
  output->append("
");
}

void Histogram::WriteAscii(bool graph_it, const std::string& newline,
                           std::string* output) const {
  // Get local (stack) copies of all effectively volatile class data so that we
  // are consistent across our output activities.
  SampleSet snapshot;
  SnapshotSample(&snapshot);
  Count sample_count = snapshot.TotalCount();

  WriteAsciiHeader(snapshot, sample_count, output);
  output->append(newline);

  // Prepare to normalize graphical rendering of bucket contents.
  double max_size = 0;
  if (graph_it)
    max_size = GetPeakBucketSize(snapshot);

  // Calculate space needed to print bucket range numbers.  Leave room to print
  // nearly the largest bucket range without sliding over the histogram.
  size_t largest_non_empty_bucket = bucket_count() - 1;
  while (0 == snapshot.counts(largest_non_empty_bucket)) {
    if (0 == largest_non_empty_bucket)
      break;  // All buckets are empty.
    --largest_non_empty_bucket;
  }

  // Calculate largest print width needed for any of our bucket range displays.
  size_t print_width = 1;
  for (size_t i = 0; i < bucket_count(); ++i) {
    if (snapshot.counts(i)) {
      size_t width = GetAsciiBucketRange(i).size() + 1;
      if (width > print_width)
        print_width = width;
    }
  }

  int64 remaining = sample_count;
  int64 past = 0;
  // Output the actual histogram graph.
  for (size_t i = 0; i < bucket_count(); ++i) {
    Count current = snapshot.counts(i);
    if (!current && !PrintEmptyBucket(i))
      continue;
    remaining -= current;
    std::string range = GetAsciiBucketRange(i);
    output->append(range);
    for (size_t j = 0; range.size() + j < print_width + 1; ++j)
      output->push_back(' ');
    if (0 == current && i < bucket_count() - 1 && 0 == snapshot.counts(i + 1)) {
      while (i < bucket_count() - 1 && 0 == snapshot.counts(i + 1))
        ++i;
      output->append("... ");
      output->append(newline);
      continue;  // No reason to plot emptiness.
    }
    double current_size = GetBucketSize(current, i);
    if (graph_it)
      WriteAsciiBucketGraph(current_size, max_size, output);
    WriteAsciiBucketContext(past, current, remaining, i, output);
    output->append(newline);
    past += current;
  }
  DCHECK_EQ(sample_count, past);
}

// static
std::string Histogram::SerializeHistogramInfo(const Histogram& histogram,
                                              const SampleSet& snapshot) {
  DCHECK_NE(NOT_VALID_IN_RENDERER, histogram.histogram_type());

  Pickle pickle;
  pickle.WriteString(histogram.histogram_name());
  pickle.WriteInt(histogram.declared_min());
  pickle.WriteInt(histogram.declared_max());
  pickle.WriteSize(histogram.bucket_count());
  pickle.WriteUInt32(histogram.range_checksum());
  pickle.WriteInt(histogram.histogram_type());
  pickle.WriteInt(histogram.flags());

  snapshot.Serialize(&pickle);
  return std::string(static_cast<const char*>(pickle.data()), pickle.size());
}

// static
bool Histogram::DeserializeHistogramInfo(const std::string& histogram_info) {
  if (histogram_info.empty()) {
      return false;
  }

  Pickle pickle(histogram_info.data(),
                static_cast<int>(histogram_info.size()));
  std::string histogram_name;
  int declared_min;
  int declared_max;
  size_t bucket_count;
  uint32 range_checksum;
  int histogram_type;
  int pickle_flags;
  SampleSet sample;

  void* iter = NULL;
  if (!pickle.ReadString(&iter, &histogram_name) ||
      !pickle.ReadInt(&iter, &declared_min) ||
      !pickle.ReadInt(&iter, &declared_max) ||
      !pickle.ReadSize(&iter, &bucket_count) ||
      !pickle.ReadUInt32(&iter, &range_checksum) ||
      !pickle.ReadInt(&iter, &histogram_type) ||
      !pickle.ReadInt(&iter, &pickle_flags) ||
      !sample.Histogram::SampleSet::Deserialize(&iter, pickle)) {
    LOG(ERROR) << "Pickle error decoding Histogram: " << histogram_name;
    return false;
  }
  DCHECK(pickle_flags & kIPCSerializationSourceFlag);
  // Since these fields may have come from an untrusted renderer, do additional
  // checks above and beyond those in Histogram::Initialize()
  if (declared_max <= 0 || declared_min <= 0 || declared_max < declared_min ||
      INT_MAX / sizeof(Count) <= bucket_count || bucket_count < 2) {
    LOG(ERROR) << "Values error decoding Histogram: " << histogram_name;
    return false;
  }

  Flags flags = static_cast<Flags>(pickle_flags & ~kIPCSerializationSourceFlag);

  DCHECK_NE(NOT_VALID_IN_RENDERER, histogram_type);

  Histogram* render_histogram(NULL);

  if (histogram_type == HISTOGRAM) {
    render_histogram = Histogram::FactoryGet(
        histogram_name, declared_min, declared_max, bucket_count, flags);
  } else if (histogram_type == LINEAR_HISTOGRAM) {
    render_histogram = LinearHistogram::FactoryGet(
        histogram_name, declared_min, declared_max, bucket_count, flags);
  } else if (histogram_type == BOOLEAN_HISTOGRAM) {
    render_histogram = BooleanHistogram::FactoryGet(histogram_name, flags);
  } else {
    LOG(ERROR) << "Error Deserializing Histogram Unknown histogram_type: "
               << histogram_type;
    return false;
  }

  DCHECK_EQ(render_histogram->declared_min(), declared_min);
  DCHECK_EQ(render_histogram->declared_max(), declared_max);
  DCHECK_EQ(render_histogram->bucket_count(), bucket_count);
  DCHECK_EQ(render_histogram->range_checksum(), range_checksum);
  DCHECK_EQ(render_histogram->histogram_type(), histogram_type);

  if (render_histogram->flags() & kIPCSerializationSourceFlag) {
    DVLOG(1) << "Single process mode, histogram observed and not copied: "
             << histogram_name;
  } else {
    DCHECK_EQ(flags & render_histogram->flags(), flags);
    render_histogram->AddSampleSet(sample);
  }

  return true;
}

//------------------------------------------------------------------------------
// Methods for the validating a sample and a related histogram.
//------------------------------------------------------------------------------

Histogram::Inconsistencies Histogram::FindCorruption(
    const SampleSet& snapshot) const {
  int inconsistencies = NO_INCONSISTENCIES;
  Sample previous_range = -1;  // Bottom range is always 0.
  int64 count = 0;
  for (size_t index = 0; index < bucket_count(); ++index) {
    count += snapshot.counts(index);
    int new_range = ranges(index);
    if (previous_range >= new_range)
      inconsistencies |= BUCKET_ORDER_ERROR;
    previous_range = new_range;
  }

  if (!HasValidRangeChecksum())
    inconsistencies |= RANGE_CHECKSUM_ERROR;

  int64 delta64 = snapshot.redundant_count() - count;
  if (delta64 != 0) {
    int delta = static_cast<int>(delta64);
    if (delta != delta64)
      delta = INT_MAX;  // Flag all giant errors as INT_MAX.
    // Since snapshots of histograms are taken asynchronously relative to
    // sampling (and snapped from different threads), it is pretty likely that
    // we'll catch a redundant count that doesn't match the sample count.  We
    // allow for a certain amount of slop before flagging this as an
    // inconsistency.  Even with an inconsistency, we'll snapshot it again (for
    // UMA in about a half hour, so we'll eventually get the data, if it was
    // not the result of a corruption.  If histograms show that 1 is "too tight"
    // then we may try to use 2 or 3 for this slop value.
    const int kCommonRaceBasedCountMismatch = 1;
    if (delta > 0) {
      UMA_HISTOGRAM_COUNTS("Histogram.InconsistentCountHigh", delta);
      if (delta > kCommonRaceBasedCountMismatch)
        inconsistencies |= COUNT_HIGH_ERROR;
    } else {
      DCHECK_GT(0, delta);
      UMA_HISTOGRAM_COUNTS("Histogram.InconsistentCountLow", -delta);
      if (-delta > kCommonRaceBasedCountMismatch)
        inconsistencies |= COUNT_LOW_ERROR;
    }
  }
  return static_cast<Inconsistencies>(inconsistencies);
}

Histogram::ClassType Histogram::histogram_type() const {
  return HISTOGRAM;
}

Histogram::Sample Histogram::ranges(size_t i) const {
  return ranges_[i];
}

size_t Histogram::bucket_count() const {
  return bucket_count_;
}

// Do a safe atomic snapshot of sample data.
// This implementation assumes we are on a safe single thread.
void Histogram::SnapshotSample(SampleSet* sample) const {
  // Note locking not done in this version!!!
  *sample = sample_;
}

bool Histogram::HasConstructorArguments(Sample minimum,
                                        Sample maximum,
                                        size_t bucket_count) {
  return ((minimum == declared_min_) && (maximum == declared_max_) &&
          (bucket_count == bucket_count_));
}

bool Histogram::HasConstructorTimeDeltaArguments(TimeDelta minimum,
                                                 TimeDelta maximum,
                                                 size_t bucket_count) {
  return ((minimum.InMilliseconds() == declared_min_) &&
          (maximum.InMilliseconds() == declared_max_) &&
          (bucket_count == bucket_count_));
}

bool Histogram::HasValidRangeChecksum() const {
  return CalculateRangeChecksum() == range_checksum_;
}

Histogram::Histogram(const std::string& name, Sample minimum,
                     Sample maximum, size_t bucket_count)
  : histogram_name_(name),
    declared_min_(minimum),
    declared_max_(maximum),
    bucket_count_(bucket_count),
    flags_(kNoFlags),
    ranges_(bucket_count + 1, 0),
    range_checksum_(0),
    sample_() {
  Initialize();
}

Histogram::Histogram(const std::string& name, TimeDelta minimum,
                     TimeDelta maximum, size_t bucket_count)
  : histogram_name_(name),
    declared_min_(static_cast<int> (minimum.InMilliseconds())),
    declared_max_(static_cast<int> (maximum.InMilliseconds())),
    bucket_count_(bucket_count),
    flags_(kNoFlags),
    ranges_(bucket_count + 1, 0),
    range_checksum_(0),
    sample_() {
  Initialize();
}

Histogram::~Histogram() {
  if (StatisticsRecorder::dump_on_exit()) {
    std::string output;
    WriteAscii(true, "\n", &output);
    LOG(INFO) << output;
  }

  // Just to make sure most derived class did this properly...
  DCHECK(ValidateBucketRanges());
}

// Calculate what range of values are held in each bucket.
// We have to be careful that we don't pick a ratio between starting points in
// consecutive buckets that is sooo small, that the integer bounds are the same
// (effectively making one bucket get no values).  We need to avoid:
//   ranges_[i] == ranges_[i + 1]
// To avoid that, we just do a fine-grained bucket width as far as we need to
// until we get a ratio that moves us along at least 2 units at a time.  From
// that bucket onward we do use the exponential growth of buckets.
void Histogram::InitializeBucketRange() {
  double log_max = log(static_cast<double>(declared_max()));
  double log_ratio;
  double log_next;
  size_t bucket_index = 1;
  Sample current = declared_min();
  SetBucketRange(bucket_index, current);
  while (bucket_count() > ++bucket_index) {
    double log_current;
    log_current = log(static_cast<double>(current));
    // Calculate the count'th root of the range.
    log_ratio = (log_max - log_current) / (bucket_count() - bucket_index);
    // See where the next bucket would start.
    log_next = log_current + log_ratio;
    int next;
    next = static_cast<int>(floor(exp(log_next) + 0.5));
    if (next > current)
      current = next;
    else
      ++current;  // Just do a narrow bucket, and keep trying.
    SetBucketRange(bucket_index, current);
  }
  ResetRangeChecksum();

  DCHECK_EQ(bucket_count(), bucket_index);
}

bool Histogram::PrintEmptyBucket(size_t index) const {
  return true;
}

size_t Histogram::BucketIndex(Sample value) const {
  // Use simple binary search.  This is very general, but there are better
  // approaches if we knew that the buckets were linearly distributed.
  DCHECK_LE(ranges(0), value);
  DCHECK_GT(ranges(bucket_count()), value);
  size_t under = 0;
  size_t over = bucket_count();
  size_t mid;

  do {
    DCHECK_GE(over, under);
    mid = under + (over - under)/2;
    if (mid == under)
      break;
    if (ranges(mid) <= value)
      under = mid;
    else
      over = mid;
  } while (true);

  DCHECK_LE(ranges(mid), value);
  CHECK_GT(ranges(mid+1), value);
  return mid;
}

// Use the actual bucket widths (like a linear histogram) until the widths get
// over some transition value, and then use that transition width.  Exponentials
// get so big so fast (and we don't expect to see a lot of entries in the large
// buckets), so we need this to make it possible to see what is going on and
// not have 0-graphical-height buckets.
double Histogram::GetBucketSize(Count current, size_t i) const {
  DCHECK_GT(ranges(i + 1), ranges(i));
  static const double kTransitionWidth = 5;
  double denominator = ranges(i + 1) - ranges(i);
  if (denominator > kTransitionWidth)
    denominator = kTransitionWidth;  // Stop trying to normalize.
  return current/denominator;
}

void Histogram::ResetRangeChecksum() {
  range_checksum_ = CalculateRangeChecksum();
}

const std::string Histogram::GetAsciiBucketRange(size_t i) const {
  std::string result;
  if (kHexRangePrintingFlag & flags_)
    StringAppendF(&result, "%#x", ranges(i));
  else
    StringAppendF(&result, "%d", ranges(i));
  return result;
}

// Update histogram data with new sample.
void Histogram::Accumulate(Sample value, Count count, size_t index) {
  // Note locking not done in this version!!!
  sample_.Accumulate(value, count, index);
}

void Histogram::SetBucketRange(size_t i, Sample value) {
  DCHECK_GT(bucket_count_, i);
  ranges_[i] = value;
}

bool Histogram::ValidateBucketRanges() const {
  // Standard assertions that all bucket ranges should satisfy.
  DCHECK_EQ(bucket_count_ + 1, ranges_.size());
  DCHECK_EQ(0, ranges_[0]);
  DCHECK_EQ(declared_min(), ranges_[1]);
  DCHECK_EQ(declared_max(), ranges_[bucket_count_ - 1]);
  DCHECK_EQ(kSampleType_MAX, ranges_[bucket_count_]);
  return true;
}

uint32 Histogram::CalculateRangeChecksum() const {
  DCHECK_EQ(ranges_.size(), bucket_count() + 1);
  uint32 checksum = static_cast<uint32>(ranges_.size());  // Seed checksum.
  for (size_t index = 0; index < bucket_count(); ++index)
    checksum = Crc32(checksum, ranges(index));
  return checksum;
}

void Histogram::Initialize() {
  sample_.Resize(*this);
  if (declared_min_ < 1)
    declared_min_ = 1;
  if (declared_max_ > kSampleType_MAX - 1)
    declared_max_ = kSampleType_MAX - 1;
  DCHECK_LE(declared_min_, declared_max_);
  DCHECK_GT(bucket_count_, 1u);
  CHECK_LT(bucket_count_, kBucketCount_MAX);
  size_t maximal_bucket_count = declared_max_ - declared_min_ + 2;
  DCHECK_LE(bucket_count_, maximal_bucket_count);
  DCHECK_EQ(0, ranges_[0]);
  ranges_[bucket_count_] = kSampleType_MAX;
}

// We generate the CRC-32 using the low order bits to select whether to XOR in
// the reversed polynomial 0xedb88320L.  This is nice and simple, and allows us
// to keep the quotient in a uint32.  Since we're not concerned about the nature
// of corruptions (i.e., we don't care about bit sequencing, since we are
// handling memory changes, which are more grotesque) so we don't bother to
// get the CRC correct for big-endian vs little-ending calculations.  All we
// need is a nice hash, that tends to depend on all the bits of the sample, with
// very little chance of changes in one place impacting changes in another
// place.
uint32 Histogram::Crc32(uint32 sum, Histogram::Sample range) {
  const bool kUseRealCrc = true;  // TODO(jar): Switch to false and watch stats.
  if (kUseRealCrc) {
    union {
      Histogram::Sample range;
      unsigned char bytes[sizeof(Histogram::Sample)];
    } converter;
    converter.range = range;
    for (size_t i = 0; i < sizeof(converter); ++i)
      sum = kCrcTable[(sum & 0xff) ^ converter.bytes[i]] ^ (sum >> 8);
  } else {
    // Use hash techniques provided in ReallyFastHash, except we don't care
    // about "avalanching" (which would worsten the hash, and add collisions),
    // and we don't care about edge cases since we have an even number of bytes.
    union {
      Histogram::Sample range;
      uint16 ints[sizeof(Histogram::Sample) / 2];
    } converter;
    DCHECK_EQ(sizeof(Histogram::Sample), sizeof(converter));
    converter.range = range;
    sum += converter.ints[0];
    sum = (sum << 16) ^ sum ^ (static_cast<uint32>(converter.ints[1]) << 11);
    sum += sum >> 11;
  }
  return sum;
}

//------------------------------------------------------------------------------
// Private methods

double Histogram::GetPeakBucketSize(const SampleSet& snapshot) const {
  double max = 0;
  for (size_t i = 0; i < bucket_count() ; ++i) {
    double current_size = GetBucketSize(snapshot.counts(i), i);
    if (current_size > max)
      max = current_size;
  }
  return max;
}

void Histogram::WriteAsciiHeader(const SampleSet& snapshot,
                                 Count sample_count,
                                 std::string* output) const {
  StringAppendF(output,
                "Histogram: %s recorded %d samples",
                histogram_name().c_str(),
                sample_count);
  if (0 == sample_count) {
    DCHECK_EQ(snapshot.sum(), 0);
  } else {
    double average = static_cast<float>(snapshot.sum()) / sample_count;

    StringAppendF(output, ", average = %.1f", average);
  }
  if (flags_ & ~kHexRangePrintingFlag)
    StringAppendF(output, " (flags = 0x%x)", flags_ & ~kHexRangePrintingFlag);
}

void Histogram::WriteAsciiBucketContext(const int64 past,
                                        const Count current,
                                        const int64 remaining,
                                        const size_t i,
                                        std::string* output) const {
  double scaled_sum = (past + current + remaining) / 100.0;
  WriteAsciiBucketValue(current, scaled_sum, output);
  if (0 < i) {
    double percentage = past / scaled_sum;
    StringAppendF(output, " {%3.1f%%}", percentage);
  }
}

void Histogram::WriteAsciiBucketValue(Count current, double scaled_sum,
                                      std::string* output) const {
  StringAppendF(output, " (%d = %3.1f%%)", current, current/scaled_sum);
}

void Histogram::WriteAsciiBucketGraph(double current_size, double max_size,
                                      std::string* output) const {
  const int k_line_length = 72;  // Maximal horizontal width of graph.
  int x_count = static_cast<int>(k_line_length * (current_size / max_size)
                                 + 0.5);
  int x_remainder = k_line_length - x_count;

  while (0 < x_count--)
    output->append("-");
  output->append("O");
  while (0 < x_remainder--)
    output->append(" ");
}

//------------------------------------------------------------------------------
// Methods for the Histogram::SampleSet class
//------------------------------------------------------------------------------

Histogram::SampleSet::SampleSet()
    : counts_(),
      sum_(0),
      redundant_count_(0) {
}

Histogram::SampleSet::~SampleSet() {
}

void Histogram::SampleSet::Resize(const Histogram& histogram) {
  counts_.resize(histogram.bucket_count(), 0);
}

void Histogram::SampleSet::CheckSize(const Histogram& histogram) const {
  DCHECK_EQ(histogram.bucket_count(), counts_.size());
}

void Histogram::SampleSet::Accumulate(Sample value,  Count count,
                                      size_t index) {
  DCHECK(count == 1 || count == -1);
  counts_[index] += count;
  sum_ += count * value;
  redundant_count_ += count;
  DCHECK_GE(counts_[index], 0);
  DCHECK_GE(sum_, 0);
  DCHECK_GE(redundant_count_, 0);
}

Count Histogram::SampleSet::TotalCount() const {
  Count total = 0;
  for (Counts::const_iterator it = counts_.begin();
       it != counts_.end();
       ++it) {
    total += *it;
  }
  return total;
}

void Histogram::SampleSet::Add(const SampleSet& other) {
  DCHECK_EQ(counts_.size(), other.counts_.size());
  sum_ += other.sum_;
  redundant_count_ += other.redundant_count_;
  for (size_t index = 0; index < counts_.size(); ++index)
    counts_[index] += other.counts_[index];
}

void Histogram::SampleSet::Subtract(const SampleSet& other) {
  DCHECK_EQ(counts_.size(), other.counts_.size());
  // Note: Race conditions in snapshotting a sum may lead to (temporary)
  // negative values when snapshots are later combined (and deltas calculated).
  // As a result, we don't currently CHCEK() for positive values.
  sum_ -= other.sum_;
  redundant_count_ -= other.redundant_count_;
  for (size_t index = 0; index < counts_.size(); ++index) {
    counts_[index] -= other.counts_[index];
    DCHECK_GE(counts_[index], 0);
  }
}

bool Histogram::SampleSet::Serialize(Pickle* pickle) const {
  pickle->WriteInt64(sum_);
  pickle->WriteInt64(redundant_count_);
  pickle->WriteSize(counts_.size());

  for (size_t index = 0; index < counts_.size(); ++index) {
    pickle->WriteInt(counts_[index]);
  }

  return true;
}

bool Histogram::SampleSet::Deserialize(void** iter, const Pickle& pickle) {
  DCHECK_EQ(counts_.size(), 0u);
  DCHECK_EQ(sum_, 0);
  DCHECK_EQ(redundant_count_, 0);

  size_t counts_size;

  if (!pickle.ReadInt64(iter, &sum_) ||
      !pickle.ReadInt64(iter, &redundant_count_) ||
      !pickle.ReadSize(iter, &counts_size)) {
    return false;
  }

  if (counts_size == 0)
    return false;

  int count = 0;
  for (size_t index = 0; index < counts_size; ++index) {
    int i;
    if (!pickle.ReadInt(iter, &i))
      return false;
    counts_.push_back(i);
    count += i;
  }
  DCHECK_EQ(count, redundant_count_);
  return count == redundant_count_;
}

//------------------------------------------------------------------------------
// LinearHistogram: This histogram uses a traditional set of evenly spaced
// buckets.
//------------------------------------------------------------------------------

LinearHistogram::~LinearHistogram() {
}

Histogram* LinearHistogram::FactoryGet(const std::string& name,
                                       Sample minimum,
                                       Sample maximum,
                                       size_t bucket_count,
                                       Flags flags) {
  Histogram* histogram(NULL);

  if (minimum < 1)
    minimum = 1;
  if (maximum > kSampleType_MAX - 1)
    maximum = kSampleType_MAX - 1;

  if (!StatisticsRecorder::FindHistogram(name, &histogram)) {
    // To avoid racy destruction at shutdown, the following will be leaked.
    LinearHistogram* tentative_histogram =
        new LinearHistogram(name, minimum, maximum, bucket_count);
    tentative_histogram->InitializeBucketRange();
    tentative_histogram->SetFlags(flags);
    histogram =
        StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram);
  }

  DCHECK_EQ(LINEAR_HISTOGRAM, histogram->histogram_type());
  DCHECK(histogram->HasConstructorArguments(minimum, maximum, bucket_count));
  return histogram;
}

Histogram* LinearHistogram::FactoryTimeGet(const std::string& name,
                                           TimeDelta minimum,
                                           TimeDelta maximum,
                                           size_t bucket_count,
                                           Flags flags) {
  return FactoryGet(name, minimum.InMilliseconds(), maximum.InMilliseconds(),
                    bucket_count, flags);
}

Histogram::ClassType LinearHistogram::histogram_type() const {
  return LINEAR_HISTOGRAM;
}

void LinearHistogram::SetRangeDescriptions(
    const DescriptionPair descriptions[]) {
  for (int i =0; descriptions[i].description; ++i) {
    bucket_description_[descriptions[i].sample] = descriptions[i].description;
  }
}

LinearHistogram::LinearHistogram(const std::string& name,
                                 Sample minimum,
                                 Sample maximum,
                                 size_t bucket_count)
    : Histogram(name, minimum >= 1 ? minimum : 1, maximum, bucket_count) {
}

LinearHistogram::LinearHistogram(const std::string& name,
                                 TimeDelta minimum,
                                 TimeDelta maximum,
                                 size_t bucket_count)
    : Histogram(name, minimum >= TimeDelta::FromMilliseconds(1) ?
                                 minimum : TimeDelta::FromMilliseconds(1),
                maximum, bucket_count) {
}

void LinearHistogram::InitializeBucketRange() {
  DCHECK_GT(declared_min(), 0);  // 0 is the underflow bucket here.
  double min = declared_min();
  double max = declared_max();
  size_t i;
  for (i = 1; i < bucket_count(); ++i) {
    double linear_range = (min * (bucket_count() -1 - i) + max * (i - 1)) /
                          (bucket_count() - 2);
    SetBucketRange(i, static_cast<int> (linear_range + 0.5));
  }
  ResetRangeChecksum();
}

double LinearHistogram::GetBucketSize(Count current, size_t i) const {
  DCHECK_GT(ranges(i + 1), ranges(i));
  // Adjacent buckets with different widths would have "surprisingly" many (few)
  // samples in a histogram if we didn't normalize this way.
  double denominator = ranges(i + 1) - ranges(i);
  return current/denominator;
}

const std::string LinearHistogram::GetAsciiBucketRange(size_t i) const {
  int range = ranges(i);
  BucketDescriptionMap::const_iterator it = bucket_description_.find(range);
  if (it == bucket_description_.end())
    return Histogram::GetAsciiBucketRange(i);
  return it->second;
}

bool LinearHistogram::PrintEmptyBucket(size_t index) const {
  return bucket_description_.find(ranges(index)) == bucket_description_.end();
}

//------------------------------------------------------------------------------
// This section provides implementation for BooleanHistogram.
//------------------------------------------------------------------------------

Histogram* BooleanHistogram::FactoryGet(const std::string& name, Flags flags) {
  Histogram* histogram(NULL);

  if (!StatisticsRecorder::FindHistogram(name, &histogram)) {
    // To avoid racy destruction at shutdown, the following will be leaked.
    BooleanHistogram* tentative_histogram = new BooleanHistogram(name);
    tentative_histogram->InitializeBucketRange();
    tentative_histogram->SetFlags(flags);
    histogram =
        StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram);
  }

  DCHECK_EQ(BOOLEAN_HISTOGRAM, histogram->histogram_type());
  return histogram;
}

Histogram::ClassType BooleanHistogram::histogram_type() const {
  return BOOLEAN_HISTOGRAM;
}

void BooleanHistogram::AddBoolean(bool value) {
  Add(value ? 1 : 0);
}

BooleanHistogram::BooleanHistogram(const std::string& name)
    : LinearHistogram(name, 1, 2, 3) {
}

//------------------------------------------------------------------------------
// CustomHistogram:
//------------------------------------------------------------------------------

Histogram* CustomHistogram::FactoryGet(const std::string& name,
                                       const std::vector<Sample>& custom_ranges,
                                       Flags flags) {
  Histogram* histogram(NULL);

  // Remove the duplicates in the custom ranges array.
  std::vector<int> ranges = custom_ranges;
  ranges.push_back(0);  // Ensure we have a zero value.
  std::sort(ranges.begin(), ranges.end());
  ranges.erase(std::unique(ranges.begin(), ranges.end()), ranges.end());
  if (ranges.size() <= 1) {
    DCHECK(false);
    // Note that we pushed a 0 in above, so for defensive code....
    ranges.push_back(1);  // Put in some data so we can index to [1].
  }

  DCHECK_LT(ranges.back(), kSampleType_MAX);

  if (!StatisticsRecorder::FindHistogram(name, &histogram)) {
    // To avoid racy destruction at shutdown, the following will be leaked.
    CustomHistogram* tentative_histogram = new CustomHistogram(name, ranges);
    tentative_histogram->InitializedCustomBucketRange(ranges);
    tentative_histogram->SetFlags(flags);
    histogram =
        StatisticsRecorder::RegisterOrDeleteDuplicate(tentative_histogram);
  }

  DCHECK_EQ(histogram->histogram_type(), CUSTOM_HISTOGRAM);
  DCHECK(histogram->HasConstructorArguments(ranges[1], ranges.back(),
                                            ranges.size()));
  return histogram;
}

Histogram::ClassType CustomHistogram::histogram_type() const {
  return CUSTOM_HISTOGRAM;
}

CustomHistogram::CustomHistogram(const std::string& name,
                                 const std::vector<Sample>& custom_ranges)
    : Histogram(name, custom_ranges[1], custom_ranges.back(),
                custom_ranges.size()) {
  DCHECK_GT(custom_ranges.size(), 1u);
  DCHECK_EQ(custom_ranges[0], 0);
}

void CustomHistogram::InitializedCustomBucketRange(
    const std::vector<Sample>& custom_ranges) {
  DCHECK_GT(custom_ranges.size(), 1u);
  DCHECK_EQ(custom_ranges[0], 0);
  DCHECK_LE(custom_ranges.size(), bucket_count());
  for (size_t index = 0; index < custom_ranges.size(); ++index)
    SetBucketRange(index, custom_ranges[index]);
  ResetRangeChecksum();
}

double CustomHistogram::GetBucketSize(Count current, size_t i) const {
  return 1;
}

//------------------------------------------------------------------------------
// The next section handles global (central) support for all histograms, as well
// as startup/teardown of this service.
//------------------------------------------------------------------------------

// This singleton instance should be started during the single threaded portion
// of main(), and hence it is not thread safe.  It initializes globals to
// provide support for all future calls.
StatisticsRecorder::StatisticsRecorder() {
  DCHECK(!histograms_);
  if (lock_ == NULL) {
    // This will leak on purpose. It's the only way to make sure we won't race
    // against the static uninitialization of the module while one of our
    // static methods relying on the lock get called at an inappropriate time
    // during the termination phase. Since it's a static data member, we will
    // leak one per process, which would be similar to the instance allocated
    // during static initialization and released only on  process termination.
    lock_ = new base::Lock;
  }
  base::AutoLock auto_lock(*lock_);
  histograms_ = new HistogramMap;
}

StatisticsRecorder::~StatisticsRecorder() {
  DCHECK(histograms_ && lock_);

  if (dump_on_exit_) {
    std::string output;
    WriteGraph("", &output);
    LOG(INFO) << output;
  }
  // Clean up.
  HistogramMap* histograms = NULL;
  {
    base::AutoLock auto_lock(*lock_);
    histograms = histograms_;
    histograms_ = NULL;
  }
  delete histograms;
  // We don't delete lock_ on purpose to avoid having to properly protect
  // against it going away after we checked for NULL in the static methods.
}

// static
bool StatisticsRecorder::IsActive() {
  if (lock_ == NULL)
    return false;
  base::AutoLock auto_lock(*lock_);
  return NULL != histograms_;
}

Histogram* StatisticsRecorder::RegisterOrDeleteDuplicate(Histogram* histogram) {
  DCHECK(histogram->HasValidRangeChecksum());
  if (lock_ == NULL)
    return histogram;
  base::AutoLock auto_lock(*lock_);
  if (!histograms_)
    return histogram;
  const std::string name = histogram->histogram_name();
  HistogramMap::iterator it = histograms_->find(name);
  // Avoid overwriting a previous registration.
  if (histograms_->end() == it) {
    (*histograms_)[name] = histogram;
  } else {
    delete histogram;  // We already have one by this name.
    histogram = it->second;
  }
  return histogram;
}

// static
void StatisticsRecorder::WriteHTMLGraph(const std::string& query,
                                        std::string* output) {
  if (!IsActive())
    return;
  output->append("<title>About Histograms");
  if (!query.empty())
    output->append(" - " + query);
  output->append("</title>"
                 // We'd like the following no-cache... but it doesn't work.
                 // "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">"
                 "");

  Histograms snapshot;
  GetSnapshot(query, &snapshot);
  for (Histograms::iterator it = snapshot.begin();
       it != snapshot.end();
       ++it) {
    (*it)->WriteHTMLGraph(output);
    output->append("

");
  }
  output->append("");
}

// static
void StatisticsRecorder::WriteGraph(const std::string& query,
                                    std::string* output) {
  if (!IsActive())
    return;
  if (query.length())
    StringAppendF(output, "Collections of histograms for %s\n", query.c_str());
  else
    output->append("Collections of all histograms\n");

  Histograms snapshot;
  GetSnapshot(query, &snapshot);
  for (Histograms::iterator it = snapshot.begin();
       it != snapshot.end();
       ++it) {
    (*it)->WriteAscii(true, "\n", output);
    output->append("\n");
  }
}

// static
void StatisticsRecorder::GetHistograms(Histograms* output) {
  if (lock_ == NULL)
    return;
  base::AutoLock auto_lock(*lock_);
  if (!histograms_)
    return;
  for (HistogramMap::iterator it = histograms_->begin();
       histograms_->end() != it;
       ++it) {
    DCHECK_EQ(it->first, it->second->histogram_name());
    output->push_back(it->second);
  }
}

bool StatisticsRecorder::FindHistogram(const std::string& name,
                                       Histogram** histogram) {
  if (lock_ == NULL)
    return false;
  base::AutoLock auto_lock(*lock_);
  if (!histograms_)
    return false;
  HistogramMap::iterator it = histograms_->find(name);
  if (histograms_->end() == it)
    return false;
  *histogram = it->second;
  return true;
}

// private static
void StatisticsRecorder::GetSnapshot(const std::string& query,
                                     Histograms* snapshot) {
  if (lock_ == NULL)
    return;
  base::AutoLock auto_lock(*lock_);
  if (!histograms_)
    return;
  for (HistogramMap::iterator it = histograms_->begin();
       histograms_->end() != it;
       ++it) {
    if (it->first.find(query) != std::string::npos)
      snapshot->push_back(it->second);
  }
}

// static
StatisticsRecorder::HistogramMap* StatisticsRecorder::histograms_ = NULL;
// static
base::Lock* StatisticsRecorder::lock_ = NULL;
// static
bool StatisticsRecorder::dump_on_exit_ = false;

}  // namespace base