text:
You are here Home › Satellite Missions › Missions Database › V, W, X, Y, Z › WSF-M
WSF-M
WSF-M (Weather System Follow-on - Microwave) Satellite
Spacecraft Launch Sensor Complement References
The U.S. Air Force's future weather satellite plans are beginning to take shape but are centered around enhancing information technology, cybersecurity and small satellites in the near term rather than a new generation of large, sophisticated spacecraft to replace the Defense Meteorological Satellite Program. 1)
That's largely due to budget constraints and the fact that accurate forecasting, while critical to military operations, is not the service's primary mission, according to current and former government officials who asked not to be quoted. The Air Force is moving ahead with plans to buy satellites to fulfill its requirements for microwave, electro-optical and infrared observations.
The Air Force SMC (Space and Missile Systems Center) awarded Ball Aerospace & Technologies Corp. a contract in November 2017 to build two satellites equipped with passive microwave imaging radiometers and Energetic Charged Particle sensors to send into LEO (Low Earth Orbit). The Air Force plans to include Energetic Charged Particle sensors on all future satellites to enhance its space weather observations.
To bridge the gap created by the end of Defense Meteorological Satellite-19 operations, the Air Force plans to work with the Pentagon's Operationally Responsive Space Office to launch a small satellite with electro-optical and infrared imagers in 2021 or 2022 to characterize clouds.
Due to the quick timeline of this gap-filler program, companies would have approximately two years to build the passive microwave imaging radiometer.
Harris Corp. is one of the companies eager to do that. Harris would build it by relying on the heritage of imagers it built for the U.S. National Oceanic and Atmospheric Administration's Polar Operational Environmental Satellites, said Eric Webster, Harris environmental solutions vice president and general manager.
In addition, the Air Force began soliciting proposals Nov. 27 from industry for Weather System Follow-on satellites equipped with instruments to characterize clouds and provide imagery in theaters of combat. The first satellite in this new Weather Satellite Follow-on Electro-optical/Infrared constellation (WSF-E) would be launched around 2024 and like DMSP would cross the equator early in the morning local time, according to the request for proposals.
Visible Infrared Imaging Radiometer Suite (VIIRS), which NOAA flies on the Suomi NPP (National Polar-orbiting Partnership) satellite and NOAA-20, the first Joint Polar Satellite System spacecraft, is a candidate for the WSF-E mission. The VIIRS sensor was designed to fulfill NASA, NOAA and Defense Department requirements as part of the cancelled National Polar-orbiting Operational Environmental Satellite System program. Some VIIRS capabilities like its day-night imagery stem from military requirements.
"To a large extent VIIRS on Suomi NPP and JPSS-1 is already doing the WSF-E mission," said Robert Curbeam, Raytheon Space Systems director. "Obviously because that data is available, the military uses it. They also use a lot of data products that use VIIRS data: sea surface temperature, ocean color, turbidity, littoral transport," said Curbeam, a former astronaut and U.S. Navy captain.
To bolster its weather satellite constellation, the Air Force also is considering using one of NOAA's Geostationary Operational Environmental Satellites fill a gap in coverage over the Indian Ocean.
"We are working with the Air Force to offer up one of our retired GOES N, O, P satellites for that transfer," said Steve Volz, NOAA acting assistant secretary for environmental observation and prediction. "With GOES-16 functioning, we are in a robust situation. We can afford to give the Air Force one of our spares. We have two backups; we only need one."
GOES N, O, P are NOAA's generation of satellites that preceded the GOES-R constellation that is beginning to take shape with the November 2016 launch of GOES-16 and the anticipated launch of GOES-S in March.
• May 18, 2020: It's not easy to be able to conduct critical scientific design reviews while observing the health and safety rules of the COVID-19, but both elements were maintained at the United States Space Force's Space and Missile Systems Center's Weather System Follow-on-Microwave (WSF-M) program. Here two major milestones were achieved despite facing these challenges. 2)
- First, the WSF-M system Critical Design Review completed in April, ensuring that the WSF-M system can meet stated performance requirements within cost, schedule and risk expectations; and is ready to proceed with fabrication, demonstration and test efforts. This multi-disciplined review was successfully conducted while adhering to the current requirements for physical distancing through the extensive use of electronic tools such as web hosted meetings, voice teleconferences and various secure data exchange tools.
- Second, after completion of a thorough review of program progress and the supporting statutory and regulatory requirements, Dr. William B. Roper, Assistant Secretary of the Air Force for Acquisition, Technology & Logistics, granted Milestone B certification and WSF-M program approval on May 15.
- The certification formally baselines the program execution requirements, including the establishment of cost and schedule caps, that will govern the program through launch and handover of the capability to operations.
- Lt. Col. Wilfredo Ruiz, WSF-M program manager said that he is fortunate to have a dedicated team committed to providing capability on time, no matter what the obstacle.
- These accomplishments demonstrate SMC's commitment in the face of challenges to rapidly deliver Space-Based Environmental Monitoring capabilities to the warfighter. The WSF-M program is executed by the SMC Production Corps, whose mission is to continue forging the future of space by delivering next generation capabilities to our warfighters and mission partners in front of the need. The Production Corps' agile program management techniques, smart business approach and close teaming with industry and Department of Defense stakeholders are enabling the production of advanced space-based systems to enhance warfighting weather prediction and analysis capabilities.
- WSF-M is the next generation of space based passive microwave sensing technology, and will provide U.S. and Allied warfighters with essential weather data including the measurement of ocean surface wind speed and direction; ice thickness; snow depth; soil moisture; and local spacecraft energetic charged particle environment. The ocean surface wind speed measurement enables tropical cyclone intensity determination by the Joint Typhoon Warning Center. The data gathered by WSF-M will be provided to meteorologists in support of the generation of a wide variety of weather products necessary to conduct mission planning and operations globally every day.
- The Space and Missile Systems Center is the U.S. Space Force's center of excellence for acquiring and developing military space systems. SMC's portfolio includes space launch, global positioning, military space vehicle communications, defense meteorological space vehicles, range systems, space vehicle control networks, space-based infrared systems, and space situational awareness capabilities.
• April 20, 2020: Ball Aerospace conducted a critical design review (CDR) of the Weather System Follow-on (WSF-M) satellite mission, which it is building for the U.S. Space Force (USSF) Space and Missile Systems Center (SMC). 3)
- With CDR concluded, Ball Aerospace begins full production of the satellite. Upon delivery, this next-generation operational environmental satellite system will provide critical and actionable environmental intelligence to military operations in all warfighting domains.
- "Measuring and understanding the physical environment is critical to military operations, from determining tropical cyclone intensity for asset protection and maneuver operations to how wind and sea state play into assured access and aircraft carrier operations," said Mark Healy, vice president and general manager, National Defense, Ball Aerospace. "Ball is proud to be a mission partner with the Space Force, working closely and collaboratively to ensure the success of this program, which extends Ball's legacy of providing precise measurements from space to enable more accurate atmospheric and ocean forecasting."
- The Weather System Follow-on (WSF) mission is designed specifically to mitigate three high-priority Department of Defense (DoD) Space-Based Environmental Monitoring (SBEM) gaps: ocean surface vector winds, tropical cyclone intensity and the space weather gap, low Earth orbit (LEO) energetic charged particles. It will also address three additional SBEM gaps: sea ice characterization, soil moisture and snow depth. As the prime contractor for WSF, Ball is responsible for delivering the entire mission, including instrument, spacecraft and system software, as well as the algorithms for data products, to SMC.
- This new environmental satellite system leverages the Ball-built Global Precipitation Measurement (GPM) Microwave Imager (GMI) instrument, which is the on-orbit reference standard for calibrating precipitation measurements in NASA's GPM constellation. The WSF-M bus will be based on the Ball Configurable Platform, a proven, agile spacecraft with 50 years of on-orbit operations for affordable remote sensing applications.
- Ball has also played key roles on numerous operational weather satellite programs, including the Ball-built Suomi National Polar-orbiting Partnership (Suomi NPP) satellite, which launched in 2011, and the Joint Polar Satellite System-1 (JPSS-1) satellite, now NOAA-20, which launched in 2017.
• February 20, 2020: On Feb. 11, after more than 22 years of providing vital global weather data to the U.S. and its allies, Defense Meteorological Satellite Program (DMSP) Flight 14 was decommissioned after completing 118,052 orbits of the Earth. End of Life (EOL) procedures were accomplished by operators at the National Oceanic and Atmospheric Administration (NOAA) Satellite Operations Facility (NSOF) in Suitland, Maryland, under the direction of United States Space Force's 50th Space Wing. Space and Missiles Systems Center technical experts worked in concert with the rest of the team to ensure the EOL procedures were effectively and efficiently executed. 4)
- The remaining four operational DMSP satellites continue to provide a resilient capability for collecting and disseminating global environmental data in support of operations around the world. The DMSP satellites continue to be sustained past their original three- to five-year design life. At the time of its decommissioning, F-14 was in operations for more than 22 years. According to the program office, the longevity of DMSP is a testament to the work of each and every person that has been a part of the program, and to the multi-agency partnerships that have been fostered since the beginning of DMSP.
- SMC remains at the forefront of providing the next generation of modernized space based environmental monitoring capabilities, ensuring the critical weather mission will continue in the future. The Weather System Follow-on – Microwave (WSF-M) program will be holding its critical design review the week of March 31. WSF-M satellites will provide the next generation passive microwave sensing capability that provides ocean surface wind speed and direction measurements, supports tropical cyclone intensity prediction, and will also host an energetic charged particle sensor for measurement of the local space environment. The first WSF-M satellite is expected to be operational in Fiscal Year 2024.
- The U.S Space Force's Space and Missile Systems Center, located at Los Angeles Air Force Base in El Segundo, California, is the Center of Excellence for acquiring and developing military space systems. Its portfolio includes the Global Positioning System, military satellite communications, defense meteorological satellites, space launch, range systems, satellite control networks, space-based infrared systems and space situational awareness capabilities
• November 29, 2017: Ball Aerospace has been selected by the U.S. Air Force's Space and Missile Systems Center (SMC) to deliver the next-generation operational environmental satellite system, Weather System Follow-on – Microwave (WSF-M), for the Department of Defense (DoD). WSF-M is a predominantly fixed price contract that will provide for system design and risk reduction of a Low Earth Orbit (LEO) satellite with a passive microwave imaging radiometer instrument and hosted Government furnished energetic charged particle (ECP) sensor. The contract will include options for the development and fabrication of two LEO satellites as well as options for launch vehicle integration, launch and early orbit test, and operational test and evaluation support. This mission will improve weather forecasting over maritime regions by taking global measurements of the atmosphere and ocean surface. 5)
- WSF-M is designed to mitigate three high priority DoD Space-Based Environmental Monitoring (SBEM) gaps: ocean surface vector winds, tropical cyclone intensity and LEO energetic charged particles.
Ball Aerospace (Ball) is under a contract with the Air Force Space and Missile Systems Center (SMC) in El Segundo, CA, to provide the Weather System Follow-on – Microwave (WSF-M) Mission. As Mission Prime, Ball is responsible for delivering Environmental Data Record (EDR)-level performance for Ocean Surface Vector Winds (OSVW), Tropical Cyclone Intensity (TCI), Soil Moisture, Snow Depth, and Sea Ice Characterization, as well as providing Imagery products. The Ball WSF-M mission design provides the next-generation environmental satellite system for the Department of Defense (DoD) following the successes of Ball's civil weather systems: Suomi National Polar-orbiting Partnership (Suomi NPP), Joint Polar Satellite System (JPSS)-1, and the Global Precipitation Measurement (GPM) Microwave Imager (GMI) sensor. This paper presents an overview of the mission, the predicted performance, provides details on the instrument and spacecraft design, planned hardware demonstrations, and gives current status. 6)
Mission overview: WSF-M is a DoD (Department of Defense) operational, low earth orbit (LEO), environmental satellite system that provides continuous space-based sensing of the terrestrial environment. Terrestrial sensing is currently provided by the Defense Meteorological Satellite Program (DMSP) and WindSat. The Space Segment consists of a LEO spacecraft bus and two payloads. The primary payload is a Microwave Imager (MWI) sensor that takes calibrated passive radiometric measurements at multiple microwave frequencies to enable derivation of Ocean Surface Vector Winds (OSVW), Tropical Cyclone Intensity (TCI) and additional EDRs. In addition, the government-provided Energetic Charged Particle (ECP) sensor provides in-situ space weather measurements to enable derivation of ECP flux and warnings. Both payloads provide sensor data to the spacecraft for combination with spacecraft telemetry to form the mission data which is downlinked to the ground system.
Mission data is downlinked to the Air Force Satellite Control Network (AFSCN) for routing to the Enterprise Ground Services (EGS) Data Operations Center where it is processed to separate the MWI and ECP data. The microwave instrument mission data is distributed to the Air Force's Air Combat Command (ACC) 557th Weather Wing (WW), and to the Fleet Numerical Meteorology and Oceanography Center (FNMOC). The weather centrals use the Ball developed algorithms to process the mission data into Temperature Data Record (TDR), Sensor Data Records (SDR) and EDR products meeting the required performance. The EGS Operations Center processes the raw ECP data into products that support host satellite anomaly resolution, and state of health trending and analysis.
In addition, WSF-M broadcasts Real-Time Data (RTD), including all ancillary data needed to process the real-time data, directly to equipped Department of Defense (DoD) direct readout sites that use the Ball-developed algorithms to produce EDR mission products. Space vehicle telemetry is downlinked from the spacecraft and relayed to the EGS Operations Center where they are used to monitor spacecraft and instrument status. Mission Telemetry, Tracking & Command (TT&C) Services are provided by the ground system.
Performance overview: Ball derives the MWI sensor requirements from the WSF-M Technical Requirements Document (TRD) through an end-to-end (E2E) simulation that includes surface and atmospheric models, sensor characteristics, calibration uncertainty, and EDR retrieval algorithms. The WSF-M EDRs require that the sensor include the channel set shown in Table 1. Ball has selected a Sun-synchronized 833 km orbit for the WSF-M space vehicle (SV) to meet the swath width and refresh rate requirements. For the selected WSF-M orbit, the MWI antenna provides the required horizontal resolution of less than 30 km for the 10 GHz channel, consistent with current WindSat performance.
Ball's WSF-M design meets all OSVW, TCI, and Imagery SDR requirements with margin. Predicted performance for OSVW across the wind speed range of 5 to 25 m/s is shown in Figure 1. Ball's E2E simulation generates MWI-measured scenes consistent with WindSat data and includes all significant error sources. The simulation's Noise Equivalent Delta Temperature (NEDT) and calibration uncertainty are based on GMI-verified on-orbit performance providing high confidence in these values. Polarimetric parameters are based on measured performance of prototype polarimetric receiver hardware. These simulated MWI-measured scenes are input into the operational retrieval algorithms and the retrieved OSVW product compared to the input scene. The operational retrieval algorithms are provided by Ball partners Remote Sensing Systems (RSS) and Atmospheric and Environmental Research (AER).
Figure 1: Speed and wind direction uncertainty. Predictions from the mature validated E2E model show a minimum of 20% margin on wind direction and a minimum of 70% margin on wind speed for each 2 m/s wind speed bin (image credit: Ball Aerospace)
Space vehicle overview: The notional WSF-M Space Vehicle is shown in Figure 2. The WSF-M spacecraft is based on the BCP (Ball Configurable Platform) product line, a stable, agile, high-throughput spacecraft designed specifically for long-lived, remote-sensing missions like WSF-M. We have designed, built, and delivered ten BCP space vehicles and WSF-M joins three more SVs in development in our production line. Recent BCP examples include five commercial high-resolution satellite systems, Suomi-NPP, JPSS-1, and ICESat. The ECP is shown in the deployed configuration.
Figure 2:	WSF-M notional space vehicle (image credit: Ball Aerospace)
Launch: A launch of the WSF-M satellite is expected in 2023, providing operational services in 2024.
Orbit: Sunsynchronous orbit, LEO.
Sensor complement (MWI, ECP)
MWI (Microwave Imager)
The MWI requirements and design have been derived by Ball to meet the required EDR performance and leverage the heritage design features of the GMI Instrument that was built and tested by Ball for NASA (National Aeronautics and Space Administration). The GMI instrument was launched onboard the GPM (Global Precipitation Measurement) spacecraft on February 28th, 2014 and has operated continuously since then completing over 5 years of successful operation on-orbit. The flow down of WSF-M EDR requirements to MWI resulted in a set of requirements that is similar to GMI – providing a low-risk design foundation for the MWI.
The MWI instrument is shown in Figure 2. The MWI is a conically scanning polarimetric microwave radiometer with channels from 10 GHz to 89 GHz. Detailed characteristics for each of the 17 channels on MWI are shown in Table 1. These channels map closely to the GMI channel set, providing significant heritage in the receiver subsystem. 7)
Chanel Center
Frequency (GHz)
Bandwidth (MHz)
Sample Time (ms)
Beam Width (º)
3 dB Footprint Size (km)
10ν, 10h
ν, h
3rd, 4th
23ν
37νd, 37hd
37νa, 37ha
Table 1: Channel characteristics and performance. The channel set for the Ball MWI includes the 10.85 to 89 GHz imaging channels with digital full Stokes outputs for 10.85, 18.85 and 36.5 GHz. (The subscripts "d" and "a" denote the digital and analog outputs of the 37 GHz receiver, respectively)
The MWI utilizes 3rd and 4th Stokes sensitivity to wind direction on the 10, 18, and 37 GHz bands to measure OSVW (Ocean Surface Vector Winds). 8) The MWI produces the 3rd and 4th Stokes polarimetric channels by digitally sampling and cross-correlating v-pol and h-pol amplitude signals. Digital polarimetry has the major advantages of reduced complexity and better calibration performance than analog designs. 9)
The 10, 18, and 36 GHz channels are fully polarimetric providing the V, H, 3rd and 4th Stokes. The designs of these polarimetric channels optimizes the use of the heritage GMI designs while incorporating the needed polarimetric capability. The RF front ends include phase-matched v-pol and h-pol channels based on the heritage GMI design. The analog outputs of the front end are down converted to an intermediate frequency enabling sampling by a high-speed analog-to-digital converter and processing by the digital backend. A digital processor directly computes the complex correlation between the v-pol and h-pol channels, yielding the 3rd and 4th Stokes parameters essential to OSVW retrievals. This digital-receiver-based approach for polarimetric channels has been proven on the NASA SMAP mission where the digital polarimetric capability has been used for ionospheric correction and for OSVW retrieval in hurricanes [4].10) The receiver subsystem built by ITT Exelis provides low noise figures and very good stability for excellent radiometric performance.
The Antenna Subsystem consists of the 1.8-m Main Reflector (MR), four separate feed horns, and calibration targets. The Reflector Deployment Assembly (RDA) stows the MR and deploys it to the on-orbit configuration. This stowage gives the instrument a relatively compact stowed size given the 1.8- meter aperture size. The Spin Mechanism Assembly serves multiple functions; including conical scanning, signal transfer and power distribution through internal slip rings. The MWI Spin Mechanism Assembly is a build-to-print copy of the GMI SMA which has demonstrated over 5 years of onorbit performance without any anomalies. The SMA also has significant heritage to the WindSat Bearing and Power Transfer Assembly (BAPTA) which has operated for over 15 years. The Instrument Controller Electronics (ICE) subsystem provides the interface to the spacecraft and is responsible for MWI control.
Ball designed the MWI with multiple features proven on GMI to provide excellent calibration accuracy and provide the most accurate, precise and consistent data possible. 11) These features include proven VDA reflector coating technology that eliminates calibration errors from antenna emissions. Noise diodes on the 10-37 GHz channels provide on-orbit trending of non-linearity and backup gain calibration used in on-orbit calibration/validation activities to significantly improve GMI radiometric stability . 12) Also, tight hot load shrouding eliminates solar intrusion into the hot load.
Accurate, stable radiometric calibration of the Stokes parameters is essential to the on-orbit polarimetric receiver performance. The 3rd and 4th Stokes on-orbit calibration is performed via a Correlated Noise Source (CNS) included at the input of each receiver front end. The CNS employs stable heritage noise diodes used for the operational GMI payload that, together with a simple combining network, inject correlated calibration signals into the receiver front end.
Planned hardware demonstrations: Prototype hardware is being developed in four areas: (1) RF Digital Polarimetric Receivers, (2) Main Reflector, (3) Reflector Deployment Assembly, and (4) Instrument Controller Electronics.
Ball's partner Harris (EDO) is building the 37 GHz MWI polarimetric correlated noise source and down-converter assembly prototypes. This is combined with the Ball-built prototype Digital Receiver Assembly (DRA) and existing 37 GHz receivers from GMI to provide an end-to-end receiver at 37 GHz. The RF receiver includes a prototype of the electronics and digital controller board that incorporates redundancy and adds electrical interface capability to the Digital Polarimetric Receiver Assemblies.
Ball's Reflector Deployment Assembly partner, Northrop Grumman (Orbital ATK), builds and tests the MWI RDA prototype scaled in size from the GMI RDA. Ball's Main Reflector partner, AASC, builds and tests a MWI 1.8-m MR prototype scaled in size from the GMI 1.2-m MR. Following completion of subsystem testing, the MR and RDA are integrated and tested. Finally, Ball builds and tests the MWI Instrument Controller Electronics (ICE) prototype.
ECP (Energetic Charged Particle) Sensor
The ECPs are hosted government furnished instruments. The U.S. Air Force intends to include ECP sensors on all future satellites for space weather monitoring, starting from the early 2020s. The USAF awarded contracts to Applied Technology Associates and Teledyne Brown Engineering to manufacture satellite instruments to detect Energetic Charged Particles (ECPs). 13)
The Air Force awarded a $5 million contract to Applied Technology Associates of Paso Robles, California, to assemble a sensor developed by the Air Force Research Laboratory. The sensor, Compact Environmental Anomaly Sensor 3, includes two particle telescopes to "provide a comprehensive measure of the space environment," Capt. Kaitlin Toner, Air Force Space and Missile Systems Command spokeswoman, said in an emailed response to SpaceNews questions.
The Air Force also awarded a $1.8 million contract to Teledyne Brown Engineering of Huntsville, Alabama, to assemble ECP-Lite, a sensor developed by the Aerospace Corp. "ECP-Lite is a low size, weight and power sensor that will provide a focused subset of space environmental data," Toner said.
The contracts are part of the Air Force's effort to improve space weather monitoring. Air Force Secretary Deborah Lee James issued a memo in 2015 calling for ECP sensors on all new Air Force satellites.
The sensors built by Applied Technology Associates and Teledyne Brown Engineering are scheduled to be launched on different spacecraft in late 2020 and early 2021, Toner said. "Testing will occur within 12 months of launch," she added.
1) Debra Werner,"Air Force to bolster weather capabilities with small satellites and sensors," SpaceNews, 11 January 2018, URL: https://spacenews.com
/air-force-to-bolster-weather-capabilities-with-small-satellites-and-sensors/
2) "Despite Numerous Challenges, the Weather System Follow-on Microwave Program Passes Two Milestones," Satnews Daily, 18 May 2020, URL: http://www.satnews.com/story.php?number=1412828539
3) "Ball Aerospace Conducts Critical Design Review for U.S. Space Force's WSF Next-Gen Weather Satellite," Ball Aerospace, 20 April 2020, URL: https://defpost.com
/ball-aerospace-conducts-cdr-u-s-space-force-wsf-weather-satellite/
4) "DMSP satellite decommissioned after 22 years of service, Weather Systems Follow-on - Microwave (WSF-M) program to hold Critical Design Review in March," SMC Public Affairs, Space and Missile Systems Center, 20 February 2020, URL: https://www.losangeles.af.mil/News/Article-Display/Article
/2089853/dmsp-satellite-decommissioned-after-22-years-of-service-weather-systems-follow/
5) "Ball Aerospace Wins Major U.S. Air Force Contract for Next-Gen Weather Satellite," Ball Aerospace News Release, 29 November 2017, URL: http://www.ball.com/aerospace/newsroom/detail?newsid=123879
6) David Newell, David Draper, Quinn Remund, Brian Woods, Catrina Mays, Bill Bensler, Dan Miller, Ken Eastman, "Weather Satellite Follow-On – Microwave (WSF-M) Design And Predicted Performance," AMS (American Meteorological Society), 20th Symposium on Meteorological Observation and Instrumentation, Boston, MA, USA, 13-16 January 2020, URL: https://ams.confex.com/ams/2020Annual/webprogram/Paper369912.html
7) David Newell, David Draper, Don Figgins, Barry Berdanier, Michael Kubitschek, David HolshouserAdam Sexton, Sergey Krimchansky,Frank Wentz, and Thomas Meissner, "GPM microwave imager key performance and calibration results," Proceedings of IGARSS 2014, pp 3754 –3757, 2014
8) A. J. Gasiewski, D. B. Kunkee, "Polarized microwave emission from water waves," AGU Radio Science, Volume 29, Issue 6, November-December 1994, Pages 1449-1466, https://doi.org/10.1029/94RS01923
9) J. R. Piepmeier ; A. J. Gasiewski, "Digital correlation microwave polarimetry: analysis and demonstration," IEEE Transactions on Geoscience and Remote Sensing, Volume: 39 , Issue: 11 , November 2001
10) Simon H. Yueh, Alexander G. Fore, Wenqing Tang, Akiko Hayashi, Bryan Stiles, Nicolas Reul, Yonghui Weng, Fuqing Zhang, "SMAP L-Band Passive Microwave Observations of Ocean Surface Wind During Severe Storms," IEEE Transactions on Geoscience and Remote Sensing, Volume 54 , Issue 12 , Dec. 2016, pp: 7339 - 7350
11) Frank J. Wentz, David Draper, "On-orbit absolute calibration of the Global Precipitation Mission Microwave Imager," AMS, July 2016, URL: https://journals.ametsoc.org
/doi/pdf/10.1175/JTECH-D-15-0212.1
12) David W. Draper, David A. Newell, Darren S. McKague, Jeffrey R. Piepmeier, "Assessing Calibration Stability Using the Global Precipitation Measurement (GPM) Microwave Imager (GMI) Noise Diodes," IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, Volume 8 , Issue 9 , Sept. 2015
13) Debra Werner, "Air Force taps Applied Technology Associates and Teledyne Brown to produce space weather sensors," SpaceNews, 29 January 2020, URL: https://spacenews.com/air-force-ecp-tests/
Spacecraft Launch Sensor Complement References Back to top
VCLS-1
Vega Evolution
Vega PoC flight for SSMS
Venta-1
VELOX-CI
VELOX-PII
VELOX-1
VesselSat
Virgo Interferometer
VNREDSat-1
WEOS
WNISAT-1
WorldView Legion
X-37B OTV
XPNAV-1
XSat
YouthSat
Yubileiny
Yubileiny-2
Zero 2 Infinity
ZY-1-02C
ZY-3A


text:
"use strict";

var _types = require("../tokenizer/types");

var _index = require("./index");

var _index2 = _interopRequireDefault(_index);

var _whitespace = require("../util/whitespace");

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var pp = _index2.default.prototype;

// ### Statement parsing

// Parse a program. Initializes the parser, reads any number of
// statements, and wraps them in a Program node.  Optionally takes a
// `program` argument.  If present, the statements will be appended
// to its body instead of creating a new node.

/* eslint indent: 0 */
/* eslint max-len: 0 */

pp.parseTopLevel = function (file, program) {
  program.sourceType = this.options.sourceType;

  this.parseBlockBody(program, true, true, _types.types.eof);

  file.program = this.finishNode(program, "Program");
  file.comments = this.state.comments;
  file.tokens = this.state.tokens;

  return this.finishNode(file, "File");
};

var loopLabel = { kind: "loop" },
    switchLabel = { kind: "switch" };

// TODO

pp.stmtToDirective = function (stmt) {
  var expr = stmt.expression;

  var directiveLiteral = this.startNodeAt(expr.start, expr.loc.start);
  var directive = this.startNodeAt(stmt.start, stmt.loc.start);

  var raw = this.input.slice(expr.start, expr.end);
  var val = directiveLiteral.value = raw.slice(1, -1); // remove quotes

  this.addExtra(directiveLiteral, "raw", raw);
  this.addExtra(directiveLiteral, "rawValue", val);

  directive.value = this.finishNodeAt(directiveLiteral, "DirectiveLiteral", expr.end, expr.loc.end);

  return this.finishNodeAt(directive, "Directive", stmt.end, stmt.loc.end);
};

// Parse a single statement.
//
// If expecting a statement and finding a slash operator, parse a
// regular expression literal. This is to handle cases like
// `if (foo) /blah/.exec(foo)`, where looking at the previous token
// does not help.

pp.parseStatement = function (declaration, topLevel) {
  if (this.match(_types.types.at)) {
    this.parseDecorators(true);
  }

  var starttype = this.state.type,
      node = this.startNode();

  // Most types of statements are recognized by the keyword they
  // start with. Many are trivial to parse, some require a bit of
  // complexity.

  switch (starttype) {
    case _types.types._break:case _types.types._continue:
      return this.parseBreakContinueStatement(node, starttype.keyword);
    case _types.types._debugger:
      return this.parseDebuggerStatement(node);
    case _types.types._do:
      return this.parseDoStatement(node);
    case _types.types._for:
      return this.parseForStatement(node);
    case _types.types._function:
      if (!declaration) this.unexpected();
      return this.parseFunctionStatement(node);

    case _types.types._class:
      if (!declaration) this.unexpected();
      this.takeDecorators(node);
      return this.parseClass(node, true);

    case _types.types._if:
      return this.parseIfStatement(node);
    case _types.types._return:
      return this.parseReturnStatement(node);
    case _types.types._switch:
      return this.parseSwitchStatement(node);
    case _types.types._throw:
      return this.parseThrowStatement(node);
    case _types.types._try:
      return this.parseTryStatement(node);

    case _types.types._let:
    case _types.types._const:
      if (!declaration) this.unexpected(); // NOTE: falls through to _var

    case _types.types._var:
      return this.parseVarStatement(node, starttype);

    case _types.types._while:
      return this.parseWhileStatement(node);
    case _types.types._with:
      return this.parseWithStatement(node);
    case _types.types.braceL:
      return this.parseBlock();
    case _types.types.semi:
      return this.parseEmptyStatement(node);
    case _types.types._export:
    case _types.types._import:
      if (!this.options.allowImportExportEverywhere) {
        if (!topLevel) {
          this.raise(this.state.start, "'import' and 'export' may only appear at the top level");
        }

        if (!this.inModule) {
          this.raise(this.state.start, "'import' and 'export' may appear only with 'sourceType: module'");
        }
      }
      return starttype === _types.types._import ? this.parseImport(node) : this.parseExport(node);

    case _types.types.name:
      if (this.state.value === "async") {
        // peek ahead and see if next token is a function
        var state = this.state.clone();
        this.next();
        if (this.match(_types.types._function) && !this.canInsertSemicolon()) {
          this.expect(_types.types._function);
          return this.parseFunction(node, true, false, true);
        } else {
          this.state = state;
        }
      }
  }

  // If the statement does not start with a statement keyword or a
  // brace, it's an ExpressionStatement or LabeledStatement. We
  // simply start parsing an expression, and afterwards, if the
  // next token is a colon and the expression was a simple
  // Identifier node, we switch to interpreting it as a label.
  var maybeName = this.state.value;
  var expr = this.parseExpression();

  if (starttype === _types.types.name && expr.type === "Identifier" && this.eat(_types.types.colon)) {
    return this.parseLabeledStatement(node, maybeName, expr);
  } else {
    return this.parseExpressionStatement(node, expr);
  }
};

pp.takeDecorators = function (node) {
  if (this.state.decorators.length) {
    node.decorators = this.state.decorators;
    this.state.decorators = [];
  }
};

pp.parseDecorators = function (allowExport) {
  while (this.match(_types.types.at)) {
    this.state.decorators.push(this.parseDecorator());
  }

  if (allowExport && this.match(_types.types._export)) {
    return;
  }

  if (!this.match(_types.types._class)) {
    this.raise(this.state.start, "Leading decorators must be attached to a class declaration");
  }
};

pp.parseDecorator = function () {
  if (!this.hasPlugin("decorators")) {
    this.unexpected();
  }
  var node = this.startNode();
  this.next();
  node.expression = this.parseMaybeAssign();
  return this.finishNode(node, "Decorator");
};

pp.parseBreakContinueStatement = function (node, keyword) {
  var isBreak = keyword === "break";
  this.next();

  if (this.isLineTerminator()) {
    node.label = null;
  } else if (!this.match(_types.types.name)) {
    this.unexpected();
  } else {
    node.label = this.parseIdentifier();
    this.semicolon();
  }

  // Verify that there is an actual destination to break or
  // continue to.
  var i = void 0;
  for (i = 0; i < this.state.labels.length; ++i) {
    var lab = this.state.labels[i];
    if (node.label == null || lab.name === node.label.name) {
      if (lab.kind != null && (isBreak || lab.kind === "loop")) break;
      if (node.label && isBreak) break;
    }
  }
  if (i === this.state.labels.length) this.raise(node.start, "Unsyntactic " + keyword);
  return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
};

pp.parseDebuggerStatement = function (node) {
  this.next();
  this.semicolon();
  return this.finishNode(node, "DebuggerStatement");
};

pp.parseDoStatement = function (node) {
  this.next();
  this.state.labels.push(loopLabel);
  node.body = this.parseStatement(false);
  this.state.labels.pop();
  this.expect(_types.types._while);
  node.test = this.parseParenExpression();
  this.eat(_types.types.semi);
  return this.finishNode(node, "DoWhileStatement");
};

// Disambiguating between a `for` and a `for`/`in` or `for`/`of`
// loop is non-trivial. Basically, we have to parse the init `var`
// statement or expression, disallowing the `in` operator (see
// the second parameter to `parseExpression`), and then check
// whether the next token is `in` or `of`. When there is no init
// part (semicolon immediately after the opening parenthesis), it
// is a regular `for` loop.

pp.parseForStatement = function (node) {
  this.next();
  this.state.labels.push(loopLabel);

  var forAwait = false;
  if (this.hasPlugin("asyncGenerators") && this.state.inAsync && this.isContextual("await")) {
    forAwait = true;
    this.next();
  }
  this.expect(_types.types.parenL);

  if (this.match(_types.types.semi)) {
    if (forAwait) {
      this.unexpected();
    }
    return this.parseFor(node, null);
  }

  if (this.match(_types.types._var) || this.match(_types.types._let) || this.match(_types.types._const)) {
    var _init = this.startNode(),
        varKind = this.state.type;
    this.next();
    this.parseVar(_init, true, varKind);
    this.finishNode(_init, "VariableDeclaration");

    if (this.match(_types.types._in) || this.isContextual("of")) {
      if (_init.declarations.length === 1 && !_init.declarations[0].init) {
        return this.parseForIn(node, _init, forAwait);
      }
    }
    if (forAwait) {
      this.unexpected();
    }
    return this.parseFor(node, _init);
  }

  var refShorthandDefaultPos = { start: 0 };
  var init = this.parseExpression(true, refShorthandDefaultPos);
  if (this.match(_types.types._in) || this.isContextual("of")) {
    this.toAssignable(init);
    this.checkLVal(init);
    return this.parseForIn(node, init, forAwait);
  } else if (refShorthandDefaultPos.start) {
    this.unexpected(refShorthandDefaultPos.start);
  }
  if (forAwait) {
    this.unexpected();
  }
  return this.parseFor(node, init);
};

pp.parseFunctionStatement = function (node) {
  this.next();
  return this.parseFunction(node, true);
};

pp.parseIfStatement = function (node) {
  this.next();
  node.test = this.parseParenExpression();
  node.consequent = this.parseStatement(false);
  node.alternate = this.eat(_types.types._else) ? this.parseStatement(false) : null;
  return this.finishNode(node, "IfStatement");
};

pp.parseReturnStatement = function (node) {
  if (!this.state.inFunction && !this.options.allowReturnOutsideFunction) {
    this.raise(this.state.start, "'return' outside of function");
  }

  this.next();

  // In `return` (and `break`/`continue`), the keywords with
  // optional arguments, we eagerly look for a semicolon or the
  // possibility to insert one.

  if (this.isLineTerminator()) {
    node.argument = null;
  } else {
    node.argument = this.parseExpression();
    this.semicolon();
  }

  return this.finishNode(node, "ReturnStatement");
};

pp.parseSwitchStatement = function (node) {
  this.next();
  node.discriminant = this.parseParenExpression();
  node.cases = [];
  this.expect(_types.types.braceL);
  this.state.labels.push(switchLabel);

  // Statements under must be grouped (by label) in SwitchCase
  // nodes. `cur` is used to keep the node that we are currently
  // adding statements to.

  var cur = void 0;
  for (var sawDefault; !this.match(_types.types.braceR);) {
    if (this.match(_types.types._case) || this.match(_types.types._default)) {
      var isCase = this.match(_types.types._case);
      if (cur) this.finishNode(cur, "SwitchCase");
      node.cases.push(cur = this.startNode());
      cur.consequent = [];
      this.next();
      if (isCase) {
        cur.test = this.parseExpression();
      } else {
        if (sawDefault) this.raise(this.state.lastTokStart, "Multiple default clauses");
        sawDefault = true;
        cur.test = null;
      }
      this.expect(_types.types.colon);
    } else {
      if (cur) {
        cur.consequent.push(this.parseStatement(true));
      } else {
        this.unexpected();
      }
    }
  }
  if (cur) this.finishNode(cur, "SwitchCase");
  this.next(); // Closing brace
  this.state.labels.pop();
  return this.finishNode(node, "SwitchStatement");
};

pp.parseThrowStatement = function (node) {
  this.next();
  if (_whitespace.lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start))) this.raise(this.state.lastTokEnd, "Illegal newline after throw");
  node.argument = this.parseExpression();
  this.semicolon();
  return this.finishNode(node, "ThrowStatement");
};

// Reused empty array added for node fields that are always empty.

var empty = [];

pp.parseTryStatement = function (node) {
  this.next();

  node.block = this.parseBlock();
  node.handler = null;

  if (this.match(_types.types._catch)) {
    var clause = this.startNode();
    this.next();

    this.expect(_types.types.parenL);
    clause.param = this.parseBindingAtom();
    this.checkLVal(clause.param, true, Object.create(null));
    this.expect(_types.types.parenR);

    clause.body = this.parseBlock();
    node.handler = this.finishNode(clause, "CatchClause");
  }

  node.guardedHandlers = empty;
  node.finalizer = this.eat(_types.types._finally) ? this.parseBlock() : null;

  if (!node.handler && !node.finalizer) {
    this.raise(node.start, "Missing catch or finally clause");
  }

  return this.finishNode(node, "TryStatement");
};

pp.parseVarStatement = function (node, kind) {
  this.next();
  this.parseVar(node, false, kind);
  this.semicolon();
  return this.finishNode(node, "VariableDeclaration");
};

pp.parseWhileStatement = function (node) {
  this.next();
  node.test = this.parseParenExpression();
  this.state.labels.push(loopLabel);
  node.body = this.parseStatement(false);
  this.state.labels.pop();
  return this.finishNode(node, "WhileStatement");
};

pp.parseWithStatement = function (node) {
  if (this.state.strict) this.raise(this.state.start, "'with' in strict mode");
  this.next();
  node.object = this.parseParenExpression();
  node.body = this.parseStatement(false);
  return this.finishNode(node, "WithStatement");
};

pp.parseEmptyStatement = function (node) {
  this.next();
  return this.finishNode(node, "EmptyStatement");
};

pp.parseLabeledStatement = function (node, maybeName, expr) {
  for (var _iterator = this.state.labels, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
    var _ref;

    if (_isArray) {
      if (_i >= _iterator.length) break;
      _ref = _iterator[_i++];
    } else {
      _i = _iterator.next();
      if (_i.done) break;
      _ref = _i.value;
    }

    var _label = _ref;

    if (_label.name === maybeName) {
      this.raise(expr.start, "Label '" + maybeName + "' is already declared");
    }
  }

  var kind = this.state.type.isLoop ? "loop" : this.match(_types.types._switch) ? "switch" : null;
  for (var i = this.state.labels.length - 1; i >= 0; i--) {
    var label = this.state.labels[i];
    if (label.statementStart === node.start) {
      label.statementStart = this.state.start;
      label.kind = kind;
    } else {
      break;
    }
  }

  this.state.labels.push({ name: maybeName, kind: kind, statementStart: this.state.start });
  node.body = this.parseStatement(true);
  this.state.labels.pop();
  node.label = expr;
  return this.finishNode(node, "LabeledStatement");
};

pp.parseExpressionStatement = function (node, expr) {
  node.expression = expr;
  this.semicolon();
  return this.finishNode(node, "ExpressionStatement");
};

// Parse a semicolon-enclosed block of statements, handling `"use
// strict"` declarations when `allowStrict` is true (used for
// function bodies).

pp.parseBlock = function (allowDirectives) {
  var node = this.startNode();
  this.expect(_types.types.braceL);
  this.parseBlockBody(node, allowDirectives, false, _types.types.braceR);
  return this.finishNode(node, "BlockStatement");
};

// TODO

pp.parseBlockBody = function (node, allowDirectives, topLevel, end) {
  node.body = [];
  node.directives = [];

  var parsedNonDirective = false;
  var oldStrict = void 0;
  var octalPosition = void 0;

  while (!this.eat(end)) {
    if (!parsedNonDirective && this.state.containsOctal && !octalPosition) {
      octalPosition = this.state.octalPosition;
    }

    var stmt = this.parseStatement(true, topLevel);

    if (allowDirectives && !parsedNonDirective && stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized) {
      var directive = this.stmtToDirective(stmt);
      node.directives.push(directive);

      if (oldStrict === undefined && directive.value.value === "use strict") {
        oldStrict = this.state.strict;
        this.setStrict(true);

        if (octalPosition) {
          this.raise(octalPosition, "Octal literal in strict mode");
        }
      }

      continue;
    }

    parsedNonDirective = true;
    node.body.push(stmt);
  }

  if (oldStrict === false) {
    this.setStrict(false);
  }
};

// Parse a regular `for` loop. The disambiguation code in
// `parseStatement` will already have parsed the init statement or
// expression.

pp.parseFor = function (node, init) {
  node.init = init;
  this.expect(_types.types.semi);
  node.test = this.match(_types.types.semi) ? null : this.parseExpression();
  this.expect(_types.types.semi);
  node.update = this.match(_types.types.parenR) ? null : this.parseExpression();
  this.expect(_types.types.parenR);
  node.body = this.parseStatement(false);
  this.state.labels.pop();
  return this.finishNode(node, "ForStatement");
};

// Parse a `for`/`in` and `for`/`of` loop, which are almost
// same from parser's perspective.

pp.parseForIn = function (node, init, forAwait) {
  var type = void 0;
  if (forAwait) {
    this.eatContextual("of");
    type = "ForAwaitStatement";
  } else {
    type = this.match(_types.types._in) ? "ForInStatement" : "ForOfStatement";
    this.next();
  }
  node.left = init;
  node.right = this.parseExpression();
  this.expect(_types.types.parenR);
  node.body = this.parseStatement(false);
  this.state.labels.pop();
  return this.finishNode(node, type);
};

// Parse a list of variable declarations.

pp.parseVar = function (node, isFor, kind) {
  node.declarations = [];
  node.kind = kind.keyword;
  for (;;) {
    var decl = this.startNode();
    this.parseVarHead(decl);
    if (this.eat(_types.types.eq)) {
      decl.init = this.parseMaybeAssign(isFor);
    } else if (kind === _types.types._const && !(this.match(_types.types._in) || this.isContextual("of"))) {
      this.unexpected();
    } else if (decl.id.type !== "Identifier" && !(isFor && (this.match(_types.types._in) || this.isContextual("of")))) {
      this.raise(this.state.lastTokEnd, "Complex binding patterns require an initialization value");
    } else {
      decl.init = null;
    }
    node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
    if (!this.eat(_types.types.comma)) break;
  }
  return node;
};

pp.parseVarHead = function (decl) {
  decl.id = this.parseBindingAtom();
  this.checkLVal(decl.id, true);
};

// Parse a function declaration or literal (depending on the
// `isStatement` parameter).

pp.parseFunction = function (node, isStatement, allowExpressionBody, isAsync, optionalId) {
  var oldInMethod = this.state.inMethod;
  this.state.inMethod = false;

  this.initFunction(node, isAsync);

  if (this.match(_types.types.star)) {
    if (node.async && !this.hasPlugin("asyncGenerators")) {
      this.unexpected();
    } else {
      node.generator = true;
      this.next();
    }
  }

  if (isStatement && !optionalId && !this.match(_types.types.name) && !this.match(_types.types._yield)) {
    this.unexpected();
  }

  if (this.match(_types.types.name) || this.match(_types.types._yield)) {
    node.id = this.parseBindingIdentifier();
  }

  this.parseFunctionParams(node);
  this.parseFunctionBody(node, allowExpressionBody);

  this.state.inMethod = oldInMethod;

  return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression");
};

pp.parseFunctionParams = function (node) {
  this.expect(_types.types.parenL);
  node.params = this.parseBindingList(_types.types.parenR);
};

// Parse a class declaration or literal (depending on the
// `isStatement` parameter).

pp.parseClass = function (node, isStatement, optionalId) {
  this.next();
  this.parseClassId(node, isStatement, optionalId);
  this.parseClassSuper(node);
  this.parseClassBody(node);
  return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
};

pp.isClassProperty = function () {
  return this.match(_types.types.eq) || this.isLineTerminator();
};

pp.isClassMutatorStarter = function () {
  return false;
};

pp.parseClassBody = function (node) {
  // class bodies are implicitly strict
  var oldStrict = this.state.strict;
  this.state.strict = true;

  var hadConstructorCall = false;
  var hadConstructor = false;
  var decorators = [];
  var classBody = this.startNode();

  classBody.body = [];

  this.expect(_types.types.braceL);

  while (!this.eat(_types.types.braceR)) {
    if (this.eat(_types.types.semi)) {
      continue;
    }

    if (this.match(_types.types.at)) {
      decorators.push(this.parseDecorator());
      continue;
    }

    var method = this.startNode();

    // steal the decorators if there are any
    if (decorators.length) {
      method.decorators = decorators;
      decorators = [];
    }

    var isConstructorCall = false;
    var isMaybeStatic = this.match(_types.types.name) && this.state.value === "static";
    var isGenerator = this.eat(_types.types.star);
    var isGetSet = false;
    var isAsync = false;

    this.parsePropertyName(method);

    method.static = isMaybeStatic && !this.match(_types.types.parenL);
    if (method.static) {
      if (isGenerator) this.unexpected();
      isGenerator = this.eat(_types.types.star);
      this.parsePropertyName(method);
    }

    if (!isGenerator && method.key.type === "Identifier" && !method.computed) {
      if (this.isClassProperty()) {
        classBody.body.push(this.parseClassProperty(method));
        continue;
      }

      if (this.hasPlugin("classConstructorCall") && method.key.name === "call" && this.match(_types.types.name) && this.state.value === "constructor") {
        isConstructorCall = true;
        this.parsePropertyName(method);
      }
    }

    var isAsyncMethod = !this.match(_types.types.parenL) && !method.computed && method.key.type === "Identifier" && method.key.name === "async";
    if (isAsyncMethod) {
      if (this.hasPlugin("asyncGenerators") && this.eat(_types.types.star)) isGenerator = true;
      isAsync = true;
      this.parsePropertyName(method);
    }

    method.kind = "method";

    if (!method.computed) {
      var key = method.key;

      // handle get/set methods
      // eg. class Foo { get bar() {} set bar() {} }

      if (!isAsync && !isGenerator && !this.isClassMutatorStarter() && key.type === "Identifier" && !this.match(_types.types.parenL) && (key.name === "get" || key.name === "set")) {
        isGetSet = true;
        method.kind = key.name;
        key = this.parsePropertyName(method);
      }

      // disallow invalid constructors
      var isConstructor = !isConstructorCall && !method.static && (key.type === "Identifier" && key.name === "constructor" || key.type === "StringLiteral" && key.value === "constructor");
      if (isConstructor) {
        if (hadConstructor) this.raise(key.start, "Duplicate constructor in the same class");
        if (isGetSet) this.raise(key.start, "Constructor can't have get/set modifier");
        if (isGenerator) this.raise(key.start, "Constructor can't be a generator");
        if (isAsync) this.raise(key.start, "Constructor can't be an async function");
        method.kind = "constructor";
        hadConstructor = true;
      }

      // disallow static prototype method
      var isStaticPrototype = method.static && (key.type === "Identifier" && key.name === "prototype" || key.type === "StringLiteral" && key.value === "prototype");
      if (isStaticPrototype) {
        this.raise(key.start, "Classes may not have static property named prototype");
      }
    }

    // convert constructor to a constructor call
    if (isConstructorCall) {
      if (hadConstructorCall) this.raise(method.start, "Duplicate constructor call in the same class");
      method.kind = "constructorCall";
      hadConstructorCall = true;
    }

    // disallow decorators on class constructors
    if ((method.kind === "constructor" || method.kind === "constructorCall") && method.decorators) {
      this.raise(method.start, "You can't attach decorators to a class constructor");
    }

    this.parseClassMethod(classBody, method, isGenerator, isAsync);

    // get methods aren't allowed to have any parameters
    // set methods must have exactly 1 parameter
    if (isGetSet) {
      var paramCount = method.kind === "get" ? 0 : 1;
      if (method.params.length !== paramCount) {
        var start = method.start;
        if (method.kind === "get") {
          this.raise(start, "getter should have no params");
        } else {
          this.raise(start, "setter should have exactly one param");
        }
      }
    }
  }

  if (decorators.length) {
    this.raise(this.state.start, "You have trailing decorators with no method");
  }

  node.body = this.finishNode(classBody, "ClassBody");

  this.state.strict = oldStrict;
};

pp.parseClassProperty = function (node) {
  if (this.match(_types.types.eq)) {
    if (!this.hasPlugin("classProperties")) this.unexpected();
    this.next();
    node.value = this.parseMaybeAssign();
  } else {
    node.value = null;
  }
  this.semicolon();
  return this.finishNode(node, "ClassProperty");
};

pp.parseClassMethod = function (classBody, method, isGenerator, isAsync) {
  this.parseMethod(method, isGenerator, isAsync);
  classBody.body.push(this.finishNode(method, "ClassMethod"));
};

pp.parseClassId = function (node, isStatement, optionalId) {
  if (this.match(_types.types.name)) {
    node.id = this.parseIdentifier();
  } else {
    if (optionalId || !isStatement) {
      node.id = null;
    } else {
      this.unexpected();
    }
  }
};

pp.parseClassSuper = function (node) {
  node.superClass = this.eat(_types.types._extends) ? this.parseExprSubscripts() : null;
};

// Parses module export declaration.

pp.parseExport = function (node) {
  this.next();
  // export * from '...'
  if (this.match(_types.types.star)) {
    var specifier = this.startNode();
    this.next();
    if (this.hasPlugin("exportExtensions") && this.eatContextual("as")) {
      specifier.exported = this.parseIdentifier();
      node.specifiers = [this.finishNode(specifier, "ExportNamespaceSpecifier")];
      this.parseExportSpecifiersMaybe(node);
      this.parseExportFrom(node, true);
    } else {
      this.parseExportFrom(node, true);
      return this.finishNode(node, "ExportAllDeclaration");
    }
  } else if (this.hasPlugin("exportExtensions") && this.isExportDefaultSpecifier()) {
    var _specifier = this.startNode();
    _specifier.exported = this.parseIdentifier(true);
    node.specifiers = [this.finishNode(_specifier, "ExportDefaultSpecifier")];
    if (this.match(_types.types.comma) && this.lookahead().type === _types.types.star) {
      this.expect(_types.types.comma);
      var _specifier2 = this.startNode();
      this.expect(_types.types.star);
      this.expectContextual("as");
      _specifier2.exported = this.parseIdentifier();
      node.specifiers.push(this.finishNode(_specifier2, "ExportNamespaceSpecifier"));
    } else {
      this.parseExportSpecifiersMaybe(node);
    }
    this.parseExportFrom(node, true);
  } else if (this.eat(_types.types._default)) {
    // export default ...
    var expr = this.startNode();
    var needsSemi = false;
    if (this.eat(_types.types._function)) {
      expr = this.parseFunction(expr, true, false, false, true);
    } else if (this.match(_types.types._class)) {
      expr = this.parseClass(expr, true, true);
    } else {
      needsSemi = true;
      expr = this.parseMaybeAssign();
    }
    node.declaration = expr;
    if (needsSemi) this.semicolon();
    this.checkExport(node);
    return this.finishNode(node, "ExportDefaultDeclaration");
  } else if (this.state.type.keyword || this.shouldParseExportDeclaration()) {
    node.specifiers = [];
    node.source = null;
    node.declaration = this.parseExportDeclaration(node);
  } else {
    // export { x, y as z } [from '...']
    node.declaration = null;
    node.specifiers = this.parseExportSpecifiers();
    this.parseExportFrom(node);
  }
  this.checkExport(node);
  return this.finishNode(node, "ExportNamedDeclaration");
};

pp.parseExportDeclaration = function () {
  return this.parseStatement(true);
};

pp.isExportDefaultSpecifier = function () {
  if (this.match(_types.types.name)) {
    return this.state.value !== "type" && this.state.value !== "async" && this.state.value !== "interface";
  }

  if (!this.match(_types.types._default)) {
    return false;
  }

  var lookahead = this.lookahead();
  return lookahead.type === _types.types.comma || lookahead.type === _types.types.name && lookahead.value === "from";
};

pp.parseExportSpecifiersMaybe = function (node) {
  if (this.eat(_types.types.comma)) {
    node.specifiers = node.specifiers.concat(this.parseExportSpecifiers());
  }
};

pp.parseExportFrom = function (node, expect) {
  if (this.eatContextual("from")) {
    node.source = this.match(_types.types.string) ? this.parseExprAtom() : this.unexpected();
    this.checkExport(node);
  } else {
    if (expect) {
      this.unexpected();
    } else {
      node.source = null;
    }
  }

  this.semicolon();
};

pp.shouldParseExportDeclaration = function () {
  return this.isContextual("async");
};

pp.checkExport = function (node) {
  if (this.state.decorators.length) {
    var isClass = node.declaration && (node.declaration.type === "ClassDeclaration" || node.declaration.type === "ClassExpression");
    if (!node.declaration || !isClass) {
      this.raise(node.start, "You can only use decorators on an export when exporting a class");
    }
    this.takeDecorators(node.declaration);
  }
};

// Parses a comma-separated list of module exports.

pp.parseExportSpecifiers = function () {
  var nodes = [];
  var first = true;
  var needsFrom = void 0;

  // export { x, y as z } [from '...']
  this.expect(_types.types.braceL);

  while (!this.eat(_types.types.braceR)) {
    if (first) {
      first = false;
    } else {
      this.expect(_types.types.comma);
      if (this.eat(_types.types.braceR)) break;
    }

    var isDefault = this.match(_types.types._default);
    if (isDefault && !needsFrom) needsFrom = true;

    var node = this.startNode();
    node.local = this.parseIdentifier(isDefault);
    node.exported = this.eatContextual("as") ? this.parseIdentifier(true) : node.local.__clone();
    nodes.push(this.finishNode(node, "ExportSpecifier"));
  }

  // https://github.com/ember-cli/ember-cli/pull/3739
  if (needsFrom && !this.isContextual("from")) {
    this.unexpected();
  }

  return nodes;
};

// Parses import declaration.

pp.parseImport = function (node) {
  this.next();

  // import '...'
  if (this.match(_types.types.string)) {
    node.specifiers = [];
    node.source = this.parseExprAtom();
  } else {
    node.specifiers = [];
    this.parseImportSpecifiers(node);
    this.expectContextual("from");
    node.source = this.match(_types.types.string) ? this.parseExprAtom() : this.unexpected();
  }
  this.semicolon();
  return this.finishNode(node, "ImportDeclaration");
};

// Parses a comma-separated list of module imports.

pp.parseImportSpecifiers = function (node) {
  var first = true;
  if (this.match(_types.types.name)) {
    // import defaultObj, { x, y as z } from '...'
    var startPos = this.state.start,
        startLoc = this.state.startLoc;
    node.specifiers.push(this.parseImportSpecifierDefault(this.parseIdentifier(), startPos, startLoc));
    if (!this.eat(_types.types.comma)) return;
  }

  if (this.match(_types.types.star)) {
    var specifier = this.startNode();
    this.next();
    this.expectContextual("as");
    specifier.local = this.parseIdentifier();
    this.checkLVal(specifier.local, true);
    node.specifiers.push(this.finishNode(specifier, "ImportNamespaceSpecifier"));
    return;
  }

  this.expect(_types.types.braceL);
  while (!this.eat(_types.types.braceR)) {
    if (first) {
      first = false;
    } else {
      this.expect(_types.types.comma);
      if (this.eat(_types.types.braceR)) break;
    }

    var _specifier3 = this.startNode();
    _specifier3.imported = this.parseIdentifier(true);
    _specifier3.local = this.eatContextual("as") ? this.parseIdentifier() : _specifier3.imported.__clone();
    this.checkLVal(_specifier3.local, true);
    node.specifiers.push(this.finishNode(_specifier3, "ImportSpecifier"));
  }
};

pp.parseImportSpecifierDefault = function (id, startPos, startLoc) {
  var node = this.startNodeAt(startPos, startLoc);
  node.local = id;
  this.checkLVal(node.local, true);
  return this.finishNode(node, "ImportDefaultSpecifier");
};

redpajama_set_name: RedPajamaGithub


Several North Texas residents were relieved to finally be home Tuesday night after their original flight suffered an engine failure and had to make an emergency landing in Philadelphia.
Two flights with passengers from Philadelphia finally made it home to Dallas shortly before 10 p.m. Their family members anxiously awaited their arrival through the gates at Dallas Love Field.
Sharon Pelzel had an emotional reunion with her son, Jason, as he stepped off the plane and finally arrived home.
"It is a miracle that the crew made this happen today. We're so thankful," Sharon said.
"We heard a big bang," recalled Cherub Ruth. "Like some sort of explosive sound."
"There was a loud boom," said passenger Sheri Sears. "The oxygen masks came down, and we just put our oxygen masks on."
Tim McGinty was another passenger on board Flight 1380. He says he helped the injured woman who later died.
Passengers performed CPR but Riordan later died of her injuries. Seven others had minor injuries.
Tammie Jo Shults is a former f-18 Navy pilot and one of the first female fighter pilots in the U.S. military. She brought the plane down more than 20,000 feet in five minutes.
"It didn't feel like it was like free falling, but it was definitely not… it was an immediate realization that something was wrong and something was like not going to be right," said passenger Anna Montie.
But Captain Shults was then able to stabilize the cabin pressure and make an emergency landing at the Philadelphia airport.
Passengers said it was terrifying as they were descending into the emergency landing situation. Many of them thought they were going to die. Still, they gave the captain got a round of applause after safely landing the aircraft. One passenger said she has "nerves of steel."


GFB's EBC (Electronic Boost Controller) range offers the most "bang-for-your-buck" of any EBC on the market, with features rivalling much more expensive units AND remaining incredibly easy to use.
Boost control begins with a massive 50psi (3.5BAR) capability, and the 6 individually configurable presets allow for enough settings to suit all driving conditions. Presets can be selected at the press of a button or triggered remotely, and for each preset it is possible to tune the peak boost, boost rise rate, and the strength of the closed loop correction.
This means you can change how much boost you have, how fast the boost comes on, and how hard the controller will correct for boost variations.
Our unique "scramble" feature allows you to jump to a dedicated boost preset for a user-adjustable amount of time, and can be activated on the screen or remotely using any kind of switch, button, or programmable ECU output. The uses for this feature are limited only by your imagination – you can raise or lower boost based on time, a manual button or switch, or trigger automatically based on engine conditions. For example, use a toggle switch for high/low boost, steering wheel/gearshift button for push-to-pass, use the timer for launch control, or drop boost pressure if your oil/water temperature is high or the water/meth system runs dry.
An important point of difference with GFB's EBCs is the simple and intuitive user interface. By using capacitive touch buttons, scrolling text, and a logical menu layout, you'll find our EBCs are a pleasure to use. You can even choose your preferred boost units and customize the button lighting colour to match your car's dash!
There are 2 main components of a boost control system on a turbocharged engine: the wastegate with actuator and the boost controller. Note that some turbo cars do not use a boost controller as such, instead they rely on the spring rate in the wastegate actuator to achieve the desired boost level.
There are two types of wastegates; internal and external. Internal wastegates are found on the vast majority of turbo cars, where a flap-type valve is built into the turbocharger exhaust housing, and is opened by a remote diaphragm actuator. The external type usually use a poppet-style valve attached directly to the diaphragm actuator as one unit, which is plumbed into the exhaust header before the turbo, and dumps back into the exhaust after the turbo.
Both types of wastegate open a path for exhaust gas to bypass the turbo, thereby limiting the amount of gas available for making boost. The diaphragm actuators in both cases are controlled by the boost pressure itself, which creates a feedback loop boost control system; as the boost pressure increases, it pushes the diaphragm actuator (and therefore the wastegate valve) further open, which results in the boost stabilizing at a set level determined by the spring rate in the actuator.
A boost control device is commonly used in modern turbo engines which alters the boost signal that reaches the wastegate actuator. If the actuator sees a lower boost signal than is actually present, the wastegate will open less. This results in greater exhaust gas flow through the turbo, which increases boost. For example, if the actuator spring is set to 7 psi (i.e. when the valve is fully open, boost level is 7 psi) but the boost control device only allows 5 psi to reach the actuator, it will open the wastegate valve less, so more exhaust flows through the turbo, spinning it more quickly, so that the actual boost produced will be greater than 7 psi; say, 10 psi.
The boost control device is designed to reduce the pressure reaching the actuator, which it does by 'bleeding off' a specific amount of air from the supply hose. This can be done electronically through the ECU by pulsing a solenoid-type valve in the supply hose, or mechanically by placing a 'controlled leak' in the supply hose.
GFB boost controllers are the latter type, which may not sound incredibly scientific, but there are a few design criteria that are critical to performance. Essentially, a GFB boost controller receives boost pressure from the turbo compressor, passes it through a restrictor (which is necessary, or the turbo would simply fill the supply hose as fast as the controller could bleed it off), where a measured amount of air is bled out of the hose that leads to the wastegate actuator. Note that it is not possible to reduce the boost level below the setting of the actuator spring, only increase it. It is however possible to reduce boost below standard on cars that originally had ECU/solenoid controlled boost.
Do GFB boost controllers use a ball and spring?
No. Some manufacturers use a 'ball and spring' arrangement in their manual boost controllers, with the claim that it brings the boost on faster by keeping the wastegate closed until the boost has nearly reached it's peak level. This is a sound idea in theory, however it is worth noting that the "gated" ball-and-spring system offered by other manufacturers is incapable of holding back more than a paltry 2psi - certainly not enough to live up to the advertising claims.
Another nail in the coffin for the ball-and-srping design is poor boost stability. Since it is a dynamic system, and the ball can move slightly differently each time your engine comes on boost, the size and flow properties of the flow path through the restrictor and around the ball can change each time. This can lead to poor boost stability and random variations in peak boost level. The ball can even flap around like a pea in a referee's whistle whilst air is flowing through, resulting in a fluctuating output signal from the controller. Grab a boost gauge, a compressed air supply and a pressure regulator and see for yourself.
GFB boost controllers use a more consistent needle-valve bleed system, which brings brings boost on just as fast as any ball-and-spring system, and generally more quickly than a factory boost control system.
How much extra boost can I run when using a GFB boost controller?
It is very important to be sensible when raising the boost limit on turbocharged cars. Power is directly related to the amount of air and fuel that makes it to the engine cylinders, but lifting the boost level is only one way of doing this. While in most cases it is quite safe to increase the boost by about 10-20%, keep in mind that every component in an engine comes from the factory designed to operate most efficiently at the level it leaves the factory at. If you intend to raise the boost to any more than 20% above factory, you will need to check things like fuel delivery, the intercooler, ignition timing, etc to ensure that they are capable of supporting the increase in power. It is also important to realise the mechanical limits of components, a good example being the ceramic turbine wheels in the turbos found in Skylines, which will take no more than about 14psi without losing blades.
To get the most out of the extra boost it is best to ensure that the engine can breathe properly. A good exhaust is the first place to start. Then follow the inlet tract all the way to the engine, looking for restrictions in the form of resonators, sharp bends or reductions in diameter. Manufacturers will often purposely build in such restrictions to muffle intake noise or prevent overboosting. Removing airflow restrictions means the turbo doesn't have to work as hard to get the boost to the engine.
Why does the boost in my car tend to taper off with increased boost at high RPM?
This is a sign that your turbo system is nearing the limit of its efficiency. Most factory turbos have small turbine housings to reduce lag, but the problem is at high RPM it can cause a large enough restriction to push the wastegate open as the revs increase, often referred to as wastegate creep.
This can also be caused by restrictions in the factory turbo compressor inlet and outlet pipes that also contribute to tapering boost levels, such as convoluted hose sections. The boost controller usually gets its boost signal from directly after the turbo, so the boost at this point is often likely to hold steady. However, restrictions further downstream (corrugated pipes, small intercooler, sharp bends or reductions in diameter) will cause a pressure drop at elevated RPM, particularly if the car is modified and making more power than factory.
It is also important to realise that in stock or mildly modified engines it is probably much safer to drop the boost level a little towards redline. The inertial loads on the reciprocating components increase exponentially with RPM, which is why you will often see the factory ECU drop a few psi near redline. Generally this will occur on cars with small factory turbos, and it is probably in the best interests of the health of the turbo for this to happen unless your engine is built to handle it.


This entry was posted on Monday, January 12th, 2015 at 10:28 am CST and is filed under Books, Deals & Sales. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


What is the weekly fee?
When purchasing a home at Easy Living Villages, you are entering into a lease agreement on the land which your home is situated. This lease attracts a weekly fee and gives you exclusive right to occupy the land and to use and enjoy the facilities within the village.
**This is a general discount applied, there may be some variation at each village. Please confirm the applicable site fee and electricity discount when enquiring.


text:
What Animals Live In A Lair?
Bears ,fox,badgers,wolverine,some snakes
What Animals Live In Africa?
Africa has a wide and exciting array of animals. One of the key icons is of course the magnificent elephant....
What Animals Live In Nama-karoo?
Nama Karoo is a semi-desert region in Africa. It is also known as the Great Karoo. It is located in the...
What Animals Live In The Desert?
Well, for starters, the worst animal in existence: Snakes. You also have a variety of insects, like spiders,...
What Animals Live In The Jungle?
Name animals that begin with the letter "D" that live in the jungle. Good luck!!...
What Animals Live In A Dry Climate?
Snakes, lizards, tortoises, coyotes, bobcats, deer, cougar and many other animals live in dry climates...
What Animals Live In A River Ecosystem?
fish frogs turtles salamanders insects rodents...
What Animals Live In Zaire, Africa?
Elephants...
What Is A List Of Animals That Live In A Pond?
Frog, bufo, tadpole, fish, shrimp, Enhydris chinensis, Lutra lutra, tortoise and so on....
what kind of animals live in Egypt?
Camels, snakes, hamsters, gerbils, spiders, horses, monkeys...
what domestic animals live in the taiga?
Where is Taiga?...
Are Foxes Mean Animals?
What Do Foxes Look Like?
What Do Foxes Do?
Do Animals Need Sunlight To Live?
What Animals Live On Mountains?
Can You Remember Any Foods That You Loved And Can't Find Anymore?
What is the worse thing you had done that your parents don't know?
Can You Plan A Wedding In 3 Months?
When you crave a certain food, is this the body's way of telling you what nutrients you need? Or is it simply what appeals to you at the time?
What does it mean when you get depressed over a girl?
My dad won't let me tryout for cheerleading?
What are things that guys like in girls?

redpajama_set_name: RedPajamaCommonCrawl


text:
Accara es un género monotípico de arbustos de la familia Myrtaceae. Su única especie, Accara elegans (DC.) Landrum, Syst. Bot. 15: 221 (1990), es originaria de Brasil en Minas Gerais y alcanza 1-2 metros de altura.

Anteriormente incluido en el género Myrtus y Psidium, Accara se diferencia de ambos en la diferente estructura embrionaria del último y del primero en ser pentámero (sus partes están de cinco)  y en la estructura de la raíz. El nombre genérico es un anagrama de la ubicación tipo, en Caraça, y es similar al género presumiblemente y estrechamente relacionado de Acca, que hoy en día generalmente se incluye en Feijoa .

Taxonomía
Accara elegans fue descrita por (DC.) L.R.Landrum y publicado en Systematic Botany 15(2): 221. 1990.
Sinonimia
Myrtus elegans DC., Prodr. 3: 240 (1828). basónimo
Psidium elegans (DC.) Mart. ex O.Berg in C.F.P.von Martius & auct. suc. (eds.), Fl. Bras. 14(1): 391 (1857), nom. illeg.
Guajava elegans (DC.) Kuntze, Revis. Gen. Pl. 1: 239 (1891).
Psidium elegans var. angustifolium O.Berg in C.F.P.von Martius & auct. suc. (eds.), Fl. Bras. 14(1): 391 (1857).
Psidium elegans var. latifolium O.Berg in C.F.P.von Martius & auct. suc. (eds.), Fl. Bras. 14(1): 391 (1857).
Myrtus stictophylla Kiaersk., Enum. Myrt. Bras.: 20 (1893).
Psidium stictophyllum (Kiaersk.) Mattos, Loefgrenia 64: 1 (1975).

Referencias

Myrteae
Flora de Brasil
Plantas descritas en 1990
Plantas descritas por de Candolle
Plantas descritas por L.R.Landrum

redpajama_set_name: RedPajamaWikipedia


A home for film, music, art, theater, games, comics, design, photography, and more. Explore creative projects in art, design, film, . Bringing creative projects to life. The 7th Continent fait actuellement campagne sur la plateforme de financement participatif KickStarter oú il est proposé en français et en anglais.
Kickstarter has raised millions for designers and entrepreneurs.
But what happens when no product materializes? Everything from films, games, and music to art, design, and technology. GitHub is where people build software.
A cool new product or piece of technology. La salade de patates récolte finalement 55. Have an idea that needs funding to get off the ground? A non-profit social enterprise focused on lifting millions of African farmers out of poverty by helping them to establish profitable businesses.
Accelerating solutions that work for problems that matter.
Learn more about our 11-week accelerate program and Kickstart your . Brought to you by: WayneSpeilbergRakes_Logo_01. Here are some rough estimates of how it works. Learn the secrets to dominating your crowdfunding project. Upload Kickstart and your backup archive and restore your site in less than.
Find the latest kickstarter news from WIRED. See related science and technology articles, photos, slideshows and videos. A digital media and commerce company that enables creativity through inspirational content and online classes. Soon available in the online store! Read the most important product reviews and follow the tech news and more.
Scroll DOWN to the bottom for all updates! The campaign officially die but never . Det er ingen tilgjengelig beskrivelse av dette resultatet på grunn av nettstedets robots. Backers from around the world . Why would so many people chip in for something as . LaunchBoom is the most effective product launch system and full service marketing agency that manages the entire crowdfunding process from start to finish.
Vous savez, ces sites sur lesquelles on peut mettre notre argent pour financer un . Avez-vous remarqué que les enfants adorent les tablettes ? Liste de 3jeux vidéo par ThoRCX. Athéna, connue pour être la déesse de la guerre, était aussi celle de la paix ainsi que la protectrice de la cité et la gardienne des villes.


Choosing the operators you wish to make available for online bookings only takes a few minutes. Once you have chosen your operators, clients will be able to make online bookings with them.
Log into your Simple Salon account and click Online in the top orange menu bar.
Click the Setup tab and expand the Operators section.
Now, click Add Operators and choose the operators who you want to show online.
These are your operators (stylists, colourists, therapists, beauticians etc) who clients can make online bookings with.
Choose an operator who you'd like to display online and click Save.
Do the same again, click Add Operators and choose the next one from the drop-down menu and click Save. Do this until all of your operators have been added.
You can also Edit or Remove operators. These operators will now be available online for your clients to make online bookings with.
If you haven't already, make sure you set each operator's working hours via the Roster so that their availability will be accurate on the online bookings site. The online booking site will know who is available based on what's on the Roster.
If you have any questions, feel free to send them to us from your Help & Support page via Submit a Request.


I was diagnosed with stage 3 bowel cancer at the age of 35 in September 2015.Before my diagnosis, I was leading a normal life – going to work and looking after my step-children. I had no inkling of what was to come as I didn't have symptoms that could be attributed to bowel cancer.
My cancer was diagnosed purely by chance.
I was due to have a hysterectomy after experiencing gynaecological problems for a decade. I also had lupus, so my medical team wanted to carry out a final CT scan just before the hysterectomy to check on the location of stents which I had in place. An eagle-eyed radiologist spotted a very small spot on the scan and called over a passing bowel specialist to take a look.
I was given a flex- sigmoidoscopy and was told almost immediately that I had bowel cancer. I had a bowel resection to remove the cancer the following November, and a hysterectomy at the same time. A few months later I started a course of chemotherapy.
I now have three-monthly check-ups and yearly scans.
My diagnosis came as a complete shock to me and my family. My dad had just been given the all-clear from prostate cancer and it was hard for my parents to take this news in. It was also very hard for my sister – particularly as she lives in Australia.
I had fantastic support from my medical team including the colorectal nurses who looked after me during my long recovery. The team had a very relaxed attitude to my treatment which encouraged me to think as if I was being treated for something minor like a cold. My age at diagnosis wasn't the biggest thing for me. It was the fact that I had no symptoms and yet I had stage 3 bowel cancer. But I've come out the other end thanks to a great medical team and a positive mental attitude.
I only had about three days during my entire treatment of thinking of 'why me?' I chose to have a very pragmatic attitude and to believe that I just had to get through the treatment and all would be well.
You know your body. If something isn't right keep going back to your doctor.
Sometimes my husband and I look back and find it hard to believe what we have been through. My scars are there as proof of what happened but I also see them as war wounds which remind me that I came out the other end. I now look at life differently. For example, I'm much more aware of the fact that there are people around me who may look ok but who may have hidden disabilities and problems.
Looking back, I wonder if some of the gynaecological symptoms I experienced may have been early signs of bowel cancer.
I was tested for gynaecological issues for 10 years but doctors could never find anything. However, I knew something wasn't right – you know your body and you know when something is wrong. I didn't have typical signs of bowel cancer – no blood for example, and because of my age it didn't cross my mind. I want people to know that bowel cancer is not something that only affects older people. You know your body. If something isn't right keep going back to your doctor.
It's always in the back of my mind. I do worry about every niggle and my GP says he expects to see me more often than before. But I think I'm in a better place now – my doctors are always checking on me.
I feel very fortunate to say that all my recent scans have been clear. I've had some small polyps removed and suffer some stomach pain still. To combat this my consultant has recommended trying a low food map diet. He has also suggested that I may need desensitisation of the nerves around my bowel as they seem to be reacting to high food map foods like beans, sprouts, milk. So I'm now extra careful what I eat.
Though I thought that by this stage everything would be over, I know that I just have to take a little extra care of myself now. It's not ideal but I think it's important to respect what your body has been through and too listen to it if something doesn't feel right .


text:
Woman gives birth with hubby's help in the middle of highway to hospital (WATCH)
In what seems to be a shocking and nerve-wracking moment captured on camera, a strong woman couldn't hold herself and gave birth in the middle of a highway.
This is not a movie, it happened in Canada whilst Troy Campbell and his wife, Erika, were driving on Hwy 407 towards the hospital in preparation to go into labour.
ALSO: A$AP Rocky 1, Don Jazzy 0 As Rapper Confirms Love Affair With Rihanna
In the middle of the journey, Erika realized she could not hold it any longer, hence, got no choice to go into labour in the car to deliver her baby, forcing her husband to park whilst taking instruction from an emergency call they placed with a doctor guiding them through.
The couple were filming the journey of welcoming their third child. Sharing the raw footage, Campbell wrote "this is the actual raw unscripted footage of my wife giving birth to our 3rd baby. Her water broke at approx 5:00 pm and this footage starts at about 5:30 pm when we were on our way to the hospital".
Detailing how it happened, he said "we went into labor and gave birth to our baby in our car on the way to the hospital … we could not have ever anticipated this…it was scary. very scary.
"The camera was rolling for Troys Youtube channel and we were hoping to film at the hospital but we never made it that far," the caption added.
Watch the video below which is going viral on the internet but before you hit play, you must have a strong heart that can hold seeing difficult moments with so much anxiety.
In this article:Car Birth, Featured, Gives Birth, Pregnancy, The Campbell Cloud, Trending


The aroma coming off of this tea as it is steeping is a bit stronger than before. The water is also beginning to turn a deeper shade of yellow.
I notice the difference with this tea right away. The flavor is far deeper and more enjoyable than before. I actually don't taste the grassiness as much, its more of a deep fruity astringency. The flavor hits you on the sides of the tongue and then leaves you with a mouth watering aftertaste.
The tea is really quite good. Even though it has a relatively bold full-bodied taste, it also has a few high notes of fruity, grassy and floral flavors. There is a little bit of a vegetal flavor to this tea, but not as much as you would expect from a Dragonwell.
I would say it differs from the Grade "B" dragonwell in that the flavor profile is far more complex. With the grade "B" dragonwell, you don't get any of the floral characteristics, and you certainly don't get as much of an astringency. This one has a strong fruity, almost citrusy note to it, similar to the Qian Dao Yu Ye teas I tried in the last couple of days.
With the fresh grassiness, brisk astringency and high notes of fresh cut grass and flowers, I think this is the perfect summer tea. As luck would have it, I am currently sitting out on the patio enjoying the sun and all the great wildlife in the backyard. This is such an amazing way to experience a tea and if you find yourself trying a green tea, particularly this green tea, I would highly recommend you take few minutes to sit outside and enjoy it. When I think of oolongs and black teas, I think of curling up on a cold winter or fall day, but when I think of green teas, I think of nice warm summer air and just enjoying the moment surrounded by sun, wind and nature.
This tea is very warm and soothing, but on the other hand, I also notice a little bit of a caffeine buzz. This is not a jittery, coffee type of caffeine, but more of a sustainable energy. I remember this being one of the green teas I particularly notice as giving me some energy, and I thought I would discuss that in the review because after all, how the tea makes you feel is a pretty important part, don't you think?
Even though I do feel a lot of energy from this tea, I am still able to find peace and relaxation. For this reason, I believe this was one of my favorite teas to drink while meditating. You want a nice warm beverage you can sip during meditation, it helps to have an object of focus and also it allows you to stay alert and focus on your breathing as well.
I wanted to steep this tea a second time so I brewed it at the same temperature for a little bit longer. The second steeping tasted far weaker than the first, but that's to be expected. Compared to the grade "B" this tea had a lot more left to give in the second steeping, which I think is indicative of its quality. A lot of the astringency still remains, and I still find that it has that signature, mouthwatering aftertaste. It loses most of it's higher notes, like the floral and the grassy ones. It still maintains a tiny bit of the fruitiness, but it is far less noticeable than before. The tea becomes milder, sweeter and smoother. I find the second steeping of a tea makes it more like a dessert tea. This would be a nice tea to drink in the evening and with very little caffeine it really becomes an ideal choice.
This was such a nice tea tasting. I felt myself get calmer and calmer throughout the course of the tasting. As I drank more tea, I found more of a temptation to just sit back and watch the clouds go by. I wouldn't mind feeling like this all the time!
Thanks everyone for reading this tea review. If you are curious about the other rare Chinese teas I've tried in the past few days please check out some of the other tea reviews in the "Green Tea" and "Oolong Tea" sections. Enjoy!


text:
Q: Manually updating installed signed APK I have an app on google play store right now.I just move my previous java code to kotlin since It is much easier for me. The package are all the same. Problem is on my android studio, when I try to execute the release variant I keep having this install_failed_update_incompatible error. On my searching, I have to remove the old app. Now I am a bit worried. I don't my user base to uninstall the app let alone erase all their data. Is there a way I could update the app without uninstalling it? Sort of like when you update an app from google play store? The data and information are retained except that the old apk is remove?
Everything is the same with my previous java project except that now I am using kotlin. package and even the apk signed key are all the same.
PS on emulator(genymotion) the updating works and even retained the previous information data. but on real device it won't

A: Turns out the apk file release from google play store is a bit different. I don't the difference. I have my old java project executed on release variant on my device and then execute the kotlin version release variant. The update went okay. However when I downloaded my app on google play store and then updated it with my new kotlin version release variant, it failed. Im not sure why but it seems that apk submitted to google play store is being modified.

redpajama_set_name: RedPajamaStackExchange


Armand Nicolet L07 Chronograph Limited Edition 9649AGRP964GR2 is a gents watch, having the reference number 9649A-GR-P964GR2, produced by Armand Nicolet watches, a well known international luxury watch brand. This Armand Nicolet model has an mechanical movement, its case is stainless steel having a genuine leather strap and a sapphire crystal glass. The diameter of the case of the watch (without crown) is 43 mm. Armand Nicolet L07 Chronograph Limited Edition 9649AGRP964GR2 watch is genuine, new, with its original box and comes with 24 months warranty.