diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..1b36bcf3 --- /dev/null +++ b/404.html @@ -0,0 +1,6816 @@ + + + + + + + + + + + + + + + + + + + + + Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + +

Can't find what you're looking for!

+ +

Unfortunately the page or link you are looking for is no longer available, or has moved.

+ +

+ Please use the search function at the top of the page to find what you're looking for.
+ Additionally, you can report this on the Library Issues page. +

+ + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..a215ec21 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +library.arabian-vacc.com \ No newline at end of file diff --git a/aerodrome/Dubai/air/index.html b/aerodrome/Dubai/air/index.html new file mode 100644 index 00000000..e7acbe06 --- /dev/null +++ b/aerodrome/Dubai/air/index.html @@ -0,0 +1,8363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Air Control ("Dubai Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Air Control ("Dubai Tower")

+

5.1 General provisions

+

Air Control (AIR) is responsible for all aerodrome movements on runways and their associated taxiways. AIR shall also ensure separation between IFR aircraft that are arriving at and departing the aerodrome, as well as provide traffic information to VFR aircraft operating within the aerodrome control zone.

+

5.2 Preferential runways

+

The preferred calm wind configuration is departing runway 30R, and landing 30L, which shall be used up to a 5-knot tailwind. When this is unfeasible due to winds or other circumstances, the configuration shall be departing 12R and landing 12L.

+

5.3 Departure procedures

+

5.3.1 Standard departure points

+

Dubai has “standard departure points” from which pilots are expected to base their performance calculations. Aircraft may be tactically issued holding points closer to the runway end to optimise traffic flow or to yield a more efficient departure sequence. If the standard departure point is insufficient, crews must advice ATC of the required departure on first contact. The AIR controller may issue delays for such departures based on runway dependency requirements, as priority is given to the standard departure points.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
30LK15/M18A
30RM13/N8A
12LM1C/N1C
12RK5
+
+
Table 5-1: Standard departure points
+
+

5.3.2 Line up clearances

+

Conditional line up instructions shall include the traffic that the aircraft is to follow, as well as the word “behind” at the beginning and end of the transmission. It is recommended to only have a maximum of two conditional line up clearances active at one i.e., one aircraft lining up behind a departure, and another aircraft lining up behind them.

+
+

Example

+

Controller: "AFR662, behind the departing Emirates A380, via M13A, line up and wait runway 30R behind."

+
+

If aircraft have not yet reached the holding point where they are expected to line up at, ATC shall reiterate the cleared holding point.

+
+

Example

+

Controller: "UAE4KC, via M14A, line up and wait runway 30R."

+
+

5.3.3 Take-off clearances

+

Aircraft shall be cleared for take-off once adequate separation exists as provided in 4.3.4 and 4.6.

+
+

Example

+

Controller: "UAE4KC, wind 330 degrees 7 knots, runway 30R, cleared for take-off."

+
+

5.3.4 Separation requirements

+

5.3.4.1 General

+

Aircraft shall be separated on departure in compliance with standard IFR departure separation minima, enhanced wake turbulence separation (eWTS) requirements or as provided in 4.6 where applicable.

+

Except as provided in 4.3.4.2, succeeding aircraft on the same SID shall be separated by a minimum of 2 minutes.

+

VFR aircraft may be instructed to maintain visual separation with preceding aircraft and given a take-off clearance if no wake turbulence separation minima exists.

+

5.3.4.2 Muscat FIR flow control procedure

+

Special flow control procedures are required for traffic entering the Muscat FIR via certain entry points after departure from UAE airports.

+

During off-peak times, this separation minima may be disregarded, and standard separation minima of 2 minutes may be applied provided it is not done for more than two successive departures.

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
ANVIXTARDI3 minutes
IVUROLALDO/GOMTA3 minutes
+
+
Table 5-2: Flow control procedures for traffic entering the Muscat FIR
+
+
+

Note

+

LALDO and GOMTA are to be considered a common FIR exit point. These procedures do not apply to traffic landing at Oman airports.

+
+

5.3.4.3 Low visibility and IMC

+

During low visibility operations and during IMC, departing aircraft shall not be cleared for take-off when there is an arriving aircraft within 4 NM of the landing runway threshold.

+

5.3.5 IFR handoff procedure

+

5.3.5.1 General

+

IFR departures shall be handed off to the appropriate departure controller as provided in 4.3.5.2 and 4.3.5.3.

+

Except as provided in 4.4.3, aircraft shall be handed off when passing 800 ft to ensure adequate time for a frequency change and avoid a level-off on departure.

+

Where DEP 2 is offline, all handoffs shall be to DEP 1. If DEP 1 is offline, handoffs shall be made to APP.

+

Where no approach controller is present, aircraft shall be handed off directly to the appropriate UAE controller.

+

5.3.5.2 Procedure for 30 configuration

+

IFR aircraft shall be handed off in the following manner:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
EMERU2F
KUTLI4F
MIROT3F
NABIX3F
RIDAP2F
SENPA2F
DAVMO4FDEP 2
IVURO1F
+
+
Table 5-3: Departure handoff procedure (30)
+
+

5.3.5.3 Procedure for 12 configuration

+

IFR aircraft shall be handed off in the following manner:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
EMERU2G
KUTLI4G
MIROT3G
NABIX3G
RIDAP3G
SENPA3G
DAVMO4GDEP 2
IVURO1G
+
+
Table 5-4: Departure handoff procedure (12)
+
+

5.3.6 Omnidirectional departures

+

Aircraft departing on an omnidirectional departure shall be instructed to fly a specific heading on departure appropriate to the Dubai CTA exit point. This departure instruction shall be delivered to the aircraft before issuing the take-off clearance

+

When departing 30L/R, they may be assigned a heading from 270 clockwise to 350. When departing 12L/R, they may be assigned 090 clockwise to 160.

+

These headings shall be coordinated with departures control.

+
+

Example

+

Controller: "AEE959, after departure, turn left heading 270 degrees and maintain 4000ft, wind 280 degrees, 6 knots, runway 30R, cleared for take-off."

+
+

5.3.7 Stopping a departure

+

Aircraft that have commenced their take-off roll may be instructed to stop immediately to avert a collision due to a runway incursion or any other dangerous situation.

+

It must be noted though, that the instruction to stop must be given early enough such that the aircraft does not reach its decision speed. Therefore, aerodrome controllers must be vigilant and remain aware of the location of traffic at all times as well as runway incursion hotspots.

+
+

Example

+

Controller: "UAE1KM, stop immediately, I say again stop immediately, truck entering the runway!"

+
+

For aircraft that have been given a take-off clearance, but have not yet started the roll, they shall be instructed to hold position and the take-off clearance must be cancelled along with the reason for cancellation.

+
+

Example

+

Controller: "FDB687, hold position, cancel take-off, I say again cancel take-off, aircraft entering the runway, acknowledge."

+
+

5.4 Arrival Procedures

+

5.4.1 Preferred exit points

+

On initial contact, aircraft shall be instructed to vacate at a designated taxiway for arrival. The planned exit point shall be one of the preferred exit taxiways (Table 5-2).

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
30LK8
30RM6, N5
12LM9
12RK13
+
+
Table 5-5: Preferred exit points
+
+

5.4.2 Separation requirements

+

5.4.2.1 General

+

While the radar controllers are responsible for separating arriving aircraft, the AIR controller shall still ensure that minimum separation is maintained until the preceding aircraft crosses the runway threshold.

+

5.4.2.2 Speed control

+

If it is apparent that minimum separation may not exist as provided in 4.4.2.1, AIR may use a tactical reduction in aircraft speed.

+
+

Example

+

Controller: "FDB1784, reduce to final approach speed."

+
+

5.4.2.3 Visual separation

+

Aircraft may be instructed to maintain own separation visually, if speed control alone will not resolve the conflict. This shall only be done in VMC and with agreement with the pilot. If no other solutions are practical, the succeeding aircraft shall be instructed to go around.

+

5.4.3 Go-around instruction

+

5.4.3.1 General go-around procedure

+

At any time should a runway become unsuitable for an aircraft landing, or separation minima is not met, aircraft shall be instructed to go-around.

+
+

Example

+

Controller: "UAE797, go around, I say again, go around, acknowledge."

+
+

Once aircraft have acknowledged the instruction and are observed to be safely climbing away, they shall be handed off to departure control.

+
+

Example

+

Controller: "UAE797, climb to 3000ft via standard missed approach, contact Dubai Departures 121.025."

+
+

5.4.3.2 Go-around with simultaneous departure in VMC

+

In the event of a go-around with a simultaneous departure in VMC conditions, the AIR controller shall take the following action:

+
    +
  • If the go-around traffic is within 4 NM of the landing threshold and there is a simultaneous departure, the go-around traffic shall be instructed to climb to 4000 ft and maintain a heading of 270 degrees for 30L, a heading of 330 degrees for 30R or a heading or 090 degrees for 12L. +If the departure is expected to turn into the arriving traffic, the aircraft shall be instructed to maintain runway heading and/or be instructed to stop climb at 3000 feet as appropriate.
  • +
  • If there are no simultaneous departures or if the go-around traffic is further than 4 NM of the landing threshold, the go-around traffic shall be instructed to follow the standard missed approach.
  • +
+

In all cases, instructions for avoiding action shall be issued if there is a risk that the go-around aircraft will overtake the departing aircraft.

+

Departures shall not be permitted to commence their take-off roll until the go-around traffic has passed the upwind threshold of the departure runway.

+

Departure handoffs to Dubai Departures may be delayed to ensure compliance with the requirements as provided above.

+

5.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

Aircraft shall be instructed to follow the standard missed approach and aircraft shall not be permitted to depart if an arriving aircraft is within 4 NM of the landing threshold.

+

5.4.4 Arrival taxi procedures

+

In accordance with the taxi procedures laid down in 3.4, aircraft shall be provided an initial taxi clearance to ensure they are kept moving such that the rapid exit taxiway (RET) is clear for the next arrival.

+

The initial taxi shall include instructions to taxi “LEFT” or “RIGHT” onto the relevant taxiway as appropriate and hold at a suitable intermediate holding point.

+
+

Example

+

Controller: "UAE572M taxi left via J2, hold J2A."

+
+

Once aircraft have been observed to be taxiing and completely clear of the RET, transfer of control shall be initiated to GMC provided there will be no conflicts with other arriving traffic.

+

In accordance with the procedures laid down in 4.9, where the AIR controller’s designated zone of responsibility extends beyond the RET, aircraft shall not be transferred until they are completely clear of the designated zone of responsibility unless it has been assured that all traffic will remain clear of RETs.

+

5.5 Reduced runway separation minima (RRSM)

+

5.5.1 Conditions for the application of RRSM

+

Reduced runway separation may be applied at any time during day or night between:

+
    +
  • A departing aircraft and a succeeding aircraft using a single runway; or
  • +
  • Two successive landing aircraft; or
  • +
  • Two successive departing aircraft.
  • +
+

The following conditions must apply:

+
    +
  • The tailwind component does not exceed 5 knots at the landing threshold and there are no pilots reports of wind shear;
  • +
  • Meteorological visibility is equal to or greater than 5000 metres and cloud ceiling is not less than 1000 ft. The AIR controller should be satisfied that the following aircraft will be able to observe the relevant traffic completely and continuously;
  • +
  • Traffic information is provided to the crew of the succeeding aircraft;
  • +
  • The runway is dry and there is no evidence that braking action will be adversely affected;
  • +
  • The AIR controller is able to assess separation visually or by radar-derived information;
  • +
  • Suitable landmarks and markers on the surface surveillance system shall be available to assist the controller in assessing separation between aircraft;
  • +
  • Wake turbulence separation minima shall be applied;
  • +
  • Minimum separation continues to exist between two departing aircraft immediately after departure of the second aircraft;
  • +
  • The pilot of an arriving aircraft is advised of the exit point where they are expected to vacate.
  • +
+

5.5.2 Single runway mode procedure

+

5.5.2.1 Landing following landing

+

When the runway‐in‐use is temporarily occupied by other traffic, landing clearance may be issued to an arriving aircraft, provided that the controller has reasonable assurance that the following separation criteria will be met when the landing aircraft crosses the runway threshold of:

+
    +
  • +

    Runway 12L/30R:

    +
      +
    • The preceding landing aircraft has landed and has vacated the runway; or has passed a point at least 2500 metres from the threshold of the runway (abeam taxiway N7 and taxiway M10A for runway 12L, abeam the runway exit points for taxiway N3A and taxiway M3A for runway 30R); and is in motion and will vacate the runway without stopping and/or backtracking. Landing RRSM shall only be applied between two successive arrivals provided both aircraft have been instructed to vacate at published rapid exit taxiways (RETs).
    • +
    +
  • +
  • +

    Runway 12R/30L:

    +
      +
    • The preceding landing aircraft has landed and has vacated the runway; or has passed a point at least 2500 metres from the threshold of the runway (abeam taxiway M17 and taxiway K14 for runway 12R; abeam the runway exit points for taxiway M11 and taxiway K8 for runway 30L); and is in motion and will vacate the runway without stopping and/or backtracking.
    • +
    +
  • +
  • +

    All Runways:

    +
      +
    • The preceding arriving aircraft must have touched down and roll out with a good deceleration schedule towards the assigned vacate point while the arriving aircraft is no closer than 60 seconds from touchdown. Landing RRSM shall only be applied between two successive arrivals provided both aircraft have been instructed to vacate at published rapid exit taxiways (RETs).
    • +
    +
  • +
+
+

Example

+

Controller: "UAE96, 777 vacating at K6, [surface] wind 260 degrees 5 knots, runway 30L, cleared to land."

+
+

5.5.2.2 Landing following departure

+

When the runway‐in‐use is temporarily occupied by other traffic, landing clearance may be issued to an arriving aircraft, provided that the controller has reasonable assurance that the following separation distances/criteria will be met when the landing aircraft crosses the runway threshold:

+
    +
  • +

    Runway 12L/30R:

    +
      +
    • The preceding departing aircraft will be airborne and has passed a point at least 2500 M from the threshold of the runway (abeam taxiway N7 and taxiway M10A for runway 12L, abeam the runway exit points for taxiway N3A and taxiway M3A for runway 30R), or if not airborne, will be at least 2500 M from the threshold of the runway.
    • +
    +
  • +
  • +

    Runway 12R/30L:

    +
      +
    • The preceding departing aircraft will be airborne and has passed a point at least 2500m from the threshold of the runway (abeam taxiway M17 and taxiway K14 for runway 12R; abeam the runway exit points for taxiway M11 and taxiway K8 for runway 30L), or if not airborne, will be at least 2500 M from the threshold of the runway.
    • +
    +
  • +
  • +

    Runway 30L/R:

    +
      +
    • The preceding departing aircraft must have commenced their take-off roll while the arriving aircraft is no closer than 2.0NM from touchdown.
    • +
    +
  • +
  • +

    Runway 12L/R:

    +
      +
    • The preceding departing aircraft must have commenced their take-off roll while the arriving aircraft is no closer than 2.5NM from touchdown.
    • +
    +
  • +
+
+

Example

+

Controller: "FDB754, 777 departing ahead, [surface] wind 330 degrees 15 knots, runway 30R, cleared to land."

+
+

5.5.2.3 Departure following departure

+

Take‐off clearance may be issued to a departing aircraft, commencing its take‐off roll from full length, before the preceding departure has passed the upwind end of the runway; provided:

+
    +
  • +

    Runway 12L/30R:

    +
      +
    • The preceding aircraft is airborne, and has passed a point at least 2500 M from the threshold of the runway (abeam taxiway N7 and taxiway M10A for runway 12L, abeam the runway exit points for taxiway N3A and taxiway M3A for runway 30R) and minimum separation continues to exist, constant or increasing, between the two departing aircraft immediately after take‐off of the second aircraft.
    • +
    +
  • +
  • +

    Runway 12R/30L:

    +
      +
    • The preceding aircraft is airborne, and has passed a point at least 2500 M from the threshold of the runway (abeam taxiway M17 and taxiway K14 for runway 12R; abeam the runway exit points for taxiway M11 and taxiway K8 for runway 30L) and minimum separation continues to exist, constant or increasing, between the two departing aircraft immediately after take-off of the second aircraft.
    • +
    +
  • +
+
+

Example

+

Controller: "BOX514, 737 departing ahead, [surface] wind 120 degrees 7 knots, runway 12R, cleared for take-off."

+
+

5.5.3 Dual dependent runway mode

+

The procedures described for single runway operations in 4.6.2.1, and 4.6.2.3 shall be applied in the same manner on respective runways during dual runway operations.

+

The exception for dual runway operations is when the runway mode becomes dependent in VMC (i.e. when aircraft are departing full length 12R from K1, K2, M4, M5B; or full length 30R from M15, M15A, N11, N12).

+

The difference from single runway operations, is in the scenario "landing following departure":

+
    +
  • In the runway 12 direction, a preceding departing aircraft off runway 12R must have passed abeam taxiway M10B and taxiway K7, prior to the landing aircraft crossing the threshold of runway 12L.
  • +
  • In the runway 30 direction, a preceding departing aircraft off runway 30R must have passed abeam taxiway M10A and taxiway N7, prior to the landing aircraft crossing the threshold of runway 30L.
  • +
+

5.6 VFR procedures

+

5.6.1 VFR departures

+

Once VFR aircraft are ready for departure, they shall be cleared for take-off in sequence. As they begin their crosswind turn (the first turn after departure) they shall be instructed to report leaving the control zone.

+

Once aircraft are clear of the zone, they shall be instructed to remain outside controlled airspace and monitor advisory frequency.

+

Aircraft climbing into controlled airspace shall be handed off to departure control.

+

5.6.2 VFR traffic remaining in the circuit

+

AIR control is responsible for managing circuit traffic. Circuits must always be conducted to the south of the aerodrome.

+

Circuits shall be conducted in accordance with the procedures laid down in 2.8.3.

+

Once aircraft are ready for departure, they shall be cleared for take-off in sequence. As they begin their crosswind turn (the first turn after departure) they shall be instructed to report when they are on the downwind with their intentions.

+
+

Example

+

Controller: "ATA, report downwind with intentions."

+
+

Aircraft may request either a touch and go (where the aircraft lands and immediately takes off), a stop and go (where the aircraft lands, comes to a complete stop on the runway, then takes off), a low approach (where the aircraft flies low over the runway without landing), or a full stop (where the aircraft lands and vacates the runway).

+

Once AIR is aware of the aircraft’s request, they may be sequenced to the runway, with due consideration given to runway occupancy time.

+

Aircraft on the downwind shall be passed the following information:

+
    +
  • Expected runway;
  • +
  • Sequence;
  • +
  • Traffic information, if applicable
  • +
+
+

Example

+

Controller: "ATA, report final runway 30R, number 1."

+

Controller: "ATA, runway 30R, cleared to land/touch and go/low approach."

+
+

Aircraft conducting a stop-and go shall be required to “REPORT READY FOR DEPARTURE”.

+

5.6.3 VFR arrivals

+

Inbound VFR aircraft shall be instructed to contact AIR with enough time such that two-way radio communications has been established before aircraft enter the aerodrome control zone.

+

On first contact, AIR will pass circuit joining instructions, as well as any other pertinent information.

+
+

Example

+

Controller: "A6-LDW, Dubai Tower, join left hand downwind runway 30L, 1000ft VFR, QNH 1017."

+
+

Aircraft may also be instructed to track towards a visual reporting point (VRP).

+
+

Example

+

Controller: "A6-LDW, Dubai Tower, track towards water tank, 1000ft VFR. Report one mile from water tank, QNH 1007."

+
+

VFR arrivals may be denied entry into the control zone during times of increased IFR arrival activity and instructed to hold outside controller airspace awaiting further instructions.

+

5.7 Low visibility operations (LVO)

+

5.7.1 Commencement of LVO

+

Low visibility operations (LVO) are commenced at Dubai when:

+
    +
  • Touchdown RVR is indicated to be 600 metres or less;
  • +
  • Reported meteorological visibility is 600 metres or less;
  • +
  • The reported cloud ceiling is less than 300 feet
  • +
+

LVO may be pre-emptively initiated when RVR or meteorological visibility is reported at or below 1500 m and forecast to reduce below LVO minima, or the cloud ceiling is reported as 500 ft, and forecast to reduce below LVO minima.

+

Runway crossings shall be kept to a minimum and must only occur at designated LVO runway crossing points.

+

5.7.2 LVO departure procedures

+

During LVO, aircraft must use CAT II/III holding points for all runways in order to protect ILS-critical areas.

+

CAT II/III holding points must be used during LVO for departing aircraft (Table 5-4).

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
30RN10/M14A
12RM4/K1
12LN1A/M1A
30LK17/M20
+
+
Table 5-9: CATII/III holding points
+
+

5.7.3 LVO arrival procedures

+

Arriving aircraft must not to vacate onto M in both directions and must report fully vacated.

+

5.8 Designated areas of responsibility

+

5.8.1 AIR positions

+

Dubai has two AIR positions, AIR 1 and AIR 2.

+

AIR 1 controls runway 30R/12L as well as all associated exit taxiways and runway holding points. AIR 2 controls runway 30L/12R as well as all associated exit taxiways and runway holding points.

+

The airspace directly around the airport is split along taxiway M. all airspace north of M is delegated to AIR1, while the southern half is delegated to AIR 2.

+

(See 6.2 and 6.3)

+

5.8.2 Handoff procedure

+

Where transfer of control is to be made between aerodrome controllers, aircraft shall not be cleared to a point beyond the current controller’s designated zone of responsibility unless there has been prior coordination with the next controller. Intermediate holding points may be used to satisfy this requirement. +For runway crossings, the crossing instruction must only be issued by the designated AIR controller for the respective runway unless prior coordination has been conducted.

+

5.8.3 Splitting procedure

+

Where there is only one controller, they shall cover all runways and associated airspace from the AIR 1 position.

+

Unless otherwise authorised by the Arabian vACC staff, GMP (Dubai Delivery) and at least one GMC (Dubai Ground) position must be online before two AIR (Dubai Tower) positions may be opened.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/Dubai/aor/index.html b/aerodrome/Dubai/aor/index.html new file mode 100644 index 00000000..2cfd43e8 --- /dev/null +++ b/aerodrome/Dubai/aor/index.html @@ -0,0 +1,6993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

2. Areas of Responsibility

+

2.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 4.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+
+

Important

+

To avoid conflicts at taxiway intersections, aircraft shall only be cleared to the boundary of the controller's specific area of responsibility as described in section 4 unless the procedure specifically states otherwise (traffic taxiing on M to be cleared by GMC 1 to M13A before being handed off to AIR, for example).

+
+

2.2 Runway 30L/30R

+
+

Areas of Responsibility 30 config

+
+

2.3 Runway 12L/12R

+
+

Areas of Responsibility 12 config

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/Dubai/gmc/index.html b/aerodrome/Dubai/gmc/index.html new file mode 100644 index 00000000..1ac0892c --- /dev/null +++ b/aerodrome/Dubai/gmc/index.html @@ -0,0 +1,8224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Ground Movement Control ("Dubai Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Ground Movement Control ("Dubai Ground")

+

4.1 General provisions

+

The Ground Movement Controller (GMC) is responsible for managing aircraft movements on all aerodrome movement areas except for runways and their associated taxiways. Departing aircraft are given pushback instructions and instructions to taxi to the runway holding point. Arriving aircraft are assigned a stand and instructed to taxi as appropriate.

+

4.2 Pushback procedures

+

4.2.1 General procedure

+

When aircraft have been handed off to GMC, they shall be fully ready for pushback, and are 5 minutes from their TOBT. Assuming no obstructions, they shall be instructed to push back immediately. If an aircraft is cleared for push and start but does not begin pushing within 2-5 minutes, the pushback clearance is canceled, and a new TOBT is assigned.

+

Aircraft requesting push that are not squawking their assigned transponder code shall be instructed to hold position and squawk the correct code. They must not be allowed to move until doing so.

+

Pushback direction is based primarily on aircraft location and runway configuration.

+

All non-A380 traffic on aprons B shall be instructed to push back onto U. All code F (A380/B747-8) traffic on apron B shall be instructed to push back onto taxiway J and face the appropriate direction.

+

On apron F and A, all traffic shall be instructed to push back onto Z. Pushbacks onto taxiway K shall not be permitted under any circumstances.

+

A pushback clearance must be a variant of those provided in 3.2.2 and include an instruction to “FACE WEST” or “FACE EAST” as appropriate.

+
+

Example

+

Pilot: "Dubai Ground, UAE4CK, on stand A4 request pushback."

+

Controller: "UAE4CK, Dubai Ground, pushback approved, face east on Z."

+

Pilot: "Pushback approved, facing east on Z, UAE4CK."

+
+

Conditional pushback instructions may also be issued if an aircraft is taxiing behind another waiting for pushback.

+
+

Example

+

Pilot: "Dubai Ground, FDB647, on stand E8 request pushback."

+

Controller: "FDB647, Dubai Ground, behind the company 737 passing left to right, pushback approved, face east on P."

+

Pilot: "After the company 737 passes from left to right, pushback approved, facing east on P, FDB647."

+
+

4.2.2 Pushback types

+

4.2.2.1 Standard pushback

+

This type will normally have the aircraft stop abeam the adjacent stand. The phraseology for this type of pushback is identical to the pushback phraseology as provided in 3.2.1.

+

4.2.2.2 Short pushback

+

A short pushback instruction shall require the aircraft to complete the pushback abeam the current stand such that the adjacent stand will not be blocked.

+
+

Example

+

Pilot: "Dubai Ground, UAE51, on stand F6 request pushback."

+

Controller: "UAE51, Dubai Ground, short pushback approved, face west on Z to finish abeam stand F6."

+

Pilot: "Short pushback approved, facing west on Z to finish abeam stand F6, UAE51."

+
+

4.2.2.3 Long pushback

+

A long pushback instruction shall require aircraft to complete the pushback operation two stands away from where the pushback was commenced. This manoeuvre may be used when aircraft are vacating a stand to be used by another aircraft that is taxiing in.

+
+

Example

+

Pilot: "Dubai Ground, UAE6LT, on stand A6 request pushback."

+

Controller: "UAE6LT, Dubai Ground, long pushback approved, face east on Z to finish abeam stand A4."

+

Pilot: "Long pushback approved, facing east on Z to finish abeam stand A4, UAE6LT."

+
+

4.2.3 Simultaneous pushback operations

+

Simultaneous pushbacks may be permitted from adjacent stands provided aircraft are instructed to manoeuvre in accordance with 3.2.2 such that on completion of both aircraft’s pushback operation, they will be separated on the taxiway by two aircraft stands.

+

4.2.4 Dual runway 30R pushback procedures

+

When departing 30R, all aircraft parked on apron B and F shall be instructed to push back to “FACE WEST”.

+

Aircraft on A, C, D and E aprons shall be in instructed to push back to “FACE EAST” as provided in 3.2.1.

+

Traffic pushing back from stand C62, C63 and C64 shall be instructed to "FACE NORTH" on J1.

+

Traffic pushing back from stand A1 and A2 shall be instructed to "FACE NORTH" on J2.

+

Traffic pushing back from stand A10 and D10 shall be instructed to "FACE NORTH" on J3.

+

Other traffic shall be pushed back in the appropriate direction for taxi as provided in 3.3. Care must be taken to ensure that the pushback will not block key taxiway intersections.

+
+

Important

+

For traffic parked on stand A1, A2 and D1, before issuing pushback instruction, GMC 1 must coordinate the pushback with AIR South to avoid blocking the high speed turn onto taxiway J2.

+

For traffic parked on stand C62, C63 and C64, before issuing pushback instruction, GMC 2 must coordinate the pushback with GMC 1 to avoid blocking J1 for Code F traffic.

+
+

4.2.5 Dual runway 12R pushback procedures

+

When departing 12R, aircraft south of 12L shall push in the appropriate direction to give the shortest taxi possible to the standard departure point on 12R.

+

Aircraft on aprons E and Q shall be instructed to push in the appropriate direction that will allow the shortest taxi time to holding point N2.

+

4.2.6 Single runway pushback procedures

+

During single runway operations, aircraft shall be pushed back in the most convenient direction to join the appropriate taxi route as provided in 4.3 for the respective runway mode.

+

4.3 Taxi procedures

+

4.3.1 General procedures

+

Departing aircraft from aprons F, B and D are usually taxied out using the taxiways closest to the concourses (U, W, Y, Z). The only exception to this is code F (A380/B747-8) traffic departing from apron B which must taxi using J and must not be allowed to taxi on U, W or Y.

+
+

Important

+

Where aircraft are taxied to runway holding points, transfer of control to AIR shall be made early enough such that the aircraft is not required to stop its taxi. For traffic taxiing between GMC areas of responsibility, aircraft should be handed off early enough to ensure a non-stop taxi, provided no conflicts are anticipated.

+
+
+

Example

+

Pilot: "Dubai Ground, UAE7TR, request taxi."

+

Controller: "UAE7TR, Dubai Ground, taxi via Z, L4, M, holding point M13A, runway 30R."

+

Pilot: "Taxi via Z, L4, M, holding point M13A, runway 30R, UAE7TR."

+
+

Several “cross-over” taxiways exist to allow aircraft to transfer between the inner and outer taxiways. These shall be used whenever necessary to allow efficient flow of traffic around the airport.

+

To deconflict traffic, and to reduce the length of taxi clearances, intermediate holding points shall be used wherever possible.

+

Intermediate holding points shall always be used when transferring aircraft between controllers to avoid conflicts and the area of responsibility boundaries.

+
+

Example

+

Pilot: "Dubai Ground, UAE9LT, request taxi."

+

Controller: "UAE9LT, Dubai Ground, taxi via Z, L4, hold L4A."

+

Pilot: "Taxi via Z, L4, hold L4A, UAE9LT."

+
+

Arriving aircraft shall not immediately be handed off by AIR. They must instead be given an initial taxi instruction onto M, N, J2 or K to keep traffic flowing. Therefore, GMC shall assign an arrival stand to aircraft when they are on final approach.

+

Once the aircraft is handed off to GMC, they may be taxied to their stand. Arrivals shall generally be taxied via the outside taxiways that are farthest away from the stands.

+

Aircraft are not required to cross-over to the inside taxiways before initiating the turn onto stand for aprons A, B, D, and F.

+

4.3.2 Taxiway restrictions

+

Code F aircraft shall not be permitted to taxi on U, Y, W. These taxiways are limited to code E and below.

+

Code F aircraft shall not be permitted to use the curved portions of J, J1 and J2 if code E aircraft are simultaneously taxiing on the curved portions of U, Y or W and vice versa.

+

In this case, traffic shall be instructed to hold short of the curved portion until the adjacent curved taxiway is clear.

+

Taxiway Q shall be limited to code C and below.

+
+

Important

+

These taxiway restrictions must be adhered to to ensure adequate wingtip clearance during taxi.

+
+

4.3.3 Dual runway 30R

+

4.3.3.1 Departure taxi procedures

+

When departing from 30R in the dual runway configuration, all aircraft pushing back on apron B and F shall be instructed to taxi via L4 and M.

+

Aircraft on aprons A and D shall be instructed to taxi to holding point K14. During periods of lower aerodrome departure or arrival activity, K11 or K12 may be used for runway crossings only after coordination with AIR.

+

Before reaching these holding points, aircraft shall be transferred to AIR North.

+

Eastbound traffic flow on K shall not be permitted between K1 and K8, as this blocks the rapid exit taxiways from 30L.

+

Departures from apron C shall be instructed to taxi via L1 and M.

+

In all applicable cases, when traffic turns to enter taxiway M, transfer to AIR shall be initiated.

+

Departures from apron E shall be instructed to cross over to and taxi via N.

+

4.3.3.2 Arrival taxi procedures

+

Aircraft shall vacate 30L onto K9, K8 or K6, depending on the stand assignment described in 3.4.5. After initial taxi is issued by AIR, aircraft are handed off to GMC as provided below.

+
Apron A
+

For aircraft parking on apron A vacating at K8, taxi routings shall be via K eastbound.

+
Apron B (except stand B27)
+

Traffic shall vacate via K8 or K9 then be instructed by AIR South to taxi to J2A. Traffic shall then be transferred to GMC 1.

+

Traffic shall be instructed by GMC1 to taxi right on J to the appropriate stand.

+
Stand B27 and F27
+

Traffic parking on F27 and B27 shall be instructed by AIR South to taxi via J right onto Z then left onto W to hold at WA. Traffic shall then be transferred to GMC 1 for further taxi.

+
Apron C
+

Traffic shall vacate at K9, K8 or K6, AIR South shall instruct traffic to taxi via K and hold short at KL and initiate transfer to GMC 1.

+

GMC 1 shall issue taxi via K westbound to hold at KF and transfer control to GMC 2. GMC 2 shall taxi the aircraft to the appropriate stand.

+
Apron D
+

Traffic shall vacate via K8 or K9 then be instructed by AIR South to taxi to J2A. Traffic shall then be transferred to GMC 1.

+

GMC 1 shall instruct traffic to taxi left on J for the appropriate stand.

+
Apron E
+

Traffic shall vacate at K9, K8 or K6, AIR South shall instruct traffic to taxi via K and hold short at KL and initiate transfer to GMC 1.

+

GMC 1 shall instruct traffic to taxi via K, L3 then to holding point M2. Before reaching M2, aircraft shall be transferred to AIR North for runway crossing.

+

After runway crossing, traffic shall be transferred to GMC 2 to taxi to the appropriate stand.

+
Apron F (except stand F26L)
+
+

Taxi routings - 30 dual config

+
+
+
Figure4-1: Taxi routings - 30 dual config
+
+

4.3.4 Single runway 30R

+

4.3.4.1 Departure taxi procedures

+

When departing 30R in the single runway configuration, all aircraft pushing back on apron A, B, D and F shall be instructed to taxi via K4, K7, or K11 and cross 30L as appropriate.

+

Except for aircraft taxiing from apron C, the section of taxiway M west of K4 shall not be used for departure taxi as this blocks the arrival flow from 30R.

+

The taxi routes from apron E shall be the same as with the dual runway 30 configuration.

+

4.3.5 Single runway 30L

+

4.3.5.1 Departure taxi procedures

+

When departing 30L in the single runway configuration, all aircraft pushing back on aprons A, B, D and F shall taxi via Z until past 30L RETs after which they shall cross onto K and taxi to holding point K17.

+

Eastbound flow shall not be permitted on K between K1 and K8.

+

Aircraft on apron E shall cross 30R at N9 and taxi to holding point M20.

+

4.3.6 Dual runway 12R (Arrival Bias)

+

4.3.6.1 Departure taxi procedures

+

When departing from 12R, aircraft parked on aprons A, B, D, F and C shall be taxied via the shortest appropriate route to the standard departure holding points K3, K4 and K5 avoiding conflicts with other departing or arriving traffic.

+

Aircraft parked on apron E and Q shall be taxied via the standard route to holding point N2. Before reaching N2, aircraft are transferred to AIR North for runway crossing. Aircraft then shall taxi via L3, then K to holding point K3, K4 or K5 as appropriate.

+

Use of full-length holding points (K1, K2) shall require coordination with AIR and shall not be assigned unless requested for performance reasons. These aircraft shall be advised of possible delays due to runway dependency.

+

Departing traffic shall not be issued taxi to holding points M

+
+

Taxi routings - 12 dual config (arrival bias)

+
+
+

Taxi routings - 12 dual config (departure bias)

+
+

4.3.8 Single runway 12R

+

4.3.8.1 Departure taxi procedures

+

Departure taxi routes for 12R single runway operation shall be the same as in dual runway operations, except that aircraft may be assigned full length holding points without restriction.

+

4.3.9 Single runway 12L

+

4.3.9.1 Departure taxi procedures

+

When operating from 12L during single runway operation, aircraft pushing back on the southern aprons shall taxi westbound to join L3/L4 and then to M1.

+

Aircraft departing the northern aprons shall taxi to N1.

+

4.3.10 Handoff procedures

+

When departing traffic has been instructed to taxi to their departure holding points as per the standard taxi routings and when the handoff towards AIR is initiated as per AoR, GMC will ask departing aircraft to monitor the AIR frequency.

+
+

Example

+

Controller: "UAE530, monitor tower 118.750."

+
+

When departing traffic has been instructed to taxi to runway holding points for crossing as per the standard taxi routings and when the handoff towards AIR is initiated as per AoR, GMC will ask departing aircraft to contact the AIR frequency.

+
+

Example

+

Controller: "UAE8KC, contact tower 119.550."

+
+
+

Important

+

The key distinction between monitor and contact is as follows: monitor instructs the pilot to switch to the assigned frequency and await a call from the next controller, while contact requires the pilot to switch frequencies and make an initial call. During periods of high traffic, the use of monitor is preferred over contact to reduce radio frequency congestion.

+
+

4.4.4 Single runway 30L arrival taxi procedures

+

Routings are similar to 30L dual runway taxi, however caution should be exercised for traffic vacating onto J2, as this will cross the departure traffic taxiing eastbound on Z. Appropriate coordination shall be used to mitigate the risk of blocking the high speed exit.

+

Aircraft are also permitted to vacate right onto M and cross 30R at M10A or M5A.

+

4.4.5 Single runway 30R arrival taxi procedures

+

Aircraft parking on the southern aprons shall vacate to the left and taxi via L3, L4 or M4 to cross 30L.

+

Aircraft parking on the northern aprons shall vacate right and take the first appropriate turn onto P.

+

4.4.6 Dual runway 12L arrival taxi procedures (Arrival Bias)

+

Aircraft parking on the southern aprons shall vacate 12L onto M9 or M12A and be instructed by AIR to taxi via M to holding points M13B or M14B as appropriate.

+

Once aircraft have crossed 12R, aircraft will be transferred from AIR to GMC.

+

Taxi routes to most aprons on the south side will be via K. For aprons B and D, aircraft shall taxi via J2 and then left or right onto J as appropriate.

+

Aircraft parking on the northern aprons shall vacate 12L onto N6 or N8 and then taxi via N or P as appropriate.

+

In addition to the standard taxi routings outlined above, a ”bias” mode can be utilised for biasing arrival traffic flow in the Dual runway 12L arrival configuration.

+

In the arrival bias, arriving traffic may vacate 12L to taxi westbound on M and then southbound on L3 and L4 to enter the C apron. Departing traffic will not interfere with the arrivals as they are prohibited from using any of the runway holding points along taxiway M.

+
+

Taxi routings - 12 dual config (arrival bias)

+
+
+

Taxi routings - 12 dual config (departure bias)

+
+

4.4.7 Single runway 12L arrival taxi procedure

+

Arrival taxi routes during 12L single runway operation shall be the same as 12 dual runway operations.

+

4.4.8 Single runway 12R arrival taxi procedure

+

Aircraft parking on the southern aprons shall vacate right and taxi in via K.

+

Aircraft parking on the northern aprons shall vacate left and taxi via M to cross 12L at M10A.

+

4.4.9 Stand allocation procedure

+

Aircraft shall be assigned stands automatically using Ground Radar Plugin Stand Assigner. If this is not possible, aircraft shall manually be assigned a stand in accordance with the following procedure:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
Concourse AStands A1 to A10, D1 to D10ACA, QFA, UAE, UAL
Concourse BStands B14 to B27, F16 to F27ACA, QFA, UAE, UAL
Concourse CStands B1 to B12, F2 to F13FDB (Stands: F2, B1 to B10), UAE
Concourse DStands C48 to C64International Operators
Apron C (Remote)Stands C18 to C47FDB (Stands: C18 to C23, C27 to C40), International Operators, KAM (Stands: C36 to C40), UAE (Stands: C24 to C40)
Apron E (Remote)Stands E1 to E27AXB, FDB, Cargo, low-cost
Apron G (Remote)Stands G1 to G22UAE (Overflow)
Apron HStands H1 to H4AUH, DUB
Apron Q (Remote)Stands Q1 to Q11FDB
Apron S (Remote)Stands S1 to S15UAE (Overflow)
+
+
Table 4-1: Stand allocation procedure
+
+

4.4.10 Stand restrictions

+

All stands on Apron A and Apron D are up to code F (A380/B747-8) capable, as well as F18 to F22, F27, F12 and F13. All remaining stands are up to heavy (code E) capable except C18 to C23 and B1 to B7 which are up to medium (code C) capable.

+

4.5 Low visibility operations (LVO)

+

4.5.1 LVO taxi routes

+

When LVO is in force, aircraft shall not cross the landing runway as far as practicable.

+

Aircraft shall only be issued taxi instructions in accordance with the designated LVO taxi routes.

+

Only designated CAT II/III holding points shall be used during LVO (4.7.2).

+

4.6 Designated areas of responsibility

+

4.6.1 GMC positions

+

Dubai has two GMC positions, GMC 1 and GMC 2.

+

GMC 1 controls aircraft movements on the following areas and their associated taxiways: +- Apron A +- Apron B +- Apron D +- Apron F +- Apron G +- Apron H

+

GMC 2 controls aircraft movements on the following areas and their associated taxiways: +- Apron C +- Apron E +- Apron S +- Apron Q

+

(See Section 2)

+

4.6.2 Handoff procedures

+

Where transfer of control is to be made between controllers, aircraft shall not be cleared to a point beyond the current controller’s designated zone of responsibility unless there has been prior coordination with the next controller. Intermediate holding points may be used to satisfy this requirement.

+

4.6.3 Splitting procedure

+

When there is only one GMC online, they shall cover all surface movement areas from the GMC 1 position.

+

Unless otherwise authorised by the Arabian vACC staff, GMP (Dubai Delivery) must be online before two GMC (Dubai Ground) positions are be opened.

+

When GMP is not online, GMC shall assume the responsibility of the lower controller.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/Dubai/gmp/index.html b/aerodrome/Dubai/gmp/index.html new file mode 100644 index 00000000..b22ac273 --- /dev/null +++ b/aerodrome/Dubai/gmp/index.html @@ -0,0 +1,7623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Planner ("Dubai Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

3. Ground Movement Planner ("Dubai Delivery")

+

3.1 General provisions

+

Airways clearance/Ground Movement Planner (GMP) is responsible for validating routes and shall provide IFR clearance to departing aircraft. The controller shall assign the correct departure procedure to the aircraft based on the first point that is filed on the flight plan.

+

Where the flight plan contains an invalid route, level, or departure procedure, GMP must ensure that the error is corrected before the aircraft is given its clearance.

+

GMP is also responsible for minimizing taxiway delays and taxiway congestion for departing aircraft. During times of increased departure activity, aircraft are held at the gate to save fuel and lessen taxiway congestion.

+

3.2 Departure clearance

+

3.2.1 General

+

GMP is responsible for issuing clearances for departing aircraft. Pilots may be expected to report the following information on first contact:

+
    +
  • Callsign;
  • +
  • Aircraft type;
  • +
  • Parking Stand;
  • +
  • Requested flight level;
  • +
  • Destination;
  • +
  • SID;
  • +
  • Speed if unable to comply with minimum speed on the SID
  • +
+

3.2.2 Information contained in a departure clearance

+

An IFR clearance shall be in the following format:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • Departure procedure;
  • +
  • Initially cleared altitude;
  • +
  • Assigned SSR code
  • +
+

GMP shall obtain a full readback of the clearance. If the pilot does not report the current ATIS letter on first contact, GMP shall pass the current ATIS letter and QNH.

+

Departing aircraft shall be instructed to remain on the delivery frequency and report ready to push before being handed off to GMC. This is so aircraft may be held at the gate, as per the procedures laid down in 2.6.

+
+

Example

+

Pilot: "Dubai Delivery, good evening, UAE1GP, Boeing 777-300ER, stand A8, requesting FL360, to Nice, NABIX3F departure, with information F on board."

+

Controller: "UAE1GP, information F correct, cleared to Nice via the NABIX3F departure, maintain altitude 4000ft, squawk 0542."

+

Pilot: "Cleared to Nice, NABIX3F departure, maintain altitude 4000ft, squawk 0542, UAE1GP."

+

Controller: "UAE1GP, readback correct, QNH 1008, report ready for pushback."

+
+ +

Aircraft clearance may also be delivered by DCL. This type of clearance reduces controller workload and frequency congestion. For suitably equipped aircraft, this will be through the ACARS system on board the aircraft.

+
+

Info

+

Controllers shall ensure that DCL is available to be used at all times.

+
+

3.2.4 Aircraft requiring a reroute

+

Aircraft requiring a reroute shall not be given a DCL. Instead, a voice clearance must be used. This shall be communicated by ACARS datalink message or on frequency.

+

3.2.5 Voice clearance

+

Aircraft requesting clearance via voice shall be given a voice clearance as per the format in 2.2.2.

+

3.3 Departure Procedures

+

3.3.1 RNAV Standard instrument departures

+

Dubai primarily uses RNAV standard instrument departures (SIDs) and is the preferred departure type for IFR aircraft. Departing aircraft shall be assigned an appropriate RNAV departure according to the first fix in the flight plan and runways in use.

+

SIDs which have an identifier ending in F are valid for 30L/R. SIDs with an identifier ending in G are valid for 12L/R. All departures have an initial climb of 4000ft (Table 3-1).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 3-1: RNAV SIDs
+
+

3.3.2 Omnidirectional departures

+

The omnidirectional departure procedure shall be used when aircraft are unable to accept an RNAV departure. Whereas RNAV departures follow a prescribed track until leaving the Dubai Departures airspace, omnidirectional departures are given radar vectors to the first fix.

+

In the take-off clearance. Air Control (AIR) may assign a heading from within a “heading fan” of valid headings.

+

An Omnidirectional departure clearance shall contain the following information:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • Omnidirectional departure;
  • +
  • Initial climb;
  • +
  • Initial heading (which may be changed by AIR);
  • +
  • Assigned SSR code
  • +
+

Aircraft on an omnidirectional departure shall have the text OMNI inserted to the scratchpad section of their entry on the departure list.

+
+

Example

+

Pilot: "Dubai Delivery, good evening, TCM1TM, Airbus A320, stand C59, requesting FL360, to Beirut, unable RNAV, with information X on board."

+

Controller: "TCM1TM, information X correct, cleared to Beirut via the omnidirectional departure, maintain altitude 4000ft, squawk 0527."

+

Pilot: "Cleared to Beirut, omnidirectional departure, maintain altitude 4000ft, squawk 0527."

+

Controller: "TCM1TM, readback correct, QNH 1014, report ready for pushback."

+
+

3.4 Rerouting aircraft

+

An aircraft shall be issued a reroute by GMP if the pilot’s route doesn’t comply with the standard routes laid out in Table 3-2.

+

Several routing restrictions exist within UAE airspace and are detailed in the UAE Route Manual which must be complied with when issuing a departure clearance.

+

If an aircraft requires a reroute, they shall be informed of such as soon as they have connected to the network by private message or on frequency. The use of “.rte" and “.rtef" aliases are encouraged.

+

The Arabian vACC Operations Department maintains an up-to-date route database on SimBrief. These routes can be accessed by selecting the "User Submitted Routes" option, highlighted in purple, when planning a flight.

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
Transiting Bahrain FIR onwards landing/transiting Kuwait, Baghdad, and Tehran FIRs-RIDAP M557 TUMAK
Transiting Bahrain FIR onwards landing/transiting Jeddah FIR (including OERK, OEJN)-SENPA N571 ALPOB
Landing within Bahrain FIR (including OBBI)Max FL260NABIX P699 ORMID
Landing OEDF, OEDR- NABIX P699 ORMID
Landing within Doha TMA (OTHH, OTBD)Max FL260NABIX P699 OXARI M430 TOSNA
MIROT Q576 RORON M430 TOSNA
Landing/transiting Sanaa FIR and south Jeddah FIR-KUTLI L519 ATUDO M318 GOLGU M550 RIBOT
KUTLI L519 ATUDO M318 KATIT
Landing OOMS, transiting Muscat FIR Eastbound and Southeast bound-ANVIX L223 TARDI
Landing OOSA, transiting Muscat FIR Southbound and Southwest bound-ANVIX R401 GIDIS G783 UKRAG L710 MEMTU
Landing OOSHAt 11,000 ftANVIX L223 TARDI
Transiting Muscat FIR Eastbound onwards landing/transiting Karachi and Mumbai FIRs-IVURO M677 LALDO
IVURO M428 GOMTA
OMAA & OMADMax 10,000 ftDCT EMERU
OMAL-DCT ANVIX R401 GIDIS G783 VAVIM
OMDW, OMSJ, OMRK, and OMFJMax 7,000 ftDCT (RADAR VECTORS) (Omnidirectional departure)
+
+
Table 3-2: Standard routes
+
+

3.5 Requested cruising level

+

3.5.1 Level restrictions

+

Aircraft routes out of the aerodrome must comply with all routing and level restrictions as described in section 3.1 of Arabian MATS P1, Arabian Route Manual and Table 3-2. This is based on direction and type of flight.

+

Should an aircraft file an invalid cruise level, GMP shall advise the aircraft of this when delivering the clearance. In all cases, the next lowest valid cruise level shall be assigned, and the aircraft advised.

+

3.6 Delay mitigation

+

3.6.1 Target off-block time (TOBT)

+

When A-CDM procedures are active, pilots must report their confirmed TOBT on vacdm.vatsim.me, which is then displayed in the controller's client on the departure list. A fully green time indicates a confirmed TOBT. If a pilot has not confirmed their TOBT, the controller should request it on frequency and update the departure list accordingly.

+

The TOBT system allows aircraft to push back, taxi to the runway holding point, and depart on schedule without extended delays in the departure queue. If an aircraft reports ready for pushback before its assigned TOBT, it will be instructed to hold position and will be given its place in the pushback sequence, unless aerodrome conditions permit and a slot is available. If an aircraft is cleared for push and start but does not begin pushing within 2-5 minutes, the pushback clearance is canceled, and a new TOBT is assigned.

+
+

Example

+

Controller: "FDB53, hold position. Number 3 for startup, expect pushback at time 45."

+
+

3.7 Runway change procedure

+

AIR shall provide ample notice to GMP before changing runway configuration. The last departure using the old configuration shall be coordinated between AIR, GMP, GMC and approach/departure.

+

Aircraft that have already been cleared to depart using the old configuration shall be re-cleared if they have not already requested pushback.

+

3.8 VFR aircraft

+

VFR flight activity should be planned in accordance to published VFR charts, specifically the “Dubai Creek VFR Routes” chart for traffic navigating within the CTR and the “Dubai CTA VFR” chart for VFR traffic navigating out of the Dubai CTR into neighbouring airspaces. GMP may use the appropriate charts as per the requirements of the pilot’s intentions in accordance with 2.8.1, 2.8.2 and 2.8.3.

+

At any time, AIR control and Approach/Departure control may impose partial or full restrictions to VFR operations out of OMDB during periods of increased IFR activity or due to restrictions and limitations to aircraft type. It is imperative that GMP is in continuous coordination with AIR control and Approach/Departure control for departing VFR traffic.

+

3.8.1 VFR departures into uncontrolled airspace

+

VFR traffic shall be cleared via the most appropriate VFR route towards their destination. If necessary, the clearance may be amended by AIR prior to departure.

+

All VFR departures shall be assigned a discrete SSR code so that they may be identified on radar.

+
+

Example

+

Pilot: "Dubai Delivery A6-CTL, Cirrus SR22, request clearance to Al-Maktoum, information charlie."

+

Controller: "A6-CTL, Dubai Delivery, cleared to Al-Maktoum via Water Tank - VR7 - Road Crossing - VR6 - Club Intersection, Altitude 1000ft VFR, squawk 0611."

+

Pilot: "Cleared to Al-Maktoum via Water Tank - VR7 - Road Crossing - VR6 - Club Intersection, altitude 1000ft VFR, squawk 0611, A6-CTL."

+

Controller: "ATL, [readback] correct, information charlie correct, QNH 1003, report ready for start-up."

+

Pilot: "QNH 1003, Wilco ATL"

+
+

3.8.2 VFR departures into controlled airspace

+

VFR aircraft requesting clearance to climb into approach airspace (above 1500 ft) shall only be cleared after prior coordination with Approach/Departure control. Otherwise, they shall be instructed to remain outside controlled airspace after leaving the control zone.

+

All VFR departures shall be assigned a discrete SSR code so that they may be identified on radar.

+
+

Example

+

Pilot: "Dubai Delivery A6-CTZ, Cirrus SR22, request departure to the south on track Abu Dhabi, altitude 6500ft."

+

Controller: "A6-CTZ, Dubai Delivery, cleared on track Abu Dhabi, altitude 6500ft VFR, squawk 0415."

+

Pilot: "Cleared on track Abu Dhabi, altitude 6500ft VFR, squawk 0415, A6-CTZ."

+

Controller: "ATZ, [readback] correct, information sierra current, QNH 1003, report ready for start-up."

+

Pilot: "QNH 1003, Wilco ATZ"

+
+

3.8.3 VFR traffic remaining in circuit

+

VFR traffic wishing to remain in the circuit shall be cleared only after prior coordination with AIR and Approach/Departure control.

+

As per possible restrictions mentioned in 2.8, VFR traffic may be encouraged to carry out circuits at neighbouring aerodromes such as OMDW, OMSJ and OMRK during periods of increased IFR activity and due to restrictions to aircraft type. GMP must coordinate with AIR control and Arrivals/Departures control in such cases and relay the information to the pilot in accordance with 2.8.1 or 2.8.2.

+

VFR circuits shall not be permitted out of OMDB if any of the aforementioned restrictions from AIR and Approach/Departure control is in effect.

+

All VFR circuit traffic shall be assigned a discrete SSR code so that they may be identified on radar.

+

All VFR aircraft shall be instructed to conduct circuits to the south of the aerodrome from the southern runway (left-hand circuits for 30L and right-hand circuits for 12R) at an altitude of 1000 ft. Aircraft may also be cleared to conduct circuits at 1500 ft, if required.

+
+

Example

+

Pilot: "Dubai Delivery A6-CTL, Cirrus SR22, request clearance for circuit patterns, information alpha."

+

Controller: "A6-CTL, Dubai Delivery, cleared left-hand circuit, altitude 1000ft VFR, squawk 6022."

+

Pilot: "Cleared left-hand circuit, altitude 1000ft VFR, squawk 6022, A6-CTL."

+

Controller: "ATL, [readback] correct, information alpha correct, QNH 1003, report ready for start-up."

+

Pilot: "QNH 1003, Wilco ATL"

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/Dubai/hotspots/index.html b/aerodrome/Dubai/hotspots/index.html new file mode 100644 index 00000000..e6a354c4 --- /dev/null +++ b/aerodrome/Dubai/hotspots/index.html @@ -0,0 +1,7090 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

Due to the complex layout of the aerodrome, several areas exist which are prone to taxiway/runway incursions. Controllers must exercise caution and remain vigilant when aircraft are operating in these areas.

+

(See section 8 for visual depiction of incursion hotspots)

+

5.2 Hotspot A

+

Area with a history of taxiway incursions during pushback due to confusion between taxiway Z and taxiway K.

+

Controllers shall ensure that aircraft correctly read back the facing instruction as well as the taxiway designator when issuing pushback clearance. Close monitoring of the pushback is also required to ensure aircraft do not inadvertently enter taxiway K.

+

5.3 Hotspot B

+

Area with a history of taxiway incursions due to confusion between intersecting taxiways Z, K, W and J2.

+

Controllers shall pay close attention to aircraft taxiing in this area, particularly when taxiing northbound on W and J2 and when aircraft are vacating the runway to turn left onto J2. Appropriate use of the words “LEFT” and “RIGHT” to avoid confusion and/or ambiguity is recommended.

+

5.4 Hotspot C

+

Area prone to taxiway incursions due to aircraft missing intermediate holding point KP when taxiing westbound on K after vacating runway 30L.

+

Plain language instructions may be required to hold traffic short of K8 to avoid blocking the runway exit.

+

5.5 Hotspot D

+

Area with a history of runway incursions dure to aircraft confusing taxiway M1 and M2 with taxiway L3 and L4.

+

5.6 Hotspot E

+

Area prone to runway incursions by traffic vacating runway 12L via taxiway N9 and turning right onto taxiway M10B or taxiway M11 and entering runway 12R.

+

Controllers shall ensure that traffic correctly read back the initial taxi instruction which shall include the words “TURN LEFT ONTO M” to avoid ambiguity.

+

5.7 Hotspot F

+

Area prone to taxiway incursion due to confusion between locations of apron D and apron B.

+

Controllers shall include the word “LEFT” or “RIGHT” when instructing aircraft to join taxiway J.

+

5.8 Hotspot G

+

Area with a history of taxiway incursions due to confusion between intersecting taxiways Z, K, Y and J1.

+

Controllers shall pay close attention to aircraft taxiing in this area and include explicit instructions to taxi via each taxiway.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/Dubai/img/OMDB 12 TITO AB.png b/aerodrome/Dubai/img/OMDB 12 TITO AB.png new file mode 100644 index 00000000..a63d04ff Binary files /dev/null and b/aerodrome/Dubai/img/OMDB 12 TITO AB.png differ diff --git a/aerodrome/Dubai/img/OMDB 12 TITO DB.png b/aerodrome/Dubai/img/OMDB 12 TITO DB.png new file mode 100644 index 00000000..82028e58 Binary files /dev/null and b/aerodrome/Dubai/img/OMDB 12 TITO DB.png differ diff --git a/aerodrome/Dubai/img/OMDB AIR Split 12.png b/aerodrome/Dubai/img/OMDB AIR Split 12.png new file mode 100644 index 00000000..6177a6af Binary files /dev/null and b/aerodrome/Dubai/img/OMDB AIR Split 12.png differ diff --git a/aerodrome/Dubai/img/OMDB AIR Split 30.png b/aerodrome/Dubai/img/OMDB AIR Split 30.png new file mode 100644 index 00000000..ca7e0df3 Binary files /dev/null and b/aerodrome/Dubai/img/OMDB AIR Split 30.png differ diff --git a/aerodrome/Dubai/img/OMDB_30_TITO.png b/aerodrome/Dubai/img/OMDB_30_TITO.png new file mode 100644 index 00000000..b5b2f6b7 Binary files /dev/null and b/aerodrome/Dubai/img/OMDB_30_TITO.png differ diff --git a/aerodrome/abu dhabi/aerodrome/index.html b/aerodrome/abu dhabi/aerodrome/index.html new file mode 100644 index 00000000..ac63f0e3 --- /dev/null +++ b/aerodrome/abu dhabi/aerodrome/index.html @@ -0,0 +1,7497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)242559N 0543904E Mid point of RWY 13R / 31L, on CL
Elevation83ft
Magnetic Variation / Annual Change2° E(2017) / 0.05° E
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
Abu Dhabi ATIS (DEP)OMAA_D_ATISATIS119.675
Abu Dhabi ATIS (ARR)OMAA_A_ATISATIS119.975
Abu Dhabi Delivery (DEL)OMAA_DELGMP119.975
Abu Dhabi Ground South (GND)OMAA_3_GNDGMC 1123.975
Abu Dhabi Ground Central (GND)OMAA_2_GNDGMC 2120.425
Abu Dhabi Ground North (GND)OMAA_1_GNDGMC 3121.950
Abu Dhabi Tower South (TWR)OMAA_1_TWRAIR 1119.200
Abu Dhabi Tower North (TWR)OMAA_2_TWRAIR 2118.675
Abu Dhabi InformationOMAA_I_APPFIS119.200
Abu Dhabi Radar CentralOMAA_C_APPAPP C124.400
Abu Dhabi Radar WestOMAA_W_APPAPP W128.100
Abu Dhabi Radar NorthOMAA_N_APPAPP N135.150
Abu Dhabi Radar EastOMAA_E_APPAPP E133.550
Abu Dhabi Radar EastOMAA_E_APPAPP E133.550
Abu Dhabi Director (North)OMAA_F_APPFIN N118.425
Abu Dhabi Director (South)OMAA_G_APPFIN S118.000
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
Abu Dhabi CTR (Control Zone)DSFC to 1500ft13 000 ftFL 150
Abu Dhabi CTA 1 (Control Terminal Area Central)DSFC to 1500ft13 000 ftFL 150
Abu Dhabi CTA 1 (Control Terminal Area Central)C1500ft* to FL15513 000 ftFL 150
Abu Dhabi CTA 2 (Control Terminal Area West)GSFC to 1500ft13 000 ftFL 150
Abu Dhabi CTA 2 (Control Terminal Area West)C1500ft* to FL15513 000 ftFL 150
Abu Dhabi CTA 3 (Control Terminal Area North)GSFC to 1500ft13 000 ftFL 150
Abu Dhabi CTA 3 (Control Terminal Area North)C1500ft to 3000ft13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
ILS/DME (RWY31L)IIAW109.300Mhz
ILS/DME (RWY31R)IIAN108.750Mhz
ILS/DME (RWY13L)IIAS110.300Mhz
ILS/DME (RWY13R)IIAE109.150Mhz
VOR/DMEADV114.250Mhz
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
31L308° / 306°4106
31R308° / 306°4106
13L128° / 126°4106
13R128° / 126°4106
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTakeoff-Run Available (TORA)Accelerate Stop Distance Available (ASDA)
31LFull Length41064106
D1039883988
E14/D933353335
E1327092709
H14221422
E614201420
31RFull Length41004100
A14/Z233333333
Z125782578
13RFull Length41064106
D2/E339763976
D338033803
D4/E432763276
E6/H27102710
13LFull Length41004100
A533423342
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
31L4106
31R4100
13R4106
13L4100
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/air/index.html b/aerodrome/abu dhabi/air/index.html new file mode 100644 index 00000000..6b3b00b8 --- /dev/null +++ b/aerodrome/abu dhabi/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/appendix_aor/index.html b/aerodrome/abu dhabi/appendix_aor/index.html new file mode 100644 index 00000000..648ffa74 --- /dev/null +++ b/aerodrome/abu dhabi/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/appendix_hotspots/index.html b/aerodrome/abu dhabi/appendix_hotspots/index.html new file mode 100644 index 00000000..a5e05cf5 --- /dev/null +++ b/aerodrome/abu dhabi/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/appendix_taxi/index.html b/aerodrome/abu dhabi/appendix_taxi/index.html new file mode 100644 index 00000000..a47de90f --- /dev/null +++ b/aerodrome/abu dhabi/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/gmc/index.html b/aerodrome/abu dhabi/gmc/index.html new file mode 100644 index 00000000..c7133a2f --- /dev/null +++ b/aerodrome/abu dhabi/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/gmp/index.html b/aerodrome/abu dhabi/gmp/index.html new file mode 100644 index 00000000..81fae1aa --- /dev/null +++ b/aerodrome/abu dhabi/gmp/index.html @@ -0,0 +1,7445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

GMP shall instruct pilots to monitor Ground Movement Controller (GMC) frequency 123.975 MHz and standby for ATC call. +GMC shall inform aircraft that are ready for pushback of any delay exceeding 5 minutes and provide an estimate. If no contact is made by ATC after 5 minutes of monitoring pilots shall contact Ground Movement Control to receive an estimate for pushback and start. +To facilitate the most expeditious movement of ready aircraft, pilots not ready to pushback and start when instructed to do so by ATC shall expect to wait for further pushback instructions.

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/hotspots/index.html b/aerodrome/abu dhabi/hotspots/index.html new file mode 100644 index 00000000..362fd0b0 --- /dev/null +++ b/aerodrome/abu dhabi/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/abu dhabi/info/index.html b/aerodrome/abu dhabi/info/index.html new file mode 100644 index 00000000..61f5f928 --- /dev/null +++ b/aerodrome/abu dhabi/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2025
Effective Date01 FEB 2025
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - ACCARB31
Approved byChris Marriott - ACCARB1
Next review date01 MAY 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/aerodrome/index.html b/aerodrome/al-ain/aerodrome/index.html new file mode 100644 index 00000000..98c8c133 --- /dev/null +++ b/aerodrome/al-ain/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/air/index.html b/aerodrome/al-ain/air/index.html new file mode 100644 index 00000000..d8457ff0 --- /dev/null +++ b/aerodrome/al-ain/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/appendix_aor/index.html b/aerodrome/al-ain/appendix_aor/index.html new file mode 100644 index 00000000..61b7706b --- /dev/null +++ b/aerodrome/al-ain/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/appendix_hotspots/index.html b/aerodrome/al-ain/appendix_hotspots/index.html new file mode 100644 index 00000000..398bc355 --- /dev/null +++ b/aerodrome/al-ain/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/appendix_taxi/index.html b/aerodrome/al-ain/appendix_taxi/index.html new file mode 100644 index 00000000..faff4763 --- /dev/null +++ b/aerodrome/al-ain/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/gmc/index.html b/aerodrome/al-ain/gmc/index.html new file mode 100644 index 00000000..ad09a629 --- /dev/null +++ b/aerodrome/al-ain/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/gmp/index.html b/aerodrome/al-ain/gmp/index.html new file mode 100644 index 00000000..fd4f3d6a --- /dev/null +++ b/aerodrome/al-ain/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/hotspots/index.html b/aerodrome/al-ain/hotspots/index.html new file mode 100644 index 00000000..00d19b16 --- /dev/null +++ b/aerodrome/al-ain/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-ain/info/index.html b/aerodrome/al-ain/info/index.html new file mode 100644 index 00000000..4d4e7f00 --- /dev/null +++ b/aerodrome/al-ain/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/aerodrome/index.html b/aerodrome/al-bateen/aerodrome/index.html new file mode 100644 index 00000000..4df89566 --- /dev/null +++ b/aerodrome/al-bateen/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/air/index.html b/aerodrome/al-bateen/air/index.html new file mode 100644 index 00000000..b6286806 --- /dev/null +++ b/aerodrome/al-bateen/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/appendix_aor/index.html b/aerodrome/al-bateen/appendix_aor/index.html new file mode 100644 index 00000000..9b34a7de --- /dev/null +++ b/aerodrome/al-bateen/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/appendix_hotspots/index.html b/aerodrome/al-bateen/appendix_hotspots/index.html new file mode 100644 index 00000000..908d1407 --- /dev/null +++ b/aerodrome/al-bateen/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/appendix_taxi/index.html b/aerodrome/al-bateen/appendix_taxi/index.html new file mode 100644 index 00000000..2dda69b2 --- /dev/null +++ b/aerodrome/al-bateen/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/gmc/index.html b/aerodrome/al-bateen/gmc/index.html new file mode 100644 index 00000000..16d7d5b0 --- /dev/null +++ b/aerodrome/al-bateen/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/gmp/index.html b/aerodrome/al-bateen/gmp/index.html new file mode 100644 index 00000000..8aab7012 --- /dev/null +++ b/aerodrome/al-bateen/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/hotspots/index.html b/aerodrome/al-bateen/hotspots/index.html new file mode 100644 index 00000000..0f3caaf9 --- /dev/null +++ b/aerodrome/al-bateen/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-bateen/info/index.html b/aerodrome/al-bateen/info/index.html new file mode 100644 index 00000000..984e9512 --- /dev/null +++ b/aerodrome/al-bateen/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/aerodrome/index.html b/aerodrome/al-maktoum/aerodrome/index.html new file mode 100644 index 00000000..20faf5ff --- /dev/null +++ b/aerodrome/al-maktoum/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/air/index.html b/aerodrome/al-maktoum/air/index.html new file mode 100644 index 00000000..cbdf14db --- /dev/null +++ b/aerodrome/al-maktoum/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/appendix_aor/index.html b/aerodrome/al-maktoum/appendix_aor/index.html new file mode 100644 index 00000000..c1ca463f --- /dev/null +++ b/aerodrome/al-maktoum/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/appendix_hotspots/index.html b/aerodrome/al-maktoum/appendix_hotspots/index.html new file mode 100644 index 00000000..69c0a17c --- /dev/null +++ b/aerodrome/al-maktoum/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/appendix_taxi/index.html b/aerodrome/al-maktoum/appendix_taxi/index.html new file mode 100644 index 00000000..36993306 --- /dev/null +++ b/aerodrome/al-maktoum/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/gmc/index.html b/aerodrome/al-maktoum/gmc/index.html new file mode 100644 index 00000000..49d5dbb2 --- /dev/null +++ b/aerodrome/al-maktoum/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/gmp/index.html b/aerodrome/al-maktoum/gmp/index.html new file mode 100644 index 00000000..04cca93c --- /dev/null +++ b/aerodrome/al-maktoum/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/hotspots/index.html b/aerodrome/al-maktoum/hotspots/index.html new file mode 100644 index 00000000..5b4e7038 --- /dev/null +++ b/aerodrome/al-maktoum/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/al-maktoum/info/index.html b/aerodrome/al-maktoum/info/index.html new file mode 100644 index 00000000..023caa29 --- /dev/null +++ b/aerodrome/al-maktoum/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/aerodrome/index.html b/aerodrome/delma/aerodrome/index.html new file mode 100644 index 00000000..f373a5e3 --- /dev/null +++ b/aerodrome/delma/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/air/index.html b/aerodrome/delma/air/index.html new file mode 100644 index 00000000..97561cc1 --- /dev/null +++ b/aerodrome/delma/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/appendix_aor/index.html b/aerodrome/delma/appendix_aor/index.html new file mode 100644 index 00000000..50d87bd2 --- /dev/null +++ b/aerodrome/delma/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/appendix_hotspots/index.html b/aerodrome/delma/appendix_hotspots/index.html new file mode 100644 index 00000000..66b4f250 --- /dev/null +++ b/aerodrome/delma/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/appendix_taxi/index.html b/aerodrome/delma/appendix_taxi/index.html new file mode 100644 index 00000000..36ede7ab --- /dev/null +++ b/aerodrome/delma/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/gmc/index.html b/aerodrome/delma/gmc/index.html new file mode 100644 index 00000000..3a075f6e --- /dev/null +++ b/aerodrome/delma/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/gmp/index.html b/aerodrome/delma/gmp/index.html new file mode 100644 index 00000000..25bad924 --- /dev/null +++ b/aerodrome/delma/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/hotspots/index.html b/aerodrome/delma/hotspots/index.html new file mode 100644 index 00000000..a0e9d2ec --- /dev/null +++ b/aerodrome/delma/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/delma/info/index.html b/aerodrome/delma/info/index.html new file mode 100644 index 00000000..34b4cdd7 --- /dev/null +++ b/aerodrome/delma/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/aerodrome/index.html b/aerodrome/doha-hamad/aerodrome/index.html new file mode 100644 index 00000000..79eefaf6 --- /dev/null +++ b/aerodrome/doha-hamad/aerodrome/index.html @@ -0,0 +1,7542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO CodeOTHH
Aerodrome Reference Point (ARP)N 25 16.3 E 051 36.3
Elevation13 FT
Magnetic Variation / Annual Change2.6°E (FEB 2020) / 0.03°E
Transition Altitude / Level13,000 ft / FL 150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
Hamad Clearance DeliveryOTHH_DELGMP120.875
Hamad Ground (East)OTHH_1_GNDGMC 1120.225
Hamad Ground (Central)OTHH_2_GNDGMC 2118.650
Hamad Ground (West)OTHH_3_GNDGMC 3118.575
Hamad Ground (Overflow)OTHH_4_GNDGMC 4118.075
Hamad Ground (Planner)OTHH_5_GNDGMC P119.075
Hamad Tower (East)OTHH_1_TWRAIR 1118.525
Hamad Tower (West)OTHH_2_TWRAIR 2118.025
Doha Director (East)DOH_F1_APPFIN 1119.400
Doha Director (Central)DOH_F2_APPFIN 2124.050
Doha Director (West)DOH_F2_APPFIN 3123.875
Doha Approach (East)DOH_A1_APPAPP 1124.775
Doha Approach (West)DOH_A2_APPAPP 2119.725
Doha Radar (North)DOH_R1_APPRDR 1121.100
Doha Radar (South)DOH_R2_APPRDR 2120.675
Doha Control (North)OTDF_1_CTRACC 1135.725
Doha Control (South)OTDF_2_CTRACC 2132.975
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
Doha TMA (Terminal Area)A/C2500 ft to FL24513 000 ftFL 150
Doha CTR (Control Zone)DSFC to 2500 ft13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequencu
ILS/DME (16L)IDE108.700
ILS/DME (16R)QAT108.100
ILS/DME (34L)HJJ111.900
ILS/DME (34R)AZM110.100
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
16L158° / 156°4850 x 60
16R158° / 156°4250 x 60
34L338° / 336°4250 x 60
34R338° / 336°4850 x 60
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
16LFULL LENGTH4850 m4850 m
A114730 m4730 m
A104082 m4082 m
A62497 m2497 m
34RFULL LENGTH4850 m4850 m
A14730 m4730 m
A24266 m4266 m
A33077 m3077 m
A62386 m2386 m
16RFULL LENGTH4250 m4250 m
M134212 m4212 m
L114130 m4130 m
M123817 m3817 m
L103614 m3614 m
M113613 m3613 m
L72348 m2348 m
R1704 m1704 m
R11704 m1704 m
S1604 m1604 m
S11604 m1604 m
34LFULL LENGTH4250 m4250 m
M24195 m4195 m
L14122 m4122 m
M33785 m3785 m
L23646 m3646 m
M43646 m3646 m
S2672 m2672 m
S12672 m2672 m
R2572 m2572 m
R12572 m2572 m
L71935 m1935 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
16L4850 m
34R4850 m
16R4250 m
34L4250 m
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/air/index.html b/aerodrome/doha-hamad/air/index.html new file mode 100644 index 00000000..50ad3e38 --- /dev/null +++ b/aerodrome/doha-hamad/air/index.html @@ -0,0 +1,8098 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("Hamad Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("Hamad Tower")

+

4.1 General provisions

+

Air Control (AIR) is responsible for all aerodrome movements on runways and their associated taxiways. AIR shall also ensure separation between IFR aircraft that are arriving at and departing the aerodrome, as well as provide traffic information to VFR aircraft operating within the aerodrome control zone.

+

4.2 Preferential runways

+

At Doha-Hamad, parallel runways are used at the same time for both departures and arrivals.

+
    +
  • Simultaneous Parallel Departures (SPD): Departures can happen simultaneously on any of the three parallel runways.
  • +
  • Simultaneous Parallel Approaches (SPA): Arrivals can be managed as either Dependent or Independent Parallel Approaches, depending on traffic flow or the operational mode.
  • +
+

The preferred calm wind configuration is using runways 34L and 34R, which may be utilized with a tailwind of up to 5 knots. If this configuration is not feasible due to wind conditions or other factors, runways 16L and 16R shall be used instead.

+

4.2.1 Dependent parallel runway approaches (DPA)

+

Dependent Parallel Approaches (DPA) involve simultaneous approaches to parallel or nearly parallel runways with required radar separation between aircraft on adjacent centerlines. During DPA operations:

+
    +
  • A 1.5 NM diagonal stagger is required for inbound aircraft to Doha-Hamad.
  • +
  • A 2.0 NM diagonal stagger is required for inbound aircraft to Doha Hamad and Doha.
  • +
  • Pilots will be notified of DPA operations through the ATIS.
  • +
+

4.2.2 Independent parallel runway approaches (IPA)

+

Independent Parallel Approaches (IPA) involve simultaneous approaches to parallel or nearly parallel runways, where radar separation between aircraft on adjacent centerlines is not required. During IPA operations:

+
    +
  • Pilots will be notified of IPA operations through the ATIS.
  • +
  • After receiving ILS clearance, pilots must maintain specific altitudes until established on the glidepath: 2500 FT for runway 16L/34R and 3500 FT for runway 16R/34L. Early descent below the glidepath to the final approach altitude is not allowed unless directed by ATC.
  • +
  • For RWY 16L/34R (low side), the base turn will be instructed by ATC once the aircraft is maintaining the final intercept altitude of 2500 FT.
  • +
+

4.2.3 No transgression zone (NTZ)

+

In the context of independent parallel approaches, there is a defined airspace corridor located centrally between the two extended runway centerlines. If an aircraft enters this corridor, air traffic control (ATC) must intervene to maneuver any nearby aircraft on the adjacent approach.

+

4.2.3.1 Break-out manouver

+

If an aircraft infringes the NTZ, the Final Approach Monitoring Controller will issue a breakout instruction to the aircraft under their responsibility to protect it from the threat. Breakout maneuvers include heading and altitude instructions.

+

The Final Approach Monitoring Controller will override the relevant Tower frequency when issuing a breakout maneuver due to an NTZ infringement from the adjacent approach path.

+

4.3 Departure procedures

+

High Intensity Runway Operations for departing aircraft are in effect 24 hours a day. All checks should be completed when reaching the assigned holding point, and aircraft must line up without delay when cleared by ATC. Prompt action should be taken in response to take-off clearance. Whenever possible, intersection departures should be used.

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
16LA10
16RL10/M11/M12
34LL2/M3/M4
34RA2
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

Conditional line up instructions shall include the traffic that the aircraft is to follow, as well as the word “behind” at the beginning and end of the transmission. It is recommended to only have a maximum of two conditional line up clearances active at one i.e., one aircraft lining up behind a departure, and another aircraft lining up behind them.

+
+

Example

+

Controller: "QTR40P, behind the departing company Airbus A350, via A2, line up and wait runway 34R behind."

+
+

If aircraft have not yet reached the holding point where they are expected to line up at, ATC shall reiterate the cleared holding point.

+
+

Example

+

Controller: "QTR40P, via A2, line up and wait runway 34R."

+
+

4.3.3 Take-off clearances

+

Aircraft will be cleared for takeoff once adequate separation is ensured as outlined in sections 4.3.4 and 4.6. At the time of takeoff clearance, aircraft will be assigned their airborne frequency, either for Doha Approach East or West, or the next available station, such as Doha Radar or Doha Control. If none of these stations are online, aircraft will be instructed to monitor UNICOM 122.8.

+
+

Example

+

Controller: "QTR40P, airborne contact Doha Approach East 124.775, wind 330 degrees 7 knots, runway 34R, cleared for take-off."

+
+

4.3.4 Separation requirements

+

4.3.4.1 General

+

Aircraft shall be separated on departure in compliance with standard IFR departure separation minima, recategorisation wake turbulence separation minima (RECAT) requirements or as provided in 4.6 where applicable.

+

Except as provided in 4.3.4.2, succeeding aircraft on the same SID shall be separated by a minimum of 2 minutes.

+

4.3.4.3 Low visibility and IMC

+

During low visibility operations and during IMC, departing aircraft shall not be cleared for take-off when there is an arriving aircraft within 4 NM of the landing runway threshold.

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

IFR departures will receive their handoff instructions as part of the takeoff clearance, as outlined in section 4.3.3. Aircraft that do not receive handoff instructions in their takeoff clearance will be handed off when passing 1000 feet, allowing sufficient time for a frequency change and preventing a level-off during departure.

+

Controllers should refer to section 4.3.5.2 for the appropriate Doha Approach handoff procedures.

+

Aircraft performing a go-around on runway 16L/34R will be handed off to Doha Approach East on 124.775, while aircraft going around on runway 16R/34L will be handed off to Doha Approach West on 119.725.

+

If Doha Approach (East or West) is offline, all handoffs will be directed to Doha Radar. If Doha Radar (North or South) is also offline, all handoffs will be directed to Doha Control.

+

4.3.5.2 Doha Approach hand off procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHand off
16LDoha Approach East
16RDoha Approach West
34LDoha Approach West
34RDoha Approach East
+
+
Table 4-2: Doha Approach hand offs
+
+

4.3.6 Stopping a departure

+

Aircraft that have commenced their take-off roll may be instructed to stop immediately to avert a collision due to a runway incursion or any other dangerous situation.

+

It must be noted though, that the instruction to stop must be given early enough such that the aircraft does not reach its decision speed. Therefore, aerodrome controllers must be vigilant and remain aware of the location of traffic at all times as well as runway incursion hotspots.

+
+

Example

+

Controller: "IBE392, stop immediately, I say again stop immediately, truck entering the runway!"

+
+

For aircraft that have been given a take-off clearance, but have not yet started the roll, they shall be instructed to hold position and the take-off clearance must be cancelled along with the reason for cancellation.

+
+

Example

+

Controller: "IBE392, hold position, cancel take-off, I say again cancel take-off, aircraft entering the runway, acknowledge."

+
+

4.4 Arrival Procedures

+

4.4.1 Standard runway exits

+

On initial contact, aircraft shall be instructed to vacate at a designated taxiway for arrival. The planned exit point shall be one of the preferred exit taxiways (Table 5-2).

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayRunway Exit
16LA7
16RL5/M7
34LL6/M8
34RA5
+
+
Table 4-3: Standard runway exits
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

While the radar controllers are responsible for separating arriving aircraft, the AIR controller shall still ensure that minimum separation is maintained until the preceding aircraft crosses the runway threshold.

+

4.4.2.2 Speed control

+

If it is apparent that minimum separation may not exist as provided in 4.4.2.1, AIR may use a tactical reduction in aircraft speed.

+
+

Example

+

Controller: "QTR36M, reduce to final approach speed."

+
+

4.4.2.3 Visual separation

+

Aircraft may be instructed to maintain own separation visually, if speed control alone will not resolve the conflict. This shall only be done in VMC and with agreement with the pilot. If no other solutions are practical, the succeeding aircraft shall be instructed to go around.

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

At any time should a runway become unsuitable for an aircraft landing, or separation minima is not met, aircraft shall be instructed to go-around.

+
+

Example

+

Controller: "QTR36M, go around, I say again, go around, acknowledge."

+
+

Once aircraft have acknowledged the instruction and are observed to be safely climbing away, they shall be handed off to the appropriate Doha Approach controller.

+
+

Example

+

Controller: "QTR36M, climb to 4000ft via standard missed approach, contact Doha Approach East 124.775."

+
+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

Aircraft shall be instructed to follow the standard missed approach and aircraft shall not be permitted to depart if an arriving aircraft is within 4 NM of the landing threshold.

+

4.4.4 Arrival taxi procedures

+

In accordance with the taxi procedures laid down in 3.4, aircraft shall be provided an initial taxi clearance to ensure they are kept moving such that the rapid exit taxiway (RET) is clear for the next arrival.

+

The initial taxi shall include instructions to taxi “LEFT” or “RIGHT” onto the relevant taxiway as appropriate and hold at a suitable intermediate holding point.

+
+

Example

+

Controller: "QTR9L taxi right onto K, hold short R."

+
+

Once aircraft have been observed to be taxiing and completely clear of the RET, transfer of control shall be initiated to GMC provided there will be no conflicts with other arriving traffic.

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+
    +
  • The tailwind component must not exceed 5 knots, measured at the landing threshold, and there should be no pilot reports of wind shear.
  • +
  • Meteorological visibility must be at least 5 km, with a cloud ceiling no lower than 1000 feet. ATC must be confident that the pilot of the following aircraft can clearly and continuously observe the relevant traffic.
  • +
  • The pilot of the succeeding aircraft must be warned, and traffic information must be provided to them.
  • +
  • The runway must be dry, with no signs that braking action could be negatively affected.
  • +
  • ATC must be able to assess separation visually, and wake turbulence separation minima must be applied.
  • +
  • Minimum separation must be maintained between two departing aircraft immediately after the second aircraft takes off.
  • +
  • To ensure the preceding aircraft vacates the runway in a timely manner, the pilot should be advised of the exit at which they should plan to vacate.
  • +
+

4.5.2 Departure following departure

+

Take-off clearance may be issued to a departing aircraft, commencing its take-off roll from full length, before the preceding departure has passed the upwind end of the runway, provided that ATC has reasonable assurance that:

+
    +
  • +

    RWY 16L:
    + The preceding aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY A5) by the time the succeeding aircraft begins its take-off roll. Minimum separation will continue to exist, constant or increasing, between the two departing aircraft immediately after the second aircraft's take-off.

    +
  • +
  • +

    RWY 34R:
    + The preceding aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY A7) by the time the succeeding aircraft begins its take-off roll. Minimum separation will continue to exist, constant or increasing, between the two departing aircraft immediately after the second aircraft's take-off.

    +
  • +
  • +

    RWY 16R:
    + The preceding aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY R) by the time the succeeding aircraft begins its take-off roll. Minimum separation will continue to exist, constant or increasing, between the two departing aircraft immediately after the second aircraft's take-off.

    +
  • +
  • +

    RWY 34L:
    + The preceding aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY L8) by the time the succeeding aircraft begins its take-off roll. Minimum separation will continue to exist, constant or increasing, between the two departing aircraft immediately after the second aircraft's take-off.

    +
  • +
+
+

Note

+

The succeeding departure may commence its take-off roll, subject to the same conditions, when departing from:

+
    +
  • RWY 16L from A11
  • +
  • RWY 34R from A1
  • +
  • RWY 16R from L11
  • +
  • RWY 34L from L1
  • +
+
+

4.5.3 Landing following landing

+

When the runway in use is temporarily occupied by other traffic, landing clearance may be issued to an arriving aircraft, provided the controller has reasonable assurance that the following separation distances and criteria will be met when the landing aircraft crosses the runway threshold:

+
    +
  • +

    RWY 16L:
    + The preceding landing aircraft has landed and vacated the runway, or has passed a point at least 2400 meters from the threshold (abeam TWY A5), and is in motion to vacate the runway without stopping or backtracking.

    +
  • +
  • +

    RWY 34R:
    + The preceding landing aircraft has landed and vacated the runway, or has passed a point at least 2400 meters from the threshold (abeam TWY A7), and is in motion to vacate the runway without stopping or backtracking.

    +
  • +
  • +

    RWY 16R:
    + The preceding landing aircraft has landed and vacated the runway, or has passed a point at least 2400 meters from the threshold (abeam TWY R), and is in motion to vacate the runway without stopping or backtracking.

    +
  • +
  • +

    RWY 34L:
    + The preceding landing aircraft has landed and vacated the runway, or has passed a point at least 2400 meters from the threshold (abeam TWY L8), and is in motion to vacate the runway without stopping or backtracking.

    +
  • +
+
+

Note

+

Landing RRSM (Reduced Runway Separation Minimum) will only be applied between two successive arrivals, provided both aircraft have been instructed to vacate at published Rapid Exit Taxiways (RETs).

+
+

4.5.4 Landing following departure

+

When the runway in use is temporarily occupied by other traffic, landing clearance may be issued to an arriving aircraft, provided the controller has reasonable assurance that the following separation distances and criteria will be met when the landing aircraft crosses the runway threshold:

+
    +
  • +

    RWY 16L:
    + The preceding departing aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY A5), or if not airborne, will be at least 2400 meters from the threshold.

    +
  • +
  • +

    RWY 34R:
    + The preceding departing aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY A7), or if not airborne, will be at least 2400 meters from the threshold.

    +
  • +
  • +

    RWY 16R:
    + The preceding departing aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY R), or if not airborne, will be at least 2400 meters from the threshold.

    +
  • +
  • +

    RWY 34L:
    + The preceding departing aircraft will be airborne and have passed a point at least 2400 meters from the threshold (abeam TWY L8), or if not airborne, will be at least 2400 meters from the threshold.

    +
  • +
+
+

Note

+

Pilots should be aware of the possibility of a go-around if no landing clearance has been received when approaching 2 NM from the threshold, with another aircraft lined up or departing.

+
+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

Low visibility operations (LVO) are commenced at Doha-Hamad when:

+
    +
  • Touchdown RVR is indicated to be 600 metres or less;
  • +
  • Reported meteorological visibility is 600 metres or less;
  • +
  • The reported cloud ceiling is less than 300 feet
  • +
+

LVO may be pre-emptively initiated when RVR or meteorological visibility is reported at or below 1500 m and forecast to reduce below LVO minima, or the cloud ceiling is reported as 500 ft, and forecast to reduce below LVO minima.

+

4.7.2 LVO departure procedures

+

During LVO, aircraft must use CAT II/III holding points for all runways in order to protect ILS-critical areas.

+

CAT II/III holding points must be used during LVO for departing aircraft (Table 5-4).

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
16LA10
16RL10/M12/P11/12/13/14
34LL2/P1/P2/P3/P4/P5
34RA2
+
+
Table 4-5: CATII/III holding points
+
+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

Doha-Hamad has two AIR positions: AIR 1 and AIR 2.

+
    +
  • AIR 1 controls runway 16L/34R, including all associated exit taxiways and runway holding points.
  • +
  • AIR 2 controls runway 16R/34L, including all associated exit taxiways and runway holding points.
  • +
+

The airspace around the airport is divided along the middle of the main concourse. AIR 1 is responsible for the airspace to the east of the concourse, while AIR 2 is responsible for the airspace to the west.

+

(See sections 6.2 and 6.3)

+

4.8.2 Handoff procedure

+

Where transfer of control is to be made between aerodrome controllers, aircraft shall not be cleared to a point beyond the current controller’s designated zone of responsibility unless there has been prior coordination with the next controller. Hold short instructions may be used to satisfy this requirement. +For runway crossings, the crossing instruction must only be issued by the designated AIR controller for the respective runway unless prior coordination has been conducted.

+

4.8.3 Splitting procedure

+

Where there is only one controller, they shall cover all runways and associated airspace from the AIR 1 position.

+

Unless otherwise authorised by the Arabian vACC staff, GMP (Hamad Clearance Delivery) and at least one GMC (Hamad Ground) position must be online before two AIR (Hamad Tower) positions may be opened.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/appendix_aor/index.html b/aerodrome/doha-hamad/appendix_aor/index.html new file mode 100644 index 00000000..15d5f4ce --- /dev/null +++ b/aerodrome/doha-hamad/appendix_aor/index.html @@ -0,0 +1,6965 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas marked in red are the responsibility of the AIR controller, while areas marked in blue are handled by the appropriate GMC controller. Boundaries between these areas are indicated by a white line. Early hand-offs should be used to maintain aircraft movement, and controllers should not wait for aircraft to reach the edge of the boundary before initiating hand-offs.

+

7.2 General Configuration

+
+

Area of Responsibility

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/appendix_hotspots/index.html b/aerodrome/doha-hamad/appendix_hotspots/index.html new file mode 100644 index 00000000..ff4a7cf9 --- /dev/null +++ b/aerodrome/doha-hamad/appendix_hotspots/index.html @@ -0,0 +1,6965 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+

8.2 General Hotspots

+
+

Hotspots

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/appendix_taxi/index.html b/aerodrome/doha-hamad/appendix_taxi/index.html new file mode 100644 index 00000000..ad6c966f --- /dev/null +++ b/aerodrome/doha-hamad/appendix_taxi/index.html @@ -0,0 +1,7244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes. Runway holding points are shown in red.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 16L

+

6.2.1 Departure

+
+

16L Departure Diagram

+
+

6.2.2 Arrivals

+
+

16L Arrival Diagram

+
+

6.3 Runway 16R

+

6.3.1 Departure

+
+

16R Departure Diagram

+
+

6.3.2 Arrivals

+
+

16R Arrival Diagram

+
+

6.4 Runway 34L

+

6.4.1 Departure

+
+

34L Departure Diagram

+
+

6.4.2 Arrivals

+
+

34L Arrival Diagram

+
+

6.5 Runway 34R

+

6.5.1 Departure

+
+

34R Departure Diagram

+
+

6.5.2 Arrivals

+
+

34R Arrival Diagram

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/gmc/index.html b/aerodrome/doha-hamad/gmc/index.html new file mode 100644 index 00000000..11de3671 --- /dev/null +++ b/aerodrome/doha-hamad/gmc/index.html @@ -0,0 +1,8376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("Hamad Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("Hamad Ground")

+

3.1 General provisions

+

The Ground Movement Controller (GMC) is responsible for managing aircraft movements on all aerodrome movement areas except for runways and their associated taxiways. Departing aircraft are given pushback instructions and instructions to taxi to the runway holding point. Arriving aircraft are assigned a stand and instructed to taxi as appropriate.

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

When aircraft have been handed off from GMP, they shall be fully ready for pushback, and have reached their TOBT. Assuming no obstructions, they shall be instructed to push back immediately. If an aircraft is cleared for push and start but does not begin pushing within 2-5 minutes, the pushback clearance is canceled, and a new TOBT is assigned.

+

Aircraft requesting push that are not squawking their assigned transponder code shall be instructed to hold position and squawk the correct code. They must not be allowed to move until doing so.

+

Pushback direction is based primarily on aircraft location and runway configuration.

+

All code F aircraft (A380/B747-8) are not permitted to be pushed onto taxiway W (between taxiway H and stand A4), taxiway E (between taxiway D and stand B2), or taxiway Y.

+

A pushback clearance must be a variant of those provided in 3.2.2 and include an instruction to “FACE NORTH”, “FACE EAST", “FACE SOUTH" or “FACE WEST” as appropriate with the taxiway to push onto.

+
+

Example

+

Pilot: "Hamad Ground, QTR1, on stand A8 request pushback."

+

Controller: "QTR1, Hamad Ground, pushback approved, face West on W."

+

Pilot: "Pushback approved, facing West on W, QTR1."

+
+

Conditional pushback instructions may also be issued if an aircraft is taxiing behind another waiting for pushback.

+
+

Example

+

Pilot: "Hamad Ground, FDB12, on stand G3C request pushback."

+

Controller: "FDB12, Hamad Ground, behind the company 737 passing left to right, pushback approved, face South on E2."

+

Pilot: "After the company 737 passes from left to right, pushback approved, facing South on E2, FDB12."

+
+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

This type will normally have the aircraft stop abeam the adjacent stand. The phraseology for this type of pushback is identical to the pushback phraseology as provided in 3.2.1.

+

3.2.2.2 Short pushback

+

A short pushback instruction shall require the aircraft to complete the pushback abeam the current stand such that the adjacent stand will not be blocked.

+
+

Example

+

Pilot: "Hamad Ground, IBE0392, on stand H10 request pushback."

+

Controller: "IBE0392, Hamad Ground, short pushback approved, face south on J to finish abeam stand H10."

+

Pilot: "Short pushback approved, facing west on J to finish abeam stand H10, IBE0392."

+
+

3.2.2.3 Long pushback

+

A long pushback instruction shall require aircraft to complete the pushback operation two stands away from where the pushback was commenced. This manoeuvre may be used when aircraft are vacating a stand to be used by another aircraft that is taxiing in.

+
+

Example

+

Pilot: "Hamad Ground, QTR1184, on stand A7 request pushback."

+

Controller: "QTR1184, Hamad Ground, long pushback approved, face west on W1 to finish abeam stand A3."

+

Pilot: "Long pushback approved, facing west on W1 to finish abeam stand A3, QTR1184."

+
+

3.2.3 Simultaneous pushback operations

+

Simultaneous pushbacks may be permitted from adjacent stands provided aircraft are instructed to manoeuvre in accordance with 3.2.2 such that on completion of both aircraft’s pushback operation, they will be separated on the taxiway by two aircraft stands.

+

3.2.4 Pushback Operations

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse AAircraft face West onto taxiway W and W1.
Stand A11: face North or South depending on departure runway.
Occasionally pushed onto W2 facing West.
Concourse BAircraft face East onto taxiway E and E1.
Stand B10: face North or South depending on departure runway.
Occasionally pushed onto E2 facing East.
Concourse CStands C1-C8: push back facing South onto E1 or W1.
Stands C9-C12: push back facing North onto E4 or W4.
Occasionally pushed onto E2/W2 (South) or E3/W3 (North).
Concourse DAircraft face North onto W4.
Occasionally pushed onto W3 facing North.
Concourse EAircraft face North onto E4.
Occasionally pushed onto E3 facing North.
Central ConcourseAircraft face East or West depending on departure runway onto N.
Remote Transfer HStands H1-H2: push back facing West onto W2.
Stand H3C: push back facing South onto W2.
Stands H4-H6: push back facing North onto W3.
Stands H7-H10: push back North or South onto J.
Occasionally pushed onto W1 (South/West) or W4 (North).
Remote Transfer GStands G1-G2: push back facing East onto E2.
Stand G3C: push back facing South onto E2.
Stands G4-G6: push back facing North onto E3.
Stands G7-G10: push back North or South onto C.
Occasionally pushed onto E1 (South/East) or E4 (North).
Apron CargoAircraft face North or South depending on departure runway onto F.
Apron VStands V1-V7: face North or South onto V.
Stands V8-V12: push back North or South onto C.
Apron 4Aircraft face North or South depending on departure runway onto C or Q.
Apron 5Aircraft face North or South depending on departure runway onto K.
Stands 551-564: face West onto Y.
Apron 6Departures from runway 34L: face South onto S2 or S4.
Departures from runway 34R: face North.
Departures from runways 16L or 16R: face North onto S2 or S4.
+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

Aircraft should be assigned the most suitable taxi route for their designated departure runway.

+

Code F aircraft (A380/B747-8) are not permitted to taxi onto taxiway W (between taxiway H and stand A4), taxiway E (between taxiway D and stand B2), or taxiway Y.

+
+

Info

+

Where aircraft are taxied to runway holding points, transfer of control to AIR shall be made early enough such that the aircraft is not required to stop its taxi.

+
+
+

Example

+

Pilot: "QTR3B, request taxi."

+

Controller: "QTR3B, taxi via W2, K, holding point L, runway 34L."

+

Pilot: "Taxi via W2, K, holding point L, runway 34L, QTR3B."

+
+

To deconflict traffic, and to reduce the length of taxi clearances, intermediate holding points shall be used wherever possible.

+
+

Example

+

Pilot: "QTR98K, request taxi."

+

Controller: "QTR98K, taxi via W2, hold short J."

+

Pilot: "Taxi via W2, hold short J, QTR98K."

+
+

3.3.2 Runway 16L departure taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft on taxiway W: taxi via H or W to join J, R, and B to reach holding points A10, A11, A12.
Aircraft on taxiway J: taxi via R and B to reach holding points A10, A11, A12.
Aircraft on W1, W2, W3, W4: taxi via J, R, and B to reach holding points A10, A11, A12.
Concourse B, C (East), E, Remote Transfer GAircraft on taxiways E, E1, E2, E3, E4: taxi to join B to reach holding points A10, A11, A12.
Aircraft on taxiway D: taxi to join E1 and B to reach holding points A10, A11, A12.
Aircraft on taxiway C: taxi to join B to reach holding points A10, A11, A12.
Central ConcourseAircraft on taxiway N: taxi to join R and B to reach holding points A10, A11, A12.
Apron CargoAircraft on taxiway F: taxi to join B to reach holding points A10, A11, A12.
Apron VAircraft on taxiway V: taxi to join B to reach holding points A10, A11, A12.
Aircraft on taxiway C: taxi to join B to reach holding points A10, A11, A12.
Apron 4Aircraft on taxiway Q: taxi to join C or B to reach holding points A10, A11, A12.
Apron 5Aircraft on taxiway K: taxi to join R and B to reach holding points A10, A11, A12.
Aircraft on taxiway Y: taxi to join K, R, and B to reach holding points A10, A11, A12.
Apron 6Aircraft on taxiways S2 or S3: taxi to join R1, R, and B to reach holding points A10, A11, A12.
+

3.3.3 Runway 16R departure taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft on taxiway W: taxi via K to reach holding points L10, L11, L12.
Aircraft on taxiway J: taxi via K to reach holding points L10, L11, L12.
Aircraft on taxiways W1, W2, W3, W4: taxi via K to reach holding points A10, A11, A12.
Concourse B, C (East), E, Remote Transfer GAircraft on taxiways E, E1, E2, E3, E4: taxi to join C, S, and K to reach holding points L10, L11, L12.
Aircraft on taxiway D: taxi to join E1, C, S, and K to reach holding points L10, L11, L12.
Aircraft on taxiway C: taxi to join S, and K to reach holding points L10, L11, L12.
Central ConcourseAircraft on taxiway N: taxi to join S and K to reach holding points L10, L11, L12.
Apron CargoAircraft on taxiway F: taxi to join C, S, and K to reach holding points L10, L11, L12.
Apron VAircraft on taxiway V: taxi to join C, S, and K to reach holding points L10, L11, L12.
Aircraft on taxiway C: taxi to join S and K to reach holding points L10, L11, L12.
Apron 4Aircraft on taxiway Q: taxi to join F or B, then continue onto S and K to reach holding points L10, L11, L12.
Apron 5Aircraft on taxiway K: taxi to reach holding points L10, L11, L12.
Aircraft on taxiway Y: taxi to join K to reach holding points L10, L11, L12.
Apron 6Aircraft on taxiways S2 or S3: taxi to join R1 and M to reach holding points L10, L11, L12.
+

3.3.4 Runway 34L departure taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft on taxiway W: taxi via L or L1.
Aircraft on taxiway J: taxi via L2, L1, or L.
Aircraft on taxiways W1, W2, W3, W4: taxi via J or K and continue to holding points L2, L1, or L.
Concourse B, C (East), E, Remote Transfer GAircraft on taxiways E, E1, E2, E3, E4: taxi to join C, S, and K and proceed to holding points L2, L1, or L.
Aircraft on taxiway D: taxi to join C, S, and K and proceed to holding points L2, L1, or L.
Aircraft on taxiway C: taxi to join S, K, and proceed to holding points L2, L1, or L.
Central ConcourseAircraft on taxiway N: taxi to join S, K, and continue to holding points L2, L1, or L.
Apron CargoAircraft on taxiway F: taxi to join C, S, K, and continue to holding points L2, L1, or L.
Apron VAircraft on taxiway V: taxi to join C, S, K, and continue to holding points L2, L1, or L.
Aircraft on taxiway C: taxi to join S, K, and continue to holding points L2, L1, or L.
Apron 4Aircraft on taxiway C or Q: taxi to join F, C, S, K, and continue to holding points L2, L1, or L.
Apron 5Aircraft on taxiway K: taxi to join holding points L2, L1, or L.
Aircraft on taxiway Y: taxi to join K and continue to holding points L2, L1, or L.
Apron 6Aircraft on taxiway S2: taxi to join S3, P, M, and continue to holding points M1, M2, or M3.
Aircraft on taxiway S4: taxi to join P, M, and continue to holding points M1, M2, or M3.
+

3.3.5 Runway 34R departure taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft on taxiway W: taxi via H, then proceed through either W1 or W2, and continue on J, R, and B to reach holding points A2, A1, or A.
Aircraft on taxiway J: taxi via R and B to reach holding points A2, A1, or A.
Aircraft on taxiways W1, W2, W3, or W4: taxi via J, R, and B to reach holding points A2, A1, or A.
Concourse B, C (East), E, Remote Transfer GAircraft on taxiways E, E1, E2, E3, E4: taxi to join either B or C to reach holding points A2, A1, or A.
Aircraft on taxiway D: taxi to join B to reach holding points A2, A1, or A.
Aircraft on taxiway C: taxi to join B to reach holding points A2, A1, or A.
Central ConcourseAircraft on taxiway N: taxi to join R, B, and continue to reach holding points A2, A1, or A.
Apron CargoAircraft on taxiway F: taxi to join B to reach holding points A2, A1, or A.
Apron VAircraft on taxiway V: taxi to join C to reach holding points A2, A1, or A.
Aircraft on taxiway C: taxi to reach holding points A2, A1, or A.
Apron 4Aircraft on taxiway C: taxi to join B to reach holding points A2, A1, or A.
Aircraft on taxiway Q: taxi to join B to reach holding points A2, A1, or A.
Apron 5Aircraft on taxiway K: taxi to join R and B to reach holding points A2, A1, or A.
Aircraft on taxiway Y: taxi to join K, R, and B to reach holding points A2, A1, or A.
Apron 6Aircraft on taxiways S2 and/or S4: taxi to join R1, cross runway 34L, and join R and B to reach holding points A2, A1, or A.
+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

Arriving aircraft should not be handed off by AIR immediately upon landing. Instead, they must receive initial taxi instructions to taxiways B, K, or M to maintain traffic flow.

+

Aircraft must avoid stopping on rapid exit taxiways and should proceed as follows, unless otherwise directed by the tower:

+
    +
  • Vacating 16L: Continue taxiing southbound via taxiway B.
  • +
  • Vacating 16R: Continue southbound via taxiway K or M.
  • +
  • Vacating 16R with parking on Apron 5: Expect a northbound turn onto taxiway K (HIRO does not apply).
  • +
  • Vacating 34L: Continue northbound via taxiway M unless instructed to vacate to the east (HIRO does not apply when vacating east).
  • +
  • Vacating 34R: Continue northbound via taxiway B.
  • +
+

Therefore, GMC should assign an arrival stand to aircraft as soon as they appear on the arrival list, as this facilitates the assignment of the arrival runway for terminal controllers.

+

Once the aircraft is handed off to GMC, they can be directed to their assigned stand.

+

3.4.2 Runway 16L arrival taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft vacating via A8 and A7: Taxi to join S, K, and proceed to W1, W2, W3, W4, or H.
Aircraft vacating via A3: Taxi to join C, S, K, and proceed to W1, W2, W3, W4, or H.
Concourse B, C (East), D, Remote Transfer GAircraft vacating via A8, A7, and A3: Taxi to join B and proceed to E1, E2, E3, E4, or D.
Central ConcourseAircraft vacating via A8 and A7: Taxi to join S and proceed to T1 or T4 to join N.
Aircraft vacating via A3: Taxi to join C, S and proceed to T1 or T4 to join N.
Cargo ApronAircraft vacating via A8 and A7: Taxi to join B.
Aircraft vacating via A3: Taxi to join C.
Apron VAircraft vacating via A8, A7, and A3: Taxi to join B to join C or D.
Apron 4Aircraft vacating via A8 and A7: Taxi to join B and then Q.
Aircraft vacating via A3: Taxi to join C and then Q.
Apron 5Aircraft vacating via A8 and A7: Taxi to join S and K.
Aircraft vacating via A3: Taxi to join C, S and K.
Apron 6Aircraft vacating via A8 and A7: Taxi to join S and S1 to join S2 or S4.
Aircraft vacating via A3: Taxi to join C, S and S1 to join S2 or S4.
+

3.4.3 Runway 16R arrival taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft vacating via L8 and L5: Taxi to join K, R, B, and proceed to join E1, E2, E3, E4, or D.
Aircraft vacating via L3: Taxi to join J, R, B, and proceed to join E1, E2, E3, E4, or D.
Concourse B, C (East), D, Remote Transfer GAircraft vacating via L8, L5, and L3: Taxi to join K and proceed to join W1, W2, W3, W4, or H.
Central ConcourseAircraft vacating via L8 and L5: Taxi to join K, R and proceed via T1 or T4 to join N.
Aircraft vacating via L3: Taxi to join J, R, and proceed via T1 or T4 to join N.
Cargo ApronAircraft vacating via L8 and L5: Taxi to join K, R, and C.
Aircraft vacating via L3: Taxi to join J, R, and C.
Apron VAircraft vacating via L8 and L5: Taxi to join K, R, and B to join C or D.
Aircraft vacating via L3: Taxi to join J, K, R, and B to join C or D.
Apron 4Aircraft vacating via L8 and L5: Taxi to join K, R, and C or B.
Aircraft vacating via L3: Taxi to join J, R, and C or B.
Apron 5Aircraft vacating via L8 and L5: Taxi to join K.
Aircraft vacating via L3: Taxi to join J, R, and K.
Apron 6Aircraft vacating via M9 and M7: Taxi to join M, S1, to proceed to S2 or S4.
Aircraft vacating via M5: Taxi to join M and proceed to either S1 or P8 to join either S2 or S4.
+

3.4.4 Runway 34L arrival taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft vacating via L4, L6, and L9 shall taxi to join K and then proceed to W1, W2, W3, W4, or H.
Concourse B, C (East), D, Remote Transfer GAircraft vacating via L4, L6, and L9 shall taxi to join K, R, B, and then proceed to E1, E2, E3, E4, or D.
Central ConcourseAircraft vacating via L4, L6, and L9 shall taxi to join K, R, and then T1 or T2 to join N.
Cargo ApronAircraft vacating via L4, L6, and L9 shall taxi to join K, R, and then C or B.
Apron VAircraft vacating via L4, L6, and L9 shall taxi to join K, R, and B, and then proceed to C or D.
Apron 4Aircraft vacating via L4, L6, and L9 shall taxi to join K, R, and B to join Q.
Apron 5Aircraft vacating via L4, L6, and L9 shall taxi to join K.
Apron 6Aircraft vacating via M6, M8, and M10 shall taxi to join M, S1, and then proceed to S2 or S4.
+

3.4.5 Runway 34R arrival taxi procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concourse/ApronInstruction Details
Concourse A, C (West), D, Remote Transfer HAircraft vacating via A4, A5, and A9 shall taxi to join B, S, and proceed to W1, W2, W3, W4, or H.
Concourse B, C (East), D, Remote Transfer GAircraft vacating via A4, A5, and A9 shall taxi to join B and proceed to E1, E2, E3, E4, or D.
Central ConcourseAircraft vacating via A4, A5, and A9 shall taxi to join B, S, and then T1 or T2 to join N.
Cargo ApronAircraft vacating via A4, A5, and A9 shall taxi to join B or C.
Apron VAircraft vacating via A4, A5, and A9 shall taxi to join B and then proceed to C or D.
Apron 4Aircraft vacating via A4, A5, and A9 shall taxi to join B to join Q.
Apron 5Aircraft vacating via A4, A5, and A9 shall taxi to join B, S, and K.
Apron 6Aircraft vacating via A4, A5, and A9 shall taxi to join B, S, and S2, and then proceed to S2 or S4.
+

3.4.6 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Apron/ConcourseStand AllocationOperator
Concourse AStands A1 to A11International Operators, QTR
Concourse BStands B1 to B10International Operators, QTR
Concourse CStands C1 to C13International Operators, QTR
Concourse DStands D1 and D3International Operators, QTR
Concourse EStands E1 and E3International Operators, QTR
Central ConcourseStands 301 to 309QTR
Remote Transfer GStands H1 to H10Low Cost Carriers, International Operators, QTR
Remote Transfer HStands G1 to G10Low Cost Carriers, International Operators, QTR
Cargo ApronStands F1 to F16Cargo, QTR (Overflow)
Apron VStands V1 to V12Government & State Aircraft
Apron 4Stands 425 to 429QTR
Apron 5Stands 501 to 519 & Stands 551 to 564QTR
Apron 6Stands 601 to 637QTR
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LocationAircraft Code Handling
Concourse A to E (including Central Concourse and Remote Transfer Aprons)All stands can handle aircraft up to code E. Stands with designators of L or R are limited to code C.
Cargo ApronAll stands can handle aircraft up to code E.
Apron VAll stands can handle aircraft up to code E. Stands with designators of L or R are limited to code C.
Apron 4All stands can handle aircraft up to code C.
Apron 5All stands can handle aircraft up to code E. Stands with designators of L or R are limited to code C. Stands 551 to 564 are limited to code C.
Apron 6All stands can handle aircraft up to code E. Stands with designators of L or R are limited to code C.
Specific StandsStands A3, A5, B1, B3, C12, C13, V1, V2, 604, 607, 611, and 614 can handle aircraft up to code F. H1 and G1 can handle aircraft up to code F with certain handling limitations.
+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

When LVO is in effect, aircraft should avoid crossing the runways whenever possible. All taxiways are approved for LVO operations, and there are no taxiway restrictions.

+

During LVO, only designated CAT II/III holding points shall be used (4.6.2).

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

Doha-Hamad Airport operates three GMC positions: GMC 1, GMC 2, and GMC 3.

+

3.6.1.1 GMC 1 Responsibilities

+

GMC 1 manages aircraft movements in the following areas and their associated taxiways: +- Concourse B
+- Concourse C (East Side)
+- Concourse E
+- Central Concourse (shared with GMC 2)
+- Remote Transfer G
+- Cargo Apron
+- Maintenance Apron
+- Apron 4

+

3.6.1.2 GMC 2 Responsibilities

+

GMC 2 manages aircraft movements in the following areas and their associated taxiways: +- Concourse A
+- Concourse C (West Side)
+- Concourse D
+- Central Concourse (shared with GMC 1)
+- Remote Transfer H1
+- Apron 5

+

3.6.1.3 GMC 3 Responsibilities

+

GMC 3 manages aircraft movements in the following area and its associated taxiways: +- Apron 6

+

3.6.2 Handoff procedures

+

When transferring control between controllers, aircraft must not be cleared beyond the current controller’s designated area of responsibility unless prior coordination has been completed with the next controller. Hold short instructions may be issued to meet this requirement.

+

3.6.3 Splitting procedure

+

When a single GMC controller is online, they shall manage all surface movement areas from the GMC 1 position.

+

Unless otherwise authorized by Arabian vACC staff, GMP (Hamad Delivery) must be online before three GMC (Hamad Ground) positions can be opened.

+

If GMP is not online, GMC shall assume the responsibilities of the lower controller.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/gmp/index.html b/aerodrome/doha-hamad/gmp/index.html new file mode 100644 index 00000000..c19a2e97 --- /dev/null +++ b/aerodrome/doha-hamad/gmp/index.html @@ -0,0 +1,7589 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("Hamad Clearance Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("Hamad Clearance Delivery")

+

2.1 General provisions

+

Airways clearance/Ground Movement Planner (GMP) is responsible for validating routes and shall provide IFR clearance to departing aircraft. The controller shall assign the correct departure procedure to the aircraft based on the first point that is filed on the flight plan.

+

Where the flight plan contains an invalid route, level, or departure procedure, GMP must ensure that the error is corrected before the aircraft is given its clearance.

+

GMP is also responsible for minimizing taxiway delays and taxiway congestion for departing aircraft. During times of increased departure activity, aircraft are held at the gate to save fuel and lessen taxiway congestion.

+

2.2 Departure clearance

+

2.2.1 General

+

GMP is responsible for issuing clearances for departing aircraft. Pilots may be expected to report the following information on first contact:

+
    +
  • Callsign;
  • +
  • Aircraft type;
  • +
  • Departure D-ATIS letter;
  • +
  • Parking stand;
  • +
  • Requested flight level;
  • +
  • Destination;
  • +
+

2.2.2 Information contained in a departure clearance

+

An IFR clearance shall be in the following format:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • Departure procedure;
  • +
  • Initially cleared altitude;
  • +
  • Assigned SSR code
  • +
+

GMP shall obtain a full readback of the clearance. If the pilot does not report the current ATIS letter on first contact, GMP shall pass the current ATIS letter and QNH.

+

Departing aircraft shall be instructed to remain on the delivery frequency and report ready to push before being handed off to GMC. This is so aircraft may be held at the gate, as per the procedures laid down in 2.6.

+
+

Example

+

Pilot: "Hamad Clearance Delivery, QTR6M, Boeing 777-300ER, information X, stand B3, requesting FL310, to Melbourne."

+

Controller: "QTR6M, Hamad Clearance Delivery, information X correct, cleared to Melbourne via the BUNDU2E departure, climb via the SID to altitude 4000ft, squawk 2613."

+

Pilot: "Cleared to Melbourne via the BUNDU2E departure, climb via the SID to altitude 4000ft, squawk 2613, QTR6M."

+

Controller: "QTR6M, readback correct, QNH 1016, report ready for pushback."

+
+
+

Info

+

The initial cleared altitude is stated as "Climb via the SID." At Doha-Hamad, SIDs do not include a preset initial climb. The clearance issued corresponds to the first hard altitude restriction. It's crucial for controllers to understand the difference between standard "initial climb" phraseology and correctly use "climb via the SID" at Doha-Hamad.

+
+
+

Warning

+

As per the Qatari eAIP "Requests for the runway in use should be avoided." This must be adhered to on frequency, as outlined in section 2.3.1, where each SID is specific to its assigned runway.

+
+ +

Aircraft clearance may also be delivered by DCL. This type of clearance reduces controller workload and frequency congestion. For suitably equipped aircraft, this will be through the ACARS system on board the aircraft.

+
+

Info

+

Controllers shall ensure that DCL is available to be used at all times.

+
+

2.2.4 Aircraft requiring a reroute

+

Aircraft requiring a reroute shall not be given a DCL. Instead, a voice clearance must be used. This shall be communicated by ACARS datalink message or on frequency.

+

2.2.5 Voice clearance

+

Aircraft requesting clearance via voice shall be given a voice clearance as per the format in 2.2.2.

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+

Doha-Hamad primarily uses RNAV standard instrument departures (SIDs) and is the preferred departure type for IFR aircraft. Departing aircraft shall be assigned an appropriate RNAV departure according to the first fix in the flight plan and the direction of their flight plan.

+

Check the table below to see which SID corresponds to each runway. Keep in mind that these SIDs are assigned based on the flight's direction.

+

For instance, flights departing the TMA toward the northeast will use runway 16L/34R, while those heading southwest will use runway 16R/34L. Note that the initial climb instructions are stated as "Climb via the SID."

+
+

Warning

+

Controllers must ensure that the correct SID is assigned based on the specific runway and the flight's direction. If a runway does not have an assigned SID on the departure list, it is not an error. SIDs are runway-specific and depend on the flight’s direction.

+

Assigning an incorrect runway for a given direction will cause EuroScope to default to a radar-vectored departure, such as KASIS, IVENA, PARES, or DEMBO. If one of these four departures appears, it indicates that the runway assigned does not match the intended direction of flight, and the runway assignment should be reviewed and corrected accordingly.

+
+
+

Note

+

The TULUB departure is available for both runways and should be assigned based on runway capacity and the current departure rate. Coordination with the relevant APP controller is required.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SID
16L
Initial ClimbSID
16R
Initial ClimbSID
34L
Initial ClimbSID
34R
Initial Climb
ALSEM2M5000ftBUNDU2C7000ftDATRI1W4000ftALSEM2E4000ft
ALVEN2M5000ftDATRI1C7000ftLUBET1AFL180ALVEN3E4000ft
KASIS25000ftIVENA25000ftLUBET1W4000ftBUNDU2E4000ft
KUPRO1M5000ftLUBET1C6000ftPARES24000ftDEMBO34000ft
LUBET1M5000ftTULUB1C6000ftTULUB1AFL180KUPRO1E4000ft
LUBET1Y5000ftULIKA1C7000ftTULUB1W4000ftLUBET2E4000ft
TULUB1M5000ftULIKA1AFL200LUBET2Z4000ft
VAXIN2M5000ftULIKA1W4000ftTULUB3E4000ft
VAXIN2E4000ft
+
+
Table 2-1: RNAV SIDs
+
+
+

Warning

+

The TULUB1A and ULIKA1A are temporary procedures, so always check the latest NOTAMs for updates. The ULIKA1A departure is available from 22:00 to 01:00 UTC the following day, while the TULUB1A is available 24/7.

+
+

2.3.2 RNP radar departure

+

The RNP radar departure procedure shall be used when aircraft are unable to accept a one of the published RNP departures. Whereas regular RNP departures follow a prescribed track until leaving the Doha TMA, the RNP radar departures proceed to a fix beyond the extended runway centerline before continuing along the transition out of the TMA.

+

An RNP radar departure clearance shall contain the following information:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • RNP radar departure + transition;
  • +
  • Initial climb;
  • +
  • Assigned SSR code
  • +
+

Aircraft on an RNP radar departure shall have the appropriate SID inserted on the departure list (e.g. KASIS2xBUNDU). The KASIS and IVENA procedures have an initial climb altitude of 5000 feet, whereas the DEMBO and PARES procedures have an initial climb altitude of 4000 feet.

+
+

Example

+

Pilot: "Hamad Clearance Delivery, IGO1346, Airbus A320, information T, stand G1, requesting FL310, to Delhi, unable standard SIDs."

+

Controller: "IGO1346, Hamad Clearance Delivery, information T correct, cleared to Delhi via the KASIS2 departure, BUNDU transition, climb via the SID to altitude 5000ft, squawk 2612."

+

Pilot: "Cleared to Delhi via the KASIS2 departure, BUNDU transition, climb via the SID to altitude 5000ft, squawk 2612, IGO1346."

+

Controller: "IGO1346, readback correct, QNH 1016, report ready for pushback."

+
+

2.3.3 Radar vector departure

+

The radar vector departure procedure shall be used when aircraft are unable to accept an RNP departure, such as one with outdated nav data. Whereas RNP departures follow a prescribed track until leaving the Doha TMA, radar vector departures are given radar vectors to the first fix.

+

A radar departure clearance shall contain the following information:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • Departure instructions;
  • +
  • Initial climb;
  • +
  • Assigned SSR code
  • +
+

Aircraft on a radar vectors departure shall have the text RDV inserted to the scratchpad section of their entry on the departure list. Aircraft assigned a radar vector departure should be given the runway that best matches their direction of flight.

+

Runway 16L/34R should be used for eastbound departures, while runway 16R/34L is designated for westbound departures. The initial climb for runway 16L/34R shall be set to 4000 feet, while for runway 16R/34L, it shall be set to 3000 feet.

+

Departures heading eastbound shall be handed over to Doha Approach (East), while those heading westbound shall be transferred to Doha Approach (West).

+
+

Example

+

Pilot: "Doha Ground, TCM1TM, Airbus A320, stand 512, clearance to Jeddah, unable RNAV, with information Z on board."

+

Controller: "TCM1TM, Hamad Clearance Delivery, information Z correct, cleared to Jeddah via runway 34L, fly runway heading, expect radar vectors after departure, maintain altitude 3000ft, squawk 2610."

+

Pilot: "Cleared to Jeddah via runway 34L, fly runway heading, expect radar vectors after departure, maintain altitude 3000ft, squawk 2610, TCM1TM."

+

Controller: "TCM1TM, readback correct, QNH 1014, report ready for pushback."

+
+

2.4 Rerouting aircraft

+

An aircraft shall be issued a reroute by GMC if the pilot’s route doesn’t comply with the standard routes laid out in Table 2-2.

+

Several routing restrictions exist within Qatari airspace and are detailed in the Qatari Route Manual which must be complied with when issuing a departure clearance.

+

If an aircraft requires a reroute, they shall be informed of such as soon as they have connected to the network by private message or on frequency. The use of “.rte" and “.rtef" aliases are encouraged.

+

The Arabian vACC Operations Department maintains an up-to-date route database on SimBrief. These routes can be accessed by selecting the "User Submitted Routes" option, highlighted in purple, when planning a flight.

+
+

Example

+

Controller: "QTR30N, cleared to Zagreb via the TULUB2E departure, ALSEM - B457 - KINID, flight planned route. Climb via the SID altitude 4000ft, squawk 2612."

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DestinationLevel RestrictionRouting
Northern Emirates (OMDB, OMDW, OMFJ, OMFJ, OMRK, OMDM) (FL210 @ ASTOG)FL210ALSEM L305 ASTOG
Southern Emirates (OMAA, OMAD, OMAM, OMAL) (Max FL210)FL270KUPRO
Transiting Tehran FIR (FL230 @ DASUT)FL230VAXIN T800 DASUT
Transiting Tehran FIR (FL190 @ RAGAS)FL190ALVEN T430 RAGAS
Bahrain (OBBI, OBBS, OBKH)12,000ftTULUB B457 / M444 / T444 KINID
Transiting Bahrain FIR onwards landing Kuwait FIRFL260TULUB B457 KINID
Transiting Jeddah FIR onwards landing Kuwait FIRFL260TULUB M444 KINID
Transiting Kuwait FIRFL260LUBET T934 IMLAD
FL260LUBET L934 IMLAD
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

Aircraft routes out of the aerodrome must comply with all routing and level restrictions as described in section 3.1 of Arabian MATS P1, Arabian Route Manual and Table 2-2. This is based on direction and type of flight.

+

Should an aircraft file an invalid cruise level, GMP shall advise the aircraft of this when delivering the clearance. In all cases, the next lowest valid cruise level shall be assigned, and the aircraft advised.

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

When A-CDM procedures are active, pilots must report their confirmed TOBT on vacdm.vatsim.me, which is then displayed in the controller's client on the departure list. A fully green time indicates a confirmed TOBT. If a pilot has not confirmed their TOBT, the controller should request it on frequency and update the departure list accordingly.

+

The TOBT system allows aircraft to push back, taxi to the runway holding point, and depart on schedule without extended delays in the departure queue. If an aircraft reports ready for pushback before its assigned TOBT, it will be instructed to hold position and will be given its place in the pushback sequence, unless aerodrome conditions permit and a slot is available. If an aircraft is cleared for push and start but does not begin pushing within 2-5 minutes, the pushback clearance is canceled, and a new TOBT is assigned.

+
+

Example

+

Controller: "QTR1, hold position. Number 5 for startup, expect pushback at time 15."

+
+

2.7 Runway change procedure

+

AIR shall provide ample notice to GMP before changing runway configuration. The last departure using the old configuration shall be coordinated between AIR, GMP, GMC and approach/departure.

+

Aircraft that have already been cleared to depart using the old configuration shall be re-cleared if they have not already requested pushback.

+

2.8 VFR aircraft

+

VFR traffic is not allowed at Hamad International Airport. Pilots intending to fly VFR are advised to operate from Doha International Airport (OTBD) instead.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/hotspots/index.html b/aerodrome/doha-hamad/hotspots/index.html new file mode 100644 index 00000000..a1bfeb4a --- /dev/null +++ b/aerodrome/doha-hamad/hotspots/index.html @@ -0,0 +1,6984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

Due to the complex layout of the aerodrome, several areas exist which are prone to taxiway/runway incursions. Controllers must exercise caution and remain vigilant when aircraft are operating in these areas.

+

(See section 8 for visual depiction of incursion hotspots)

+

5.2 Hotspot 1, 2, and 3

+

There is an increased risk of runway incursions due to traffic flow. Pilots must exercise caution when approaching runway holding points and ensure they receive clearance before entering or crossing any runway. Pilots should remain vigilant of hold short positions, parking areas, signage, and stopbars.

+

5.3 Hotspot 4 and 5

+

Due to the complex taxiway layout, pilots should exercise caution when exiting the runway, especially with traffic pushing back from Apron 5.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha-hamad/img/othh_aor.png b/aerodrome/doha-hamad/img/othh_aor.png new file mode 100644 index 00000000..7496cb4f Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_aor.png differ diff --git a/aerodrome/doha-hamad/img/othh_arr_16L.png b/aerodrome/doha-hamad/img/othh_arr_16L.png new file mode 100644 index 00000000..8a3ec1f6 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_arr_16L.png differ diff --git a/aerodrome/doha-hamad/img/othh_arr_16R.png b/aerodrome/doha-hamad/img/othh_arr_16R.png new file mode 100644 index 00000000..a18d1c77 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_arr_16R.png differ diff --git a/aerodrome/doha-hamad/img/othh_arr_34L.png b/aerodrome/doha-hamad/img/othh_arr_34L.png new file mode 100644 index 00000000..1312564b Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_arr_34L.png differ diff --git a/aerodrome/doha-hamad/img/othh_arr_34R.png b/aerodrome/doha-hamad/img/othh_arr_34R.png new file mode 100644 index 00000000..73e8f540 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_arr_34R.png differ diff --git a/aerodrome/doha-hamad/img/othh_dep_16L.png b/aerodrome/doha-hamad/img/othh_dep_16L.png new file mode 100644 index 00000000..ba285e03 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_dep_16L.png differ diff --git a/aerodrome/doha-hamad/img/othh_dep_16R.png b/aerodrome/doha-hamad/img/othh_dep_16R.png new file mode 100644 index 00000000..bf5627b5 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_dep_16R.png differ diff --git a/aerodrome/doha-hamad/img/othh_dep_34L.png b/aerodrome/doha-hamad/img/othh_dep_34L.png new file mode 100644 index 00000000..6adb8eb9 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_dep_34L.png differ diff --git a/aerodrome/doha-hamad/img/othh_dep_34R.png b/aerodrome/doha-hamad/img/othh_dep_34R.png new file mode 100644 index 00000000..7045e417 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_dep_34R.png differ diff --git a/aerodrome/doha-hamad/img/othh_hotspots.png b/aerodrome/doha-hamad/img/othh_hotspots.png new file mode 100644 index 00000000..ebc4db83 Binary files /dev/null and b/aerodrome/doha-hamad/img/othh_hotspots.png differ diff --git a/aerodrome/doha-hamad/info/index.html b/aerodrome/doha-hamad/info/index.html new file mode 100644 index 00000000..388a549a --- /dev/null +++ b/aerodrome/doha-hamad/info/index.html @@ -0,0 +1,7017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date18 DEC 2024
Prepared byChriss Klosowski - ACCARB2
Approved byChris Marriott - ACCARB1
Next review date18 DEC 2025
Cancelled documentsSOP OTHH R01/2022
+

Record of Revisions

+ + + + + + + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2022Initial issue21 JUN 2022
01/2025Updated airspace positions,
Updated TORA + ASDA data,
Updated SID + initial climb + climb via SID phraseology,
Updated RNP radar departure + radar vector departure procedures,
Updated standard routings,
Updated pushback procedures,
Updated departure taxi procedures,
Updated arrival taxi procedures,
Updated GMC Area of Responsibilities,
Added simultaneous parallel departures information,
Added simultaneous paralle approaches information,
Added dependent aprallel runway approaches information,
Added independent parallel runway approaches information,
Added no transgression zone and break-out manouver procedures,
Updated standard departure points,
Updated take-off phraseology,
Updated departure hand offs,
Updated RRSM procedures
18 DEC 2024
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha/aerodrome/index.html b/aerodrome/doha/aerodrome/index.html new file mode 100644 index 00000000..2af333d2 --- /dev/null +++ b/aerodrome/doha/aerodrome/index.html @@ -0,0 +1,7441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO CodeOTBD
Aerodrome Reference Point (ARP)N 25 15.3 E 051 33.5
Elevation37 ft
Magnetic Variation / Annual Change2.6°E (FEB 2020) / 0.03°E
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
Doha ATISOTBD_ATISATIS126.450
Doha GroundOTBD_GNDGMC121.925
Doha TowerOTBD_TWRAIR118.900
Doha Director (East)DOH_F1_APPFIN E119.400
Doha Director (West)DOH_F3_APPFIN W124.050
Doha Approach (East)DOH_A1_APPAPP E119.725
Doha Approach (West)DOH_A2_APPAPP W124.775
Doha Radar (North)DOH_R1_APPRDR N121.100
Doha Radar (South)DOH_R2_APPRDR S120.675
Doha Control (North)OTDF_1_CTRACC N135.725
Doha Control (South)OTDF_2_CTRACC S132.975
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
Doha TMA (Terminal Area)A/C2500 ft to FL24513 000 ftFL 150
Doha CTR (Control Zone)DSFC to 2500 ft13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
ILS/DME (15)AMD108.50
ILS/DME (33)IBD109.50
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
15158° / 156°4570 x 46
33338° / 336°4570 x 46
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
15FULL LENGTH4570 m4570 m
A3821 m3821 m
B3058 m3058 m
B13058 m 3058 m
C12516 m2516 m
C2490 m2490 m
P2451 m2451 m
E11144 m1144 m
N1144 m1144 m
E2706 m706 m
M706 m706 m
33FULL LENGTH4570 m4570 m
F4126 m4126 m
L4126 m4126 m
K4024 m 4024 m
E23890 m3890 m
M3890 m3890 m
E13450 m3450 m
N3450 m3450 m
LOOP2482 m2482 m
C2145 m2145 m
P2145 m2145 m
B1542 m1542 m
B11542 m1542 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
153820 m
334570 m
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha/air/index.html b/aerodrome/doha/air/index.html new file mode 100644 index 00000000..8a4fa7b6 --- /dev/null +++ b/aerodrome/doha/air/index.html @@ -0,0 +1,8010 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Air Control ("Doha Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Air Control ("Doha Tower")

+

3.1 General provisions

+

Air Control (AIR) is responsible for all aerodrome movements on runways and their associated taxiways. AIR shall also ensure separation between IFR aircraft that are arriving at and departing the aerodrome, as well as provide traffic information to VFR aircraft operating within the aerodrome control zone.

+

3.2 Preferential runways

+

Due to the close interaction between arrival and departure procedures within the Doha CTR, the active runway at Doha shall be determined by the active runway direction at Doha-Hamad airport.

+

3.2.1 Independent parallel operations (IPO)

+

Due to the close proximity of OTHH runways, pilots should be aware that Independent Parallel Approaches are conducted at OTHH. As a result, arriving aircraft at either OTBD or OTHH may receive instructions such as break-out maneuvers or missed approach procedures if they are considered to be entering the Non-Transgression Zone (NTZ) established between the runways of both airports.

+

3.3 Departure procedures

+

3.3.1 Line up clearances

+

Conditional line up instructions shall include the traffic that the aircraft is to follow, as well as the word “behind” at the beginning and end of the transmission. It is recommended to only have a maximum of two conditional line up clearances active at one i.e., one aircraft lining up behind a departure, and another aircraft lining up behind them.

+
+

Example

+

Controller: "TCM4TM, behind the departing Qatar Executive Gulfstream 650, via G, line up and wait runway 33 behind."

+
+

If aircraft have not yet reached the holding point where they are expected to line up at, ATC shall reiterate the cleared holding point.

+
+

Example

+

Controller: "QQE550, via F, line up and wait runway 33."

+
+

3.3.2 Take-off clearances

+

Aircraft shall be cleared for take-off once adequate separation exists as provided in 4.3.4 and 4.6.

+
+

Example

+

Controller: "QQE440, wind 330 degrees 7 knots, runway 33, cleared for take-off."

+
+

3.3.3 Separation requirements

+

3.3.3.1 General

+

Aircraft shall be separated on departure in compliance with standard IFR departure separation minima or enhanced wake turbulence separation (eWTS) requirements.

+

Succeeding aircraft on the same SID shall be separated by a minimum of 2 minutes.

+

VFR aircraft may be instructed to maintain visual separation with preceding aircraft and given a take- off clearance if no wake turbulence separation minima exists.

+

3.3.3.2 Low visibility and IMC

+

During low visibility operations and during IMC, departing aircraft shall not be cleared for take-off when there is an arriving aircraft within 5 NM of the landing runway threshold.

+

3.3.4 IFR handoff procedure

+

3.3.4.1 General

+

IFR departures shall be handed off to Doha Approach (West). Where Doha Approach is offline, all handoffs shall be to Doha Approach (East). If Doha Approach is offline it shall be handed off to Doha Radar South.

+

Where no Approach/Radar controller is present, aircraft shall be handed off directly to the appropriate Doha Control controller.

+

Aircraft shall be handed off when passing 800 ft to ensure adequate time for a frequency change and avoid a level-off on departure.

+

3.3.5 Radar vectors departure

+

Aircraft on a radar vector departure shall be instructed to fly a specific heading on departure to increase separation or to clear the departure path for a following aircraft. This departure instruction shall be delivered to the aircraft before issuing the take-off clearance.

+

The headings to be issued shall be coordinated with approach control.

+
+

Example

+

Controller: "TCM1TM, after departure, turn left heading 315 degrees and maintain 2000ft, wind 290 degrees, 2 knots, runway 33, cleared for take-off."

+
+

3.3.6 Stopping a departure

+

Aircraft that have commenced their take-off roll may be instructed to stop immediately to avert a collision due to a runway incursion or any other dangerous situation.

+

It must be noted though, that the instruction to stop must be given early enough such that the aircraft does not reach its decision speed. Therefore, aerodrome controllers must be vigilant and remain aware of the location of traffic at all times.

+
+

Example

+

Controller: "QQE650, stop immediately, I say again stop immediately, truck entering the runway!"

+
+

For aircraft that have been given a take-off clearance, but have not yet started the roll, they shall be instructed to hold position and the take-off clearance must be cancelled along with the reason for cancellation.

+
+

Example

+

Controller: "TCM1TM, hold position, cancel take-off, I say again cancel take-off, aircraft entering the runway, acknowledge."

+
+

3.4 Arrival procedures

+

3.4.1 Separation requirements

+

3.4.1.1 General

+

While the radar controllers are responsible for separating arriving aircraft, the AIR controller shall still ensure that minimum separation is maintained until the preceding aircraft crosses the runway threshold.

+

3.4.1.2 Speed control

+

If it is apparent that minimum separation may not exist as provided in 3.4.1.1, AIR may use a tactical reduction in aircraft speed.

+
+

Example

+

Controller: "QQE650, reduce to final approach speed."

+
+

3.4.1.3 Visual separation

+

Aircraft may be instructed to maintain own separation visually, if speed control alone will not resolve the conflict. This shall only be done in VMC and with agreement with the pilot. If no other solutions are practical, the succeeding aircraft shall be instructed to go around.

+

3.4.2 Go-around instruction

+

3.4.2.1 General go-around procedure

+

At any time should a runway become unsuitable for an aircraft landing, or separation minima is not met, aircraft shall be instructed to go-around.

+
+

Example

+

Controller: "TCM1TM, go around, I say again, go around, acknowledge."

+
+

Once aircraft have acknowledged the instruction and are observed to be safely climbing away, they shall be handed off to departure control.

+
+

Example

+

Controller: "TCM1TM, climb to 4000ft via standard missed approach, contact Doha Approach 124.775."

+
+

3.4.3 Arrival taxi procedures

+

Aircraft shall be provided an initial taxi clearance to ensure they are kept moving such that the exit taxiway (RET) is clear for the next arrival and to minimise runway occupancy times.

+

The initial taxi shall include instructions to taxi “LEFT” or “RIGHT” onto the relevant taxiway as appropriate and hold short on a suitable taxiway.

+
+

Example

+

Controller: "QQE650, taxi right on D, hold short B."

+
+

Once aircraft have been observed to be taxiing and completely clear of the exit, transfer of control shall be initiated to GMC provided there will be no conflicts with other arriving traffic.

+

Aircraft may normally be expected to vacate on C or C1 in the 33 direction or E1 in the 15 direction.

+

If required for separation and to expedite traffic, aircraft may be instructed to vacate via the appropriate rapid exit taxiway on initial contact.

+

3.5 VFR procedures

+

VFR flight activity should be planned in accordance to published VFR charts, specifically the “OTBD: Helicopter Route” & “OTBD: VFR” charts for traffic navigating within the CTR.

+

All aircraft returning from general training flying areas shall request joining instructions prior to leaving these areas.

+

3.5.1 Helicopter aicraft: departing to and/or arriving at OTBD crossing OTHH

+ + + + + + + + + + + + + + + + + + + + + + + + +
RunwayNameDescription
15Orange Route 15Departure:
After departure RWY 15, turn left towards CRA and climb to cross CRA maintaining 1000 FT. Contact Hamad TWR West on Freq 118.025 MHz once East of OTBD RWY 15. From CRA, route to BCH and Hold, remaining clear of final approach path OTBD RWY 15 and OTHH RWY 16R whilst awaiting crossing clearance from OTHH ATC. When cleared, cross North of threshold OTHH RWY 16R/RWY 16L and route towards BAY. After BAY, route OH 16 maintaining 1000 FT. After OH 16, climb to 1500 FT and route to ESE.
Arrival:
Enter the CTR via ESE maintaining 500 FT. From ESE, route OH 16, BAY to hold, awaiting instructions from OTHH ATC. When cleared, cross north of threshold. Once West of OTHH RWY 16R, contact OTBD ATC Freq. 118.900 MHz and follow joining instructions.
33Orange Route 33Departure:
After departure RWY 33, turn right towards CRA and climb to cross CRA maintaining 1000 FT. Contact Hamad TWR West on Freq 118.025 MHz once East of OTBD RWY 33. From CRA, route to SRA and Hold, remaining clear of final approach path OTBD RWY 33 and OTHH RWY 34L whilst awaiting crossing clearance from OTHH ATC. When cleared, cross South of threshold OTHH RWY 34L/RWY 34R and route towards SEA. After SEA, route OH 34 maintaining 1000 FT. After OH 34, climb to 1500 FT and route ESE.
Arrival:
Enter the CTR via ESE maintaining 500 FT. From ESE, route OH 34, SEA to hold, awaiting instructions from OTHH ATC. When cleared, cross south of threshold. Contact OTBD ATC Freq. 118.900 MHz once west of OTHH RWY 34L and follow joining instructions.
+ +

3.5.1.1 Suspension of the orange route

+

The orange route will be suspended under the following conditions:

+
    +
  • When the cloud ceiling is below 2000ft and/or visibility is less than 3500 m;
  • +
  • During peak arrival periods and during independent parralel operations;
  • +
  • Doha-Hamad supervisor for any other valid reasons suspends the route with at least 15 minutes notice to Doha;
  • +
+

3.5.2 Helicopter aircraft: arriving and departing OTBD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayNameDescription
15 & 33Turtle Route (TTL)Departure:
After departure RWY 15/33, route direct RDS and climb to 1500 FT. After RDS, route EZD, NML, DFC, LSN and exit via TTL.
Arrival:
Enter the CTR via TTL maintaining 1000 FT. After TTL, route LSN, DFC, NML, EZD, RDS. After RDS, follow instructions from OTBD ATC.
15 & 33Boat Route (BOT)Departure:
After departure OTBD turn to THM climbing 1500 FT, route to ASP, HMM, SBQ to exit via BOT.
Arrival:
Enter the CTR via BOT, maintaining 1000 FT and route to SBQ, HMM, then climb 1500 FT and route to ASP, follow instructions from OTBD ATC.
15 & 33Dhow Route (DOW)Departure:
After departure RWY 15/33, route direct THM and climb to 1500 FT. After THM, route IZB, MIN, BHR, DOW.
Arrival:
Enter the CTR via DOW maintaining 1000 FT. After DOW, route BHR, MIN, IZB, THM. After THM, follow instructions from OTBD ATC.
15 & 33Morjan Route (MOR)Departure:
After departure RWY 15/33, route direct THM and climb to 1500 FT. After THM, join via IZB at 500 FT. After IZB, route SEF, INT, and exit via MOR.
Arrival:
Enter the CTR via MOR maintaining 500 FT. After MOR, route INT, SEF, and IZB to climb 1000 FT to THM. After THM, follow instructions from OTBD ATC.
+ +

3.5.3 Fixed wing aircraft: departing from OTBD to the North

+ + + + + + + + + + + + + + + + + + +
RunwayNameDescription
33Aspire 33 Visual DepartureClimb straight ahead to 700 FT, turn to the West and remain clear of prohibited area OTP45; route direct to ASP then direct to SOF; then direct to SML. Climb as instructed by ATC to 1500 FT.
15Aspire 15 Visual DepartureClimb straight ahead to 700 FT turn to the West before the upwind end of RWY 15; route direct to THM, direct to ASP, direct to SOF then direct to SML. Climb as instructed by ATC to 1500 FT.
+ +

3.5.4 Fixed wing aircraft: arriving to OTBD from the North

+ + + + + + + + + + + + + + + + + + +
RunwayNameDescription
33Aspire 33 Visual ArrivalFrom SML, route direct to SOF traffic must be 2000 FT at SOF. Then route direct to ASP and hold over ASP as required by ATC. From ASP, route direct to ZUL if requested. Hold at ZUL at 2000 FT. From ZUL, route direct to THM and descend as instructed by ATC. Hold overhead THM at 1500 FT. When instructed by ATC, route for final approach RWY 33.
15Aspire 15 Visual ArrivalFrom SML, route direct to SOF. Traffic must be 2000 FT by SOF, then route direct to ASP and hold over ASP as required by ATC. When cleared by ATC, proceed to VLG and descend to 1500 FT.
+ +

3.5.4.1 Arrival procedures

+
    +
  • Aircraft to contact Doha Tower at SML for clearance
  • +
  • If more than two aircraft are requesting to return to Doha from the General Flying Area, they will be required to hold at ZUL for runway 33 or VLG for runway 15. Succeeding aircraft will be advised to remain clear of the CTR and standby for joining instructions.
  • +
  • Only one aircraft may hold at a time overhead ZUL and VLG.
  • +
  • No holding overhead ASP.
  • +
  • Traffic arriving via ASP is independent of OTHH IFR traffic.
  • +
  • Aircraft proceeding for right base runway 15 from VLG will maintain 1500 ft until established on the final approach to avoid infringing the restricted area over Amiri Diwan.
  • +
  • After establishing on the approach, touchdown may be expected approximately abeam intersection taxiway Q, with roll-out and vacating at intersection taxiway B or B1.
  • +
+

3.5.5 Traffic remaining in the circuit

+

AIR control is responsible for managing circuit traffic. Circuits must always be conducted to the west of the aerodrome at 2,000 feet.

+

Once aircraft are ready for departure, they should be cleared for take-off in sequence. As they begin their crosswind turn (the first turn after departure) they shall be instructed to report when they are on the downwind with their intentions.

+
+

Example

+

Controller: "ADD, report downwind with intentions."

+
+

Aircraft may request either a touch and go (where the aircraft lands and immediately takes off), a stop and go (where the aircraft lands, comes to a complete stop on the runway, then takes off), a low approach (where the aircraft flies low over the runway without landing), or a full stop (where +the aircraft lands and vacates the runway).

+

Once AIR is aware of the aircraft’s request, they may be sequenced to the runway, with due consideration given to runway occupancy time.

+

Aircraft on the downwind should be passed the following information:

+
    +
  • Expected runway;
  • +
  • Sequence;
  • +
  • Traffic information, if applicable
  • +
+
+

Example

+

Controller: "ADD, report downwind with intentions."

+

Controller: "ADD, report final runway 33, number 1."

+

Controller: "ADD, runway 33, cleared to land/touch and go/low approach."

+
+

Aircraft conducting a stop-and go shall be required to “REPORT READY FOR DEPARTURE”.

+

3.5.6 VFR arrivals

+

Inbound VFR aircraft shall be instructed to contact AIR with enough time such that two-way radio communications has been established before aircraft enter the aerodrome control zone.

+

On first contact, AIR will pass circuit joining instructions, as well as any other pertinent information.

+
+

Example

+

Controller: "ADD, Doha Tower, join left hand downwind runway 33, 2000ft VFR, QNH 1013."

+
+

Aircraft may also be instructed to track towards a visual reporting point (VRP).

+
+

Example

+

Controller: "ADD, Doha Tower, track towards Aspire, 2000ft VFR. Report one mile from Aspire, QNH 1013."

+
+

VFR arrivals may be denied entry into the control zone during times of increased IFR arrival activity +and instructed to hold outside controller airspace awaiting further instructions.

+

3.6 Low visibility operations (LVO)

+

3.6.1 Commencement of LVO

+

Low visibility operations (LVO) are commenced at Doha when:

+
    +
  • The visibility is 1500 metres or less;
  • +
  • The cloud base is 1000 feet or less,
  • +
  • or whenever conditions are such that all of the manouvering area cannot be seen from the control tower
  • +
+

Runway crossings shall be kept to a minimum. Runway 33 is the sole runway at Doha approved for CAT II/III operations.

+

3.6.2 LVO departure procedures

+

During LVO, aircraft are required to depart from the full-length holding points. Intersection departures are not allowed under LVO conditions.

+

3.6.3 LVO arrival procedures

+

Arriving aircraft must report fully vacated.

+

3.7 Designated areas of responsibility

+

3.7.1 AIR positions

+

AIR is responsible for runway 15/33 and all associated taxiways.

+

3.7.2 Handoff procedure

+

Where transfer of control is to be made between aerodrome controllers, aircraft shall not be cleared to a point beyond the current controller’s designated zone of responsibility unless there has been +prior coordination with the next controller. Hold short instructions may be used to satisfy this requirement.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha/appendix_aor/index.html b/aerodrome/doha/appendix_aor/index.html new file mode 100644 index 00000000..7e92ca8e --- /dev/null +++ b/aerodrome/doha/appendix_aor/index.html @@ -0,0 +1,6966 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Uncoloured areas are the responsibility of the GMC controller.

+

7.2 All configurations

+
+

Areas of Responsibility

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha/appendix_taxi/index.html b/aerodrome/doha/appendix_taxi/index.html new file mode 100644 index 00000000..10d99c62 --- /dev/null +++ b/aerodrome/doha/appendix_taxi/index.html @@ -0,0 +1,7094 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used hold short taxiways are shown in white. Runway holding points are shown in red.

+

6.2 Runway 15 configuration

+

6.2.1 Departures

+
+

Runway 15 Departure Flow

+
+

6.2.2 Arrivals

+
+

Runway 15 Arrival Flow

+
+

6.3 Runway 33 configuration

+

6.3.1 Departures

+
+

Runway 33 Departure Flow

+
+

6.3.2 Arrivals

+
+

Runway 33 Departure Flow

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha/gmc/index.html b/aerodrome/doha/gmc/index.html new file mode 100644 index 00000000..5b8526e2 --- /dev/null +++ b/aerodrome/doha/gmc/index.html @@ -0,0 +1,8000 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("Doha Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

2. Ground Movement Planner ("Doha Ground")

+

2.1 General provisions

+

Ground Movement Control (GMC) is responsible for validating routes and shall provide IFR clearance to departing aircraft. The controller shall assign the correct departure procedure to the aircraft based on the first point that is filled on the flight plan.

+

Where the flight plan contains an invalid route, level, or departure procedure, GMC shall ensure that the error is corrected before the aircraft is given its clearance.

+

GMC is also responsible for managing aircraft movements on all aerodrome movement areas except for runways and their associated taxiways. Departing aircraft are given pushback instructions and instructions to taxi to the runway holding point. Arriving aircraft are assigned a stand and instructed to taxi as appropriate.

+

2.2 Departure clearance

+

2.2.1 General

+

GMC is responsible for issuing clearances for departing aircraft. Pilots may be expected to report the following information on first contact:

+
    +
  • Callsign;
  • +
  • Aircraft type;
  • +
  • Parking Stand;
  • +
  • Destination;
  • +
+

2.2.2 Information contained in a departure clearance

+

An IFR clearance shall be in the following format:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • Departure procedure;
  • +
  • Initially cleared altitude;
  • +
  • Assigned SSR code
  • +
+

GMC shall obtain a full readback of the clearance. If the pilot does not report the current ATIS letter on first contact, GMC shall pass the current ATIS letter and QNH.

+
+

Example

+

Pilot: "Doha Ground, good evening, QQE990, Gulfstream 650ER, stand A6, clearance to Miami, with information W on board."

+

Controller: "QQE990, information W correct, cleared to Nice via the PATOM3N departure, climb via the SID altitude 5000ft, squawk 2613."

+

Pilot: "Cleared to Nice, PATOM3N departure, climb via the SID altitude 5000ft, squawk 2613, QQE990."

+

Controller: "QQE990, readback correct, QNH 1004, report ready for pushback."

+
+ +

Aircraft clearance may also be delivered by DCL. This type of clearance reduces controller workload and frequency congestion. For suitably equipped aircraft, this will be through the ACARS system on board the aircraft.

+
+

Info

+

Controllers shall ensure that DCL is available to be used at all times.

+
+

2.2.4 Aircraft requiring a reroute

+

Aircraft requiring a reroute shall not be given a DCL. Instead, a voice clearance must be used. This shall be communicated by ACARS datalink message or on frequency.

+

2.2.5 Voice clearance

+

Aircraft requesting clearance via voice shall be given a voice clearance as per the format in 2.2.2.

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+

Doha primarily uses RNAV standard instrument departures (SIDs) and is the preferred departure type for IFR aircraft. Departing aircraft shall be assigned an appropriate RNAV departure according to the first fix in the flight plan and runways in use.

+

Doha RNAV Standard Instrument Departures (SIDs) operate independently from those at Hamad. Both airports conduct simultaneous departures.

+

SIDs which have an identifier ending in S are valid for runway 15. SIDs which have an identifier ending in N are valid for runway 33. All departures from runway 15 have an initial climb of 6,000 feet. In contrast, most departures from runway 33 have an initial climb of 5,000 feet, except for the DATRI1N and ULIKA1N procedures, which are set at 6,000 feet.

+

All IFR departures shall be instructed to contact Doha Approach (West) once airborne.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix1533
ALSEM3S3N
ALVEN3S3N
DATRI1S1N
KUPRO1S1N
LUBET2S2N
PATOM3S3N
TULUB2S2N
ULIKA1S1N
VAXIN3S3N
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Radar vectors departure

+

The radar departure procedure shall be used when aircraft are unable to accept an RNAV departure, such as one with outdated nav data. Whereas RNAV departures follow a prescribed track until leaving the Doha Approach airspace, radar departures are given radar vectors to the first fix.

+

A radar departure clearance shall contain the following information:

+
    +
  • Callsign;
  • +
  • Destination;
  • +
  • Departure instructions;
  • +
  • Initial climb;
  • +
  • Assigned SSR code
  • +
+

Aircraft on a radar vectors departure shall have the text RDV inserted to the scratchpad section of their entry on the departure list and have an initial climb set to 2,000 feet.

+

All radar vectors departures shall be instructed to contact Doha Approach (West) once airborne.

+
+

Example

+

Pilot: "Doha Ground, good evening, TCM1TM, Airbus A320, stand A15, clearance to Jeddah, unable RNAV, with information Z on board."

+

Controller: "TCM1TM, information Z correct, cleared to Jeddah, fly runway heading, expect radar vectors after departure, maintain altitude 2000ft, squawk 2610."

+

Pilot: "Cleared to Jeddah, fly runway heading, expect radar vectors after departure, maintain altitude 2000ft, squawk 2610, TCM1TM."

+

Controller: "TCM1TM, readback correct, QNH 1014, report ready for pushback."

+
+

2.4 Rerouting aircraft

+

An aircraft shall be issued a reroute by GMC if the pilot’s route doesn’t comply with the standard routes laid out in Table 2-2.

+

Several routing restrictions exist within Qatari airspace and are detailed in the Qatari Route Manual which must be complied with when issuing a departure clearance.

+

If an aircraft requires a reroute, they shall be informed of such as soon as they have connected to the network by private message or on frequency. The use of “.rte" and “.rtef" aliases are encouraged.

+

The Arabian vACC Operations Department maintains an up-to-date route database on SimBrief. These routes can be accessed by selecting the "User Submitted Routes" option, highlighted in purple, when planning a flight.

+
+

Example

+

Controller: "QQE650, cleared to Dubai, runway 15 via ALSEM3S, ALSEM - L305 - ITBUL, flight planned route. Climb via the SID altitude 6000ft, squawk 2612."

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DestinationLevel RestrictionRouting
Northern Emirates (OMDB, OMDW, OMFJ, OMFJ, OMRK, OMDM)FL210ALSEM L305 ASTOG
Transiting Tehran FIR (FL200- @ ALKAN)FL230VAXIN T800 DASUT
Transiting Tehran FIR (FL190 @RAGAS)FL190ALVEN T430 RAGAS
Southern Emirates (OMAA, OMAD, OMAM, OMAL)FL270KUPRO
Bahrain (OBBI, OBBS, OBKH)12,000ftTULUB B457 / M444 / T444 KINID
Transiting Bahrain FIR onwards landing Kuwait FIRFL430TULUB M444 KINID
Transiting Jeddah FIR onwards landing Kuwait FIRFL280TULUB B457 KINID
Transiting Kuwait FIRFL430LUBET T934 IMLAD
FL320LUBET L934 IMLAD
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

Aircraft routes out of the aerodrome must comply with all routing and level restrictions as described in section 3.1 of Arabian MATS P1, Arabian Route Manual and Table 2-2. This is based on direction and type of flight.

+

Should an aircraft file an invalid cruise level, GMC shall advise the aircraft of this when delivering the clearance. In all cases, the next lowest valid cruise level shall be assigned, and the aircraft advised.

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

When A-CDM procedures are active, pilots must report their confirmed TOBT on vacdm.vatsim.me, which is then displayed in the controller's client on the departure list. A fully green time indicates a confirmed TOBT. If a pilot has not confirmed their TOBT, the controller should request it on frequency and update the departure list accordingly.

+

The TOBT system allows aircraft to push back, taxi to the runway holding point, and depart on schedule without extended delays in the departure queue. If an aircraft reports ready for pushback before its assigned TOBT, it will be instructed to hold position and will be given its place in the pushback sequence, unless aerodrome conditions permit and a slot is available. If an aircraft is cleared for push and start but does not begin pushing within 2-5 minutes, the pushback clearance is canceled, and a new TOBT is assigned.

+
+

Example

+

Controller: "QQE101, hold position. Number 2 for startup, expect pushback at time 45."

+
+

2.7 Runway change procedure

+

Runway changes must be coordinated between Doha AIR, Hamad AIR, and Doha APP due to the interdependencies outlined in section 3.2. AIR must give GMC sufficient notice before altering the runway configuration.

+

Coordination between AIR, GMC, and approach/departure is required for the final departure using the previous configuration.

+

Aircraft already cleared for departure under the old configuration must be re-cleared if they have not yet requested pushback.

+

2.8 VFR aircraft

+

VFR traffic clearances are managed by AIR at the holding point. When an aircraft first contacts the ground frequency, it must provide the following information:

+
    +
  • Callsign;
  • +
  • Aircraft type;
  • +
  • Current position;
  • +
  • Person(s) on board;
  • +
  • Current ATIS;
  • +
  • Intentions;
  • +
+

After the initial call with all required information, GMC will taxi the aircraft to the active runway and relay the details to AIR for coordination.

+
+

Example

+

Pilot: "Doha Ground, A7DDD, Diamond DA40, at the civil aviation college apron, 2 POB, with information C, for local flight to the west, request taxi."

+

Controller: "A7DDD, Doha Ground, information C is correct, taxi via Q and hold short runway 15."

+

Pilot: "taxi via Q and hold short runway 15, A7DDD."

+

Controller: "ADD, contact Doha Tower on 118.900."

+

Pilot: "Doha Tower on 118.900, ADD."

+
+

2.9 Departure pushback procedures

+

2.9.1 General pushback procedures

+

Assuming no obstructions, aircraft shall be instructed to push back immediately.

+

Aircraft requesting pushback without squawking their assigned transponder code or having their transponder turned on will be instructed to hold position and set the correct code. They must not be cleared to move until this is done.

+

Pushback direction is based primarily on aircraft location and runway configuration.

+
+

Example

+

Pilot: "Doha Ground, QQE101, at stand A8 request push and start."

+

Controller: "QQE101, stand A8, push and start approved face south."

+

Pilot: "Push and start approved face south, QQE101."

+
+

Conditional pushback instructions may also be issued if an aircraft is taxiing behind another waiting for pushback.

+
+

Example

+

Pilot: "Doha Ground, TCM4TM, on stand A3 request pushback."

+

Controller: "TCM4TM, behind the Qatar Executive Gulfstream 650 passing right to left, push and start approved, face south."

+

Pilot: "After the Qatar Executive Gulfstream 650 passes from right to left, push and start approved, face south, TCM4TM."

+
+

2.9.2 Pushback restrictions

+

Simultaneous pushback operations are not permitted into the same alleyway for stands G1 to G4 and W6 to W7.

+

For all other stands, aircraft shall be separated by at least two aircraft stands before they are given simultaneous pushback.

+

2.10 Departure taxi procedures

+

2.10.1 General departure taxi procedures

+

Where aircraft are taxied to runway holding points, transfer of control to AIR shall be made early enough such that the aircraft is not required to stop its taxi.

+

To deconflict traffic, and to reduce the length of taxi clearances, hold short instructions shall be used wherever possible.

+
+

Example

+

Pilot: "Doha Ground, TCM4TM, request taxi."

+

Controller: "TCM4TM, taxi via D, hold short of B."

+

Pilot: "Taxi via D, hold short of B, TCM4TM."

+
+

2.10.2 Runway 33 departure taxi procedures

+

When departing from runway 33, aircraft taxiing from the west side of the aerodrome will be instructed to taxi via taxiway D to holding points F or G.

+

Aircraft on the east side will be directed to taxi to holding point B1 for crossing, then proceed via taxiway D to holding points F or G.

+

Extreme caution must be exercised between taxiways D and C, as this area is a rapid exit taxiway for vacating aircraft. The same caution applies between taxiways C1 and D1.

+

2.10.3 Runway 15 departure taxi procedures

+

When departing from runway 15, aircraft taxiing from the west side of the aerodrome will be directed to taxi via taxiway D to holding point A.

+

Aircraft on the east side will be instructed to taxi to holding point B1 for crossing, then continue via taxiway D to holding point A.

+

If an aircraft requires a full-length departure and backtracking, it can request this after being handed over to the tower.

+

2.11 Arrival taxi procedures

+

2.11.1 General arrival taxi procedures

+

GMC shall assign an arrival stand to the aircraft when they are on final approach.

+

Once the aircraft is handed off to GMC, they shall be taxied to their stand in accordance with the procedures laid down in 2.11.4.

+

(See 4.2)

+

2.11.2 Runway 33 arrival taxi procedures

+

Aircraft shall vacate on the respective rapid exit taxiways such as C or C1 and are then handed off to GMC.

+

Aircraft shall be taxied via D or D1 to the appropriate stand.

+

2.11.3 Runway 15 arrival taxi procedures

+

Aircraft shall vacate via E1 or utilize the turning loop available to then vacate via C1 or C when able. Once they have vacated the runway they are then handed off to GMC.

+

Aircraft shall be taxied via D or D1 to the appropriate stand.

+

2.11.4 Stand allocation procedures

+

Aircraft shall be assigned stands automatically using Ground Radar Plugin Stand Assigner. If this is not possible, aircraft shall manually be assigned a stand in accordance with the following procedure:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Stand(s)Operator
A1 to A6VIP(s)
A9 to A18Low-cost, QTR
G1 to G4General Aviation, Corporate Aviation
W6 to W7General Aviation, Corporate Aviation
C1 to C9QTR, QQE
E1 to E24QTR
E32 to E37QTR
E25 to E27QQE
E29 to E31Maintenance
+
+
Table 3-1: Stand allocation procedure
+
+

2.11.5 Stand restrictions

+

Stands A1 to A18 can accommodate aircraft up to code E. Stands with an "N" or "S" designator have specific handling limitations and are restricted to aircraft up to code C.

+

Stands G1 to G4, as well as W6 and W7, are limited to code A.

+

Stands E1 to E37 support aircraft up to code E, while those with an "L" or "R" designator have handling restrictions up to code C.

+

Stands C1 to C9 are suitable for aircraft up to code C.

+

2.12 Low visibility operations (LVO)

+

2.12.1 LVO taxi routes

+

When Low Visibility Operations (LVO) are in effect, all taxiways are approved for LVO, with no restrictions.

+

Runway 33 is the only CAT II/III approved runway and must be used during LVO conditions (4.6.2).

+

2.13 Designated areas of responsibility

+

2.13.1 GMC positions

+

GMC is responsible for all aprons and associated taxiways.

+

(See 6.1)

+

2.13.2 Handoff procedure

+

Where transfer of control is to be made between controllers, aircraft shall not be cleared to a point beyond the current controller’s designated zone of responsibility unless there has been prior coordination with the next controller. Hold short instructions may be used to satisfy this requirement.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/doha/img/15arr.png b/aerodrome/doha/img/15arr.png new file mode 100644 index 00000000..078929d2 Binary files /dev/null and b/aerodrome/doha/img/15arr.png differ diff --git a/aerodrome/doha/img/15dep.png b/aerodrome/doha/img/15dep.png new file mode 100644 index 00000000..e4f8d68b Binary files /dev/null and b/aerodrome/doha/img/15dep.png differ diff --git a/aerodrome/doha/img/33arr.png b/aerodrome/doha/img/33arr.png new file mode 100644 index 00000000..6e23567a Binary files /dev/null and b/aerodrome/doha/img/33arr.png differ diff --git a/aerodrome/doha/img/33dep.png b/aerodrome/doha/img/33dep.png new file mode 100644 index 00000000..faf53e40 Binary files /dev/null and b/aerodrome/doha/img/33dep.png differ diff --git a/aerodrome/doha/img/aor.png b/aerodrome/doha/img/aor.png new file mode 100644 index 00000000..32a4c2d2 Binary files /dev/null and b/aerodrome/doha/img/aor.png differ diff --git a/aerodrome/doha/info/index.html b/aerodrome/doha/info/index.html new file mode 100644 index 00000000..9f267149 --- /dev/null +++ b/aerodrome/doha/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date18 DEC 2024
Prepared byChriss Klosowski - ACCARB2
Approved byChris Marriott - ACCARB1
Next review date18 DEC 2025
Cancelled documentsNIL
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2025Initial issue18 DEC 2024
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/dubai/aerodrome/index.html b/aerodrome/dubai/aerodrome/index.html new file mode 100644 index 00000000..196b7706 --- /dev/null +++ b/aerodrome/dubai/aerodrome/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO CodeOMDB
Aerodrome Reference Point (ARP)N 25 15.2 E 055 21.9
Elevation62 ft
Magnetic Variation / Annual Change2° E (2017) / +0.05°
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
Dubai ATIS (Departure)OMDB_D_ATISATIS131.700
Dubai ATIS (Arrival)OMDB_A_ATISATIS126.275
Dubai DeliveryOMDB_DELGMP120.350
Dubai Ground (South)OMDB_1_GNDGMC 1118.350
Dubai Ground (North)OMDB_2_GNDGMC 2121.650
Dubai Tower (North)OMDB_1_TWRAIR 1 (North)118.750
Dubai Tower (South)OMDB_2_TWRAIR 2 (South)119.550
Dubai Departures (South)OMDB_1_DEPDEP 1 (North)121.025
Dubai Departures (North)OMDB_2_DEPDEP 2 (South)124.675
Dubai ArrivalsOMDB_APPAPP124.900
Dubai DirectorOMDB_F_APPFIN127.900
Dubai Tower (Information)OMDB_I_TWRFIS126.775
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
Dubai CTA (Terminal Area)C1500 ft to FL15513 000 ftFL 150
Dubai CTR (Control Zone)DSFC to 1500 ft13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
ILS/DME (12R)IDBE109.50
ILS/DME (12L)IDBL110.10
ILS/DME (30R)IDBR110.90
ILS/DME (30L)IDBW111.30
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
12R121° / 119°4447 x 60
12L121° / 119°4351 x 60
30R301° / 299°4351 x 60
30L301° / 299°4447 x 60
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
K33708 m3897 m
K4/M7B3611 m 3800 m
K53513 m3702 m
12LFULL LENGTH4300 m4426 m
M1A/N1A3950 m4076 m
M1B/N1B3850 m3976 m
M1C/N1C3576 m3702 m
30RFULL LENGTH4300 m4000 m
M15/N114175 m4301 m
M14A/N104049 m4175 m
M13A/N93954 m4080 m
M13/N8A3855 m 3981 m
30LFULL LENGTH4447 m4682 m
K16/M194350 m4585 m
K15A/M18A4252 m4487 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
30L4315 m
30R4000 m
12L3600 m
12R3600 m
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/dubai/appendix_hotspots/index.html b/aerodrome/dubai/appendix_hotspots/index.html new file mode 100644 index 00000000..889aaa5f --- /dev/null +++ b/aerodrome/dubai/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/dubai/appendix_taxi/index.html b/aerodrome/dubai/appendix_taxi/index.html new file mode 100644 index 00000000..5664f770 --- /dev/null +++ b/aerodrome/dubai/appendix_taxi/index.html @@ -0,0 +1,7159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+
+

Taxi routings - 30 dual config

+
+
+
Figure4-1: Taxi routings - 30 dual config (Click to expand)
+
+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Arrival Bias)

+
+

Taxi routings - 12 dual config (arrival bias)

+
+
+
Figure4-1: Taxi routings - 12 dual arrival bias config (Click to expand)
+
+

6.3.2 Dual Runway 12L/12R (Departure Bias)

+
+

Taxi routings - 12 dual config (departure bias)

+
+
+
Figure4-1: Taxi routings - 12 dual departure bias config (Click to expand)
+
+

6.3.3 Single Runway 12L

+

6.3.4 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/dubai/info/index.html b/aerodrome/dubai/info/index.html new file mode 100644 index 00000000..75126e2d --- /dev/null +++ b/aerodrome/dubai/info/index.html @@ -0,0 +1,7082 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - ACCARB31
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
02/2019Updated relief callsigns01 NOV 2019
03/2019Updated RRSM guidelines,
Updated split procedures
15 NOV 2019
01/2020New format,
Added airspace limits and runway distances,
Revised guidance on delay mitigation,
Added detailed taxi routes and pushback guidance,
New VFR procedures,
Added detailed guidance on AIR departure/arrival procedures,
Added detailed RRSM procedures,
Updated D-APO procedures,
Updated LVO procedures and split into separate section,
Expanded guidance on aerodrome areas of responsibility,
Updated taxi diagrams,
Added area of responsibility diagrams
06 MAY 2020
02/2020Updated clearance format,
Updated RNAV SIDs,
Corrected omnidirectional departure heading fan,
Expanded on VFR AIR procedures,
Added more VFR phraseology examples,
Added phraseology examples for RRSM
21 MAY 2020
03/2020Copyright note,
Corrected phraseology examples,
Corrected A380 parking code,
Amended pushback and taxi procedures for clarity
18 JUN 2020
04/2020Updated ATS callsigns and frequencies,
Removed relief callsigns,
Updated routing procedures,
Updated pushback procedures,
Added parking restrictions,
Updated VFR procedures,
Updated datalink clearance setup procedure
13 AUG 2020
05/2020Revised format08 OCT 2020
06/2020Added detailed IFR departure procedures for AIR,
Added IFR departure handoff procedures,
Added Muscat flow control procedures,
Updated omnidirectional departure procedure,
Updated pushback procedures to include pushback types,
Added stand allocation table
05 NOV 2020
01/2021New layout,
Updated AIR departure and arrival separation procedures,
Updated omnidirectional departure procedure,
Removed SID groups
28 JAN 2021
02/2021Updated departure clearance procedures,
Updated pushback and taxi procedures,
Updated taxi phraseology,
Added LVO separation requirements,
Added detailed go-around procedure,
Updated 30R taxi-out diagram
25 FEB 2021
03/2021Updated phraseology examples,
Revised AIR departure procedures,
Revised AIR go-around procedure,
Updated D-APO separation minima
15 JUL 2021
04/2021Updated logon callsigns,
Revised go-around procedure,
Added single-runway pushback and taxi procedures,
Revised taxi and AoR diagrams for improved clarity,
Added aerodrome incursion hotspots and associated diagrams
07 OCT 2021
05/2021Updated document format,
Updated pushback phraseology,
Revised 30s configuration taxi routings
30 DEC 2021
01/2024Updated AIR handoff phraseology,
Updated ATS frequencies,
Updated GMC stand allocation procedures,
Updated appendix diagrams,
Updated GMC standard taxi routings,
Updated AIR standard departure points,
Updated SRO RRSM criteria,
Added GMC "bias" taxi routings,
Revised GMP flight-plan amendment procedures,
Revised GMP VFR flight procedures,
Added document & external references,
Removed RouteChecker,
Removed D-APO
22 NOV 2024
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/aerodrome/index.html b/aerodrome/fujairah/aerodrome/index.html new file mode 100644 index 00000000..b09734eb --- /dev/null +++ b/aerodrome/fujairah/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/air/index.html b/aerodrome/fujairah/air/index.html new file mode 100644 index 00000000..4054802d --- /dev/null +++ b/aerodrome/fujairah/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/appendix_aor/index.html b/aerodrome/fujairah/appendix_aor/index.html new file mode 100644 index 00000000..009e2e70 --- /dev/null +++ b/aerodrome/fujairah/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/appendix_hotspots/index.html b/aerodrome/fujairah/appendix_hotspots/index.html new file mode 100644 index 00000000..c587eb3f --- /dev/null +++ b/aerodrome/fujairah/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/appendix_taxi/index.html b/aerodrome/fujairah/appendix_taxi/index.html new file mode 100644 index 00000000..6e27e63e --- /dev/null +++ b/aerodrome/fujairah/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/gmc/index.html b/aerodrome/fujairah/gmc/index.html new file mode 100644 index 00000000..01eb5baa --- /dev/null +++ b/aerodrome/fujairah/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/gmp/index.html b/aerodrome/fujairah/gmp/index.html new file mode 100644 index 00000000..d56e7a81 --- /dev/null +++ b/aerodrome/fujairah/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/hotspots/index.html b/aerodrome/fujairah/hotspots/index.html new file mode 100644 index 00000000..4cc87be6 --- /dev/null +++ b/aerodrome/fujairah/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/fujairah/info/index.html b/aerodrome/fujairah/info/index.html new file mode 100644 index 00000000..04d39ade --- /dev/null +++ b/aerodrome/fujairah/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/img/hero_banner.png b/aerodrome/img/hero_banner.png new file mode 100644 index 00000000..2493a670 Binary files /dev/null and b/aerodrome/img/hero_banner.png differ diff --git a/aerodrome/index.html b/aerodrome/index.html new file mode 100644 index 00000000..359c34f8 --- /dev/null +++ b/aerodrome/index.html @@ -0,0 +1,6985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Aerodrome - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Overview

+ +
+

Aerodrome

+
+

Scope

+

The following documentation outlines the general operating procedures for our airports at an aerodrome level. Some documents serve as supplements to the Arabian MATS Part 1 – Operating Procedures, Arabian MATS Part 2 – Operating Techniques, Arabian MATS Wake Turbulence Separation, and the relevant aerodrome charts. These SOP(s) should be used in conjunction with the aforementioned sources. In case of any discrepancies between the aerodrome-specific procedures in this SOP and the Arabian MATS, the procedures in these SOP(s) shall take precedence. The referenced documentation is available in the Foundations section of this site.

+

Limitation of Liability

+
+

Warning

+

All documentation in this section is intended solely for use on the VATSIM network and must not be used for real-world aviation operations. The authors disclaim any liability for personal injury or death resulting from misuse of this material.

+
+

Acknowledgements

+
+

Info

+

This document includes excerpts and images from, and is primarily based on, ICAO Doc 4444 – PANS-ATM, along with the respective Civil Aviation Authority regulations and eAIP of each country.

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/aerodrome/index.html b/aerodrome/muscat/aerodrome/index.html new file mode 100644 index 00000000..c44bf231 --- /dev/null +++ b/aerodrome/muscat/aerodrome/index.html @@ -0,0 +1,7402 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)N23 36.0 E 058 17.0
Elevation49 FT
Magnetic Variation / Annual Change2°E (2025) / +0.05
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
Muscat RadarOOMS_APPRDR121.200
Muscat Tower NorthOOMS_1_TWRAIR 1118.825
Muscat Tower SouthOOMS_2_TWRAIR 2118.400
Muscat Ground NorthOOMS_1_GNDGMC 1127.875
Muscat Ground SouthOOMS_2_GNDGMC 2121.800
Muscat DeliveryOOMS_DELCLD125.575
Muscat InformationOOMS_ATISATIS126.800
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
Muscat TMA (Terminal Area)CMRVA to FL15013 000 ftFL 150
Muscat CTR (Control Zone)CSFC to 5500ft13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
VOR/DMEMCT (Muscat)114.500
ILS/DME 08LIML108.900
ILS/DME 26RIMR110.700
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
08L085°/083°4000 x 60
08R085°/083°4080 X 45
26R265°/264°4000 x 60
26L265°/264°4080 X 45
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTakeoff Run Available (TORA)Accelerate Stop Distance Available (ASDA)
08LFULL LENGTH4000 m4000 m
Y33312 m3312 M
08RFULL LENGTH4080 m4080 m
D23140 m3140 m
D32568 m2568 m
E23690 m3690 m
26LFULL LENGTH4080 m4080 m
D52455 m2455 m
D63069 m3069 m
D73585 m3585 m
E73585 m3585 m
E83985 m3985 m
26RFULL LENGTH4000 m4000 m
Y63312 m3312 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
08L4000m
08R3600m
26L4080m
26R3840m
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/air/index.html b/aerodrome/muscat/air/index.html new file mode 100644 index 00000000..be165a7e --- /dev/null +++ b/aerodrome/muscat/air/index.html @@ -0,0 +1,7567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("Muscat Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

4. Air Control ("Muscat Tower")

+

4.1 General provisions

+

Tower control (TWR/AIR) is responsible for all aerodrome movements on runways and their associated +taxiways. TWR shall also ensure separation in the control zone between IFR and IFR traffic as well as IFR and VFR traffic is maintained. Traffic information shall also be provided so pilots of VFR traffic can maintain visual separation between themselves.

+

4.2 Preferential runways

+

The preferred calm wind configuration is departing and arriving runway 26R, which shall be used up +to a 5-knot tailwind. Otherwise, runway 08L will be used. Tower shall pick the configuration that is +used in real life (by checking flight radar) whenever possible.

+
+

Warning

+

At the time of writing, the southern runway (08R/26L) is currently closed, as per updated NOTAMs. This is due to the restructing of Muscat aerodrome. This runway shall not be used, except for crossing taxiing aircraft between taxiways E1 and D1.

+
+

4.3 Departure procedures

+

Runway 08L/26R features three departure points per configuration. The standard departure points are full length on each runway. There should not be a performance difference between Y1 and Y2, and Y7 and Y8 respectively so they can be assigned to optimize the departure rate. Y3 and Y6 are intersection departure points that shall only be assigned after confirmation by the pilot that aircraft performance is sufficient.

+

4.3.2 Line up clearances

+

Conditional line up instructions shall include the traffic that the aircraft is to follow, as well as the word “behind” at the beginning and end of the transmission. It is recommended to only have a maximum of two conditional line up clearances active at once.

+
+

Example

+

Controller: "SWR243, behind the departing Oman Air A330, runway 26R line upand wait behind."

+
+

If aircraft have not yet reached the holding point where they are expected to line up at, ATC shall reiterate the cleared holding point.

+
+

Example

+

Controller: "OMA298 via Y7, line up and wait runway 26R"

+
+

4.3.3 Take-off clearances

+

Aircraft shall be cleared for take-off once adequate separation exists, as provided in 4.3.4.

+
+

Example

+

Controller: "OMA8KC, wind 280 degrees 4 knots, runway 26R cleared for take-off."

+
+

4.3.4 Separation requirements

+

4.3.4.1 General

+

Aircraft shall be separated on departure in compliance with standard IFR departure separation minima.

+

Succeeding aircraft with the same Muscat FIR exit point shall be separated by a minimum of two minutes, except as provided in 4.3.4.2.

+

A VFR aircraft following a VFR departure may be instructed to maintain visual separation with preceding aircraft and given take-off clearance if no wake turbulence separation minima exists.

+

4.3.4.2 Muscat FIR flow control procedure

+

Two Muscat departures with the same Muscat FIR/Mumbai FIR boundary exit point and the same cruising level must adhere to a minimum departure interval of three minutes. During events, the appointed flow manager may adjust these as necessary.

+

4.3.4.3 Low visibility and IMC

+

During low visibility operations and during IMC in general, departing aircraft shall not be cleared for take-off when there is an arriving aircraft within 4 nm of the landing runway threshold.

+

4.3.5 IFR handoff procedure

+

Departing IFR aircraft shall be handed off to the Muscat TMA controller or –if not online- Muscat Control. Aircraft shall be handed off when passing 800ft to ensure adequate time for a frequency change and avoid a level off on departure.

+

4.3.6 Stopping a departure

+

Aircraft that have commenced their take-off roll may be instructed to stop immediately to avert a collision due to a runway incursion or any other dangerous situation.

+

It must be noted though, that the instruction to stop must be given early enough such that the aircraft does not reach its decision speed. The stopping distance of an aircraft is also significant. Therefore, aerodrome controllers must be vigilant and remain aware of the location of traffic at all times as well as runway incursion hotspots.

+
+

Example

+

Controller: "FDB687, Stop immediately, I say again stop immediately, runway incursion."

+
+

For aircraft that have been given a take-off clearance, but have not yet started the roll, they shall be instructed to hold position and the take-off clearance must be cancelled along with the reason.

+
+

Example

+

Controller: "FDB687, hold position, cancel takeoff clearance, I say again cancel takeoff clearance, aircraft entering the runway."

+
+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+

During periods of increased arrival or departure activity, aircraft shall be instructed to vacate at the rapid exit taxiway for the runway in use. These are Y4 and Y5 respectively.

+

4.4.2 Separation requirements

+

4.4.2.1 General

+

While the radar controllers are responsible for separating and sequencing arriving aircraft, the TWR controller shall still ensure that minimum separation (>3nm) is maintained until the preceding aircraft crosses the runway threshold.

+

4.4.2.2 Speed control

+

If it is apparent that minimum separation may not exist, TWR may use a tactical reduction in aircraft speed.

+
+

Example

+

Controller: "OMA1784, reduce to final approach speed."

+
+

4.4.2.3 Visual separation

+

Aircraft may be instructed to maintain own separation visually, if speed control alone will not resolve the conflict. This shall only be done in VMD and in agreement with the pilot. If no other solutions are practical, the succeeding aircraft shall be instructed to go around.

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

Should a runway at any time become unsuitable for an aircraft landing, or separation minima is not met, aircraft shall be instructed to go-around.

+
+

Example

+

Controller: "UAE797, go around, I say again, go around. Acknowledge."

+
+

At Muscat, instructions in case of a go-around are usually assigned by Muscat Approach. However, Muscat Tower may reiterate these if necessary and if these change, after coordination with Muscat Radar. Once aircraft have acknowledged the instruction and are observed to be safely climbing away, they shall be transferred to Muscat TMA.

+
+

Example

+

Controller: "UAE797, (fly runway heading, climb to altitude 3,000ft,) contact Muscat Radar 121.200."

+
+

4.4.4 Arrival taxi procedures

+

In accordance with taxi procedures laid down in 3.4, aircraft shall be provided an intial taxi clearance to ensure they are kept moving, such that the relevant rapid exit taxiway (RET) is kept clear for the next arrival.

+

The intiial taxi instruction shall include instructions to taxi "LEFT" or "RIGHT" onto the relevant taxiway, as appropriate, and a hold short instruction at a suitable intermediate holding point.

+
+

Example

+

Controller: "OMA8KC, taxi right on W, hold short of V"

+
+

Once aircraft have been observed to be taxiing and completely clear of the RET, transfer of control shall be initiated to GMC, provided there will be no conflicts with other traffic.

+

4.5 VFR procedures

+

The Muscat control zone is unique because it is class C and not class D like many other CTRs. This means that TWR is responsible for separating VFR and IFR traffic by at least 3nm or greater if wake turbulence separation is required. VFR traffic does not have to be separated from other VFR traffic but traffic information should be provided wherever possible.

+

4.5.1 VFR departures

+

Once VFR aircraft are ready for departure, they shall be cleared for take-off in sequence. As they begin their crosswind turn, they shall be instructed to report leaving the control zone or to report any other Visual Reporting Point on their route as deemed appropriate.

+

If aircraft are exiting into uncontrolled airspace, they shall be instructed to remain outside controlled airspace and monitor Unicom. If they are entering Muscat TMA airspace, they shall be handed off to the Muscat TMA controller approximately one minute before leaving the control zone.

+

4.5.2 VFR traffic remaining in the circuit

+

TWR control is responsible for managing circuit traffic. Circuits will always be conducted to the north of the airfield. Once aircraft are ready for departure they shall be cleared for take-off in sequence. As they begin their crosswind turn, they shall be instructed to report when they are on downwind with their intentions

+
+

Example

+

Controller: "A-TT, report downwind with intentions"

+
+

Aircraft may request a touch and go, a stop and go, a low approach or a full stop landing. Once TWR is aware of the aircraft’s request, they may be sequenced to the runway, with due consideration given to runway occupancy time.

+

Aircraft on downwind shall be passed the following information: +• Sequence +• Traffic information if applicable

+
+

Example

+

Controller: "A-TT, number 1, report final runway 26R."

+

Controller: "A-TT, runway 30R, cleared to land/touch and go/low approach."

+
+

4.5.3 VFR arrivals

+

Inbound VFR aircraft shall be instructed to contact TWR with enough time such that two-way radio communication has been established before aircraft enter the control zone. On first contact TWR will pass instructions on how to enter the CTR, the runway in use and the QNH.

+
+

Example

+

Controller: “A4O-TT, Muscat Tower, Enter control zone via Cement Plant East, Runway 26R, 2,000 feet VFR, QNH 1017”

+
+

Once the traffic is closer to the aerodrome, they shall be given circuit joining instructions. VFR arrivals from the south can either be given a direct base for the respective runway or if there is a delay expected they should make a midfield crossing to join the normal circuit in the north of the aerodrome.

+
+

Example

+

Controller: "A-TT, join base runway 26R" or

+

Controller: "A-TT, cross midfield, join right-hand downwind runway 26R"

+
+

VFR arrivals may be denied entry into the control zone during times of increased IFR arrival activity and instructed to hold outside controller airspace awaiting further instructions. VFR aircraft may also be told to orbit at any VRP inside the CTR.

+

4.6 Secondary Muscat Tower position

+

Muscat AIP has defined a secondary (south) tower position, for the southern runway (08R/26L). At this time, the runway remains closed as per updated NOTAMs. This section of the SOP will be updated when this changes.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/appendix_aor/index.html b/aerodrome/muscat/appendix_aor/index.html new file mode 100644 index 00000000..8c44cfba --- /dev/null +++ b/aerodrome/muscat/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/appendix_hotspots/index.html b/aerodrome/muscat/appendix_hotspots/index.html new file mode 100644 index 00000000..c64f5209 --- /dev/null +++ b/aerodrome/muscat/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/appendix_taxi/index.html b/aerodrome/muscat/appendix_taxi/index.html new file mode 100644 index 00000000..12a183d5 --- /dev/null +++ b/aerodrome/muscat/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/gmc/index.html b/aerodrome/muscat/gmc/index.html new file mode 100644 index 00000000..0ac275d6 --- /dev/null +++ b/aerodrome/muscat/gmc/index.html @@ -0,0 +1,7369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("Muscat Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

3. Ground Movement Control ("Muscat Ground")

+

3.1 General provisions

+

The Ground Movement Controller (GMC) is responsible for managing aircraft movements on all aerodrome movement areas except for runways and their associated taxiways. Departing aircraft are given pushback instructions and instructions to taxi to the runway holding point. Arriving aircraft are assigned a stand and instructed to taxi as appropriate.

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

When aircraft have been handed off from CLD, they shall be fully ready for pushback and have reached their TOBT. Assuming no obstructions, they shall be instructed to push back immediately.

+

Aircraft requesting push that are not squawking their assigned transponder code shall be instructed to hold position and squawk the correct code. They must not be allowed to move until doing so.

+

Pushback direction is based primarily on aircraft location and runway configuration. Pushback from the main terminal shall occur onto T or L as appropriate. A pushback clearance must be a variant of those provided in 3.2.2 and include an instruction on which direction to face (e.g. “FACE WEST”).

+
+

Example

+

Controller: "OMA613, Muscat Ground, Pushback Approved, Face West on T."

+
+

Conditional pushback instructions may also be issued if an aircraft is taxiing behind another, waiting for pushback.

+
+

Example

+

Controller: "FDB3EF, Behind Oman Air A320 passing left to right, pushback approved, face east on T behind."

+
+

3.2.2 Pushback direction

+

When departing runway 26R, aircraft parked on the north side of the main terminal (stands 2xx and 3xx) shall be instructed to "FACE EAST" or "FACE NORTH", accordingly.

+

Aircraft departing runway 08L parked on 3xx stands shall be instructed to "FACE WEST". Such aircraft parked on stands 201-203 can either be instructed to "FACE NORTH" or "FACE SOUTH", at the discretion of the controller and the current traffic situation.

+

Aircraft parked on the south sode of the main terminal (stands 4xx, 5xx and 6xx), as well as on the cargo apron, shall always be instructed to "FACE WEST", unless otherwise required for the efficient flow of traffic.

+

3.2.3 Pushback types

+

3.2.3.1 Standard pushback

+

This type will normally have the aircraft stop abeam the adjacent stand. The phraseology for this type of pushback is laid down in 3.2.1.

+

3.2.3.2 Short pushback

+

A short pushback instruction shall require the aircraft to complete the pushback abeam the current stand such that the adjacent stand will not be blocked.

+
+

Example

+

Controller: "OMA51, short pushback approved, face West on L, to finish abeam stand 406."

+
+

3.2.4 Simultaneous pushback operations

+

Simultaneous pushbacks may be permitted from adjacent stands provided aircraft are instructed to manoeuver in accordance with 3.2.2 such that on completion of both aircraft’s pushback operation, they will be separated on the taxiway by two aircraft stands.

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

Except as specified in 3.6, departing traffic shall be taxied out using the taxiways closest to the aircraft stand (T, L, S, M, H). Where aircraft are taxied to runway holding points, transfer of control to TWR shall be made early enough, such that aircraft are not required to stop their taxi.

+

3.3.2 Traffic at the main terminal

+

The south side and the north side of the terminal are connected via taxiways N and R.

+

Taxiway N is used for southbound aircraft, while taxiway R is used for northbound aircraft. Therefore, departing traffic will taxi via L, H, R to the runway. Traffic south of taxiway F will taxi via F, E4 and H, northbound.

+

3.3.3 Traffic south of runway 08R/26L

+

Traffic south of runway 08R/26L shall exit their apron at the respective apron exit, then taxi via A to cross runway 08R/26L at intersection D1, then continue via E1, H, etc.

+
+

Warning

+

Controllers shall exercise caution when taxiing aircraft to/from the aprons south of runway 08R/26L, as only a single intersection connects the apron to the rest of the aerodrome, increasing the risk of a nose-nose situation.

+
+

Taxiway V shall be used by departing aircraft in all configurations.

+

These directions keep traffic flow organised and reduces the potential for conflict.

+

To deconflict traffic and to reduce the length of taxi clearances, intermediate holding points shall be used wherever possible.

+
+

Example

+

Controller: "OMA7R, Taxi via T, UE, V, holding point Y7 runway 26R"

+
+
+

Example

+

Controller: "OMA7R, Taxi via T, hold UE"

+
+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

Arriving aircraft shall not immediately be handed off by TWR. They must instead be given an initial taxi instruction onto W or V to keep traffic flowing. Therefore, GMC shall assign an arrival stand when they are on final approach.

+

Once the aircraft is handed off to GMC they may be taxied to their stand. Arrivals shall generally be taxied via the outside taxiways that are farthest away from stands.

+

In the 08L configuration, traffic vacating Y5 shall use taxiway W to their stand.

+

Arriving traffic headed to the south side of the terminal will taxi via N G and K to the stand.

+

Traffic going to the south side of the aerodrome (south of runway 08R/26L) will taxi via N H E1, D1.

+

3.4.2 Stand allocation procedure

+

Aircraft shall be assigned stands automatically using the Ground Radar Plugin (GRplugin) system wherever possible. Muscat does not feature operator depended stands. So all passenger operators will get a random stand at the terminal assigned.

+

For cargo operators, there is a dedicated cargo apron on the east side of the airport at taxiway H. The south side of the airport is used by GA, VIP and military aircraft but not by commercial passenger airlines.

+

3.4.3 Stand restrictions

+

TBD

+

3.5 Low visibility operations (LVO)

+

As there are no active runway crossings necessary, there are no specific operational requirements during low visibility conditions. If the RVR falls below 550m, take-offs are not allowed.

+

3.6 Designated areas of responsibility

+

Muscat has recently introduced a second ground position, meaning ground can be split into two positions if necessary: Ground North (GMC North) and South (GMC South). +These positions are split in a horizontal line between the north-civil apron. For example, stands 1xx, 2xx and 3xx and their adjacent taxiways are controlled by GMC North and stands 4xx, 5xx and 6xx and their adjacent taxiways are controlled by GMC South.

+

When both GMC North and GMC South are online, departing aircraft taxiing from the south side of the aerodrome via R shall be instructed by GMC South to taxi via R to hold short at R2, before being transferred to GMC North. +Similarly, arriving traffic taxiing from the north to the south side of the aerodrome shall be instructed to taxi via N to hold short at N1, before being transferred to GMC South. +These points signify the boundaries of the areas of responsibility for Muscat Ground.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/gmp/index.html b/aerodrome/muscat/gmp/index.html new file mode 100644 index 00000000..fb4f534f --- /dev/null +++ b/aerodrome/muscat/gmp/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("Muscat Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("Muscat Delivery")

+

2.1 General provisions

+

Airway clearance delivery (CLD) is responsible for validation of routes and shall provide IFR clearance to departing aircraft. The controller shall assign the correct departure procedure depending on the runway configuration. +Where the flight plan contains an invalid route, level or procedure, CLD must ensure that the error is corrected before the aircraft is given its clearance.. +CLD is also responsible for minimising taxiway delays and congestion for departing aircraft. During time of increased departure activity, aircraft are held at the gate to save fuel and lessen taxiway congestion. +Muscat airport does not operate datalink clearance (DCL).

+

2.2 Departure procedures

+

Muscat has many published instrument departures, including RNAV and conventional navigation SIDs. However, at the time of writing (January 2025), these are currently not in use due to aerodrome and airspace restructuring. Only two temporary SIDs are currently in use and therefore, only these shall be assigned.

+ + + + + + + + + + + + + + + + + +
RunwaySID
08LMURMA1N
26RITLAK1N
+

The initial climb is 3000ft in all cases. When a radar controller is online, aircraft will receive radar vectors enroute after MURMA or ITLAK respectively. Thus, it is wise to know that if aircraft are departing on UNICOM, they will be responsible for self-vectoring themselves to join their cleared airway.

+

2.3 Departure clearance

+

2.2.1 General

+

CLD is responsible for issuing clearances for departing aircraft. Pilots may be expected to report the following information on first contact: +- Callsign; +- Aircraft type; +- Parking stand; +- Destination; +- Requested flight level;

+

2.2.2 Information contained in a departure clearance

+

An IFR clearance shall be in the following format: +- Callsign; +- Airway and Muscat FIR exit point; +- Departure procedure; +- Initially cleared altitude; +- Assigned SSR code

+
+

Example

+

Pilot: "Muscat Delivery, OMA478, Boeing 777-300ER, information X, stand 215, request clearance to Dubai."

+

Controller: "OMA478, Muscat Delivery, information X correct, cleared to Dubai via T508 SOLUD, ITLAK1N departure, maintain altitude 3000ft, squawk 2613."

+

Pilot: "Cleared to Dubai via T508 SOLUD, ITLAK1N departure, maintain altitude 3000ft, squawk 2613, OMA478."

+

Controller: "OMA478, readback correct, QNH 1016, report ready for pushback."

+
+

2.4 Aircraft routing

+

An aircraft shall be issued a reroute by GMP if the pilot’s route doesn’t comply with standard route, compliant with Oman AIP.

+

All aircraft must follow airway routes and fly on valid airways out of Omani airspace. The first waypoint of an aircraft's route out of Muscat must start at the Muscat VOR (MCT), followed by a valid airway route out of Omani airspace/to the flight's destination.

+

If an aircraft requires a reroute, they shall be informed of such as soon as they have connected to the network by private message or on frequency. The use of “.rte" and “.rtef" aliases are encouraged.

+

The Arabian vACC Operations Department maintains an up-to-date route database on SimBrief. These routes can be accessed by selecting the "User Submitted Routes" option, highlighted in purple, when planning a flight. These routes also appear as "blue" routes, that are Eurocontrol IFPS compliant.

+
+

Example

+

Controller: "FDB615, cleared to Dubai, via T508 SOLUD, P574, IMPED. ITLAK1N departure, maintain altitude 3000ft, squawk 2613,

+
+ + + + + + + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Landing Dubai TMA Airports (OMDB,DW,SJ)Max FL200MCT T508 SOLUD P574 IMPED
Landing OTHH, OTBD-MCT Q978 ITRAX P899 TOVOX
+
+
Table 2-2: Mandatory routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

Aircraft routes out of the aerodrome must comply with all routing and level restrictions as described in section 3.1 of Arabian MATS P1. This is based on direction and type of flight.

+

Should an aircraft file an invalid cruise level, GMP shall advise the aircraft of this when delivering the clearance. In all cases, the next lowest valid cruise level shall be assigned, and the aircraft advised.

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

When A-CDM procedures are active, pilots must report their confirmed TOBT on vacdm.vatsim.me, which is then displayed in the controller's client on the departure list. A fully green time indicates a confirmed TOBT. If a pilot has not confirmed their TOBT, the controller should request it on frequency and update the departure list accordingly.

+

The TOBT system allows aircraft to push back, taxi to the runway holding point, and depart on schedule without extended delays in the departure queue. If an aircraft reports ready for pushback before its assigned TOBT, it will be instructed to hold position and will be given its place in the pushback sequence, unless aerodrome conditions permit and a slot is available. If an aircraft is cleared for push and start but does not begin pushing within 2-5 minutes, the pushback clearance is canceled, and a new TOBT is assigned.

+
+

Example

+

Controller: "OMA102, hold position. Number 3 for startup, expect pushback at time 45."

+
+

2.7 Runway change procedure

+

AIR shall provide ample notice to GMP before changing runway configuration. The last departure using the old configuration shall be coordinated between AIR, GMP, GMC and approach/departure.

+

Aircraft that have already been cleared to depart using the old configuration shall be re-cleared if they have not already requested pushback.

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

VFR traffic shall be cleared via the most appropriate VFR route towards their destination. If +necessary, the clearance may be amended by TWR prior to departure. +All VFR departures shall be assigned a discrete SSR code so that they may be identified on the radar.

+
+

Example

+

Pilot: ”Muscat Delivery, A4O-DD, C172, requet clearance to Sohar, Information Charlie”

+

Controller: ”A4O-DD, Muscat Delivery, Cleared to Sohar on the Northwest departure, altitude 1500 feet VFR, squawk 7025.”

+

Pilot: “Cleared to Sohar on the Northwest departure, altitude 1500 feet VFR, squawk 7025, A-DD.”

+

Controller: ”A-DD [Readback] Correct. Information Charlie correct, report ready for start-up.”

+
+

2.8.2 VFR departures into controlled airspace

+

VFR aircraft requesting clearance to climb into approach airspace (above 5500ft) shall only be +cleared after prior coordination with TMA control. Otherwise, they shall be instructed to remain +outside controlled airspace after leaving the control zone. +All VFR departures shall be assigned a discrete SSR code so that they may be identified on the radar.

+
+

Example

+

Pilot: ”Muscat Delivery, A4O-DD, request departure to the south on track Salalah, altitude 10,000 feet.”

+

Controller: ”A4O-DD, Muscat Delivery, Cleared on track Salalah, altitude 10,000 feet VFR, squawk 7025.”

+

Pilot: “Cleared on track Salalah, altitude 10,000 feet VFR, squawk 7025, A-DD.”

+

Controller: ”A-DD [Readback] Correct. Information Sierra correct, report ready for start-up.”

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/hotspots/index.html b/aerodrome/muscat/hotspots/index.html new file mode 100644 index 00000000..987458d9 --- /dev/null +++ b/aerodrome/muscat/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/muscat/info/index.html b/aerodrome/muscat/info/index.html new file mode 100644 index 00000000..ab2f195c --- /dev/null +++ b/aerodrome/muscat/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/aerodrome/index.html b/aerodrome/ras al khaimah/aerodrome/index.html new file mode 100644 index 00000000..e50df038 --- /dev/null +++ b/aerodrome/ras al khaimah/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/air/index.html b/aerodrome/ras al khaimah/air/index.html new file mode 100644 index 00000000..f2a6ae6e --- /dev/null +++ b/aerodrome/ras al khaimah/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/appendix_aor/index.html b/aerodrome/ras al khaimah/appendix_aor/index.html new file mode 100644 index 00000000..8dd7855e --- /dev/null +++ b/aerodrome/ras al khaimah/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/appendix_hotspots/index.html b/aerodrome/ras al khaimah/appendix_hotspots/index.html new file mode 100644 index 00000000..ba92242a --- /dev/null +++ b/aerodrome/ras al khaimah/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/appendix_taxi/index.html b/aerodrome/ras al khaimah/appendix_taxi/index.html new file mode 100644 index 00000000..c1b38b0b --- /dev/null +++ b/aerodrome/ras al khaimah/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/gmc/index.html b/aerodrome/ras al khaimah/gmc/index.html new file mode 100644 index 00000000..9d767ce8 --- /dev/null +++ b/aerodrome/ras al khaimah/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/gmp/index.html b/aerodrome/ras al khaimah/gmp/index.html new file mode 100644 index 00000000..063016c6 --- /dev/null +++ b/aerodrome/ras al khaimah/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/hotspots/index.html b/aerodrome/ras al khaimah/hotspots/index.html new file mode 100644 index 00000000..a336cfe8 --- /dev/null +++ b/aerodrome/ras al khaimah/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/ras al khaimah/info/index.html b/aerodrome/ras al khaimah/info/index.html new file mode 100644 index 00000000..cca3256a --- /dev/null +++ b/aerodrome/ras al khaimah/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/aerodrome/index.html b/aerodrome/salalah/aerodrome/index.html new file mode 100644 index 00000000..c6710db6 --- /dev/null +++ b/aerodrome/salalah/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/air/index.html b/aerodrome/salalah/air/index.html new file mode 100644 index 00000000..1dfce21f --- /dev/null +++ b/aerodrome/salalah/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/appendix_aor/index.html b/aerodrome/salalah/appendix_aor/index.html new file mode 100644 index 00000000..4d1866fa --- /dev/null +++ b/aerodrome/salalah/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/appendix_hotspots/index.html b/aerodrome/salalah/appendix_hotspots/index.html new file mode 100644 index 00000000..e1388b4d --- /dev/null +++ b/aerodrome/salalah/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/appendix_taxi/index.html b/aerodrome/salalah/appendix_taxi/index.html new file mode 100644 index 00000000..e46b9a57 --- /dev/null +++ b/aerodrome/salalah/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/gmc/index.html b/aerodrome/salalah/gmc/index.html new file mode 100644 index 00000000..0bc07d0f --- /dev/null +++ b/aerodrome/salalah/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/gmp/index.html b/aerodrome/salalah/gmp/index.html new file mode 100644 index 00000000..a0d2641d --- /dev/null +++ b/aerodrome/salalah/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/hotspots/index.html b/aerodrome/salalah/hotspots/index.html new file mode 100644 index 00000000..d4303d23 --- /dev/null +++ b/aerodrome/salalah/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/salalah/info/index.html b/aerodrome/salalah/info/index.html new file mode 100644 index 00000000..2cded4e2 --- /dev/null +++ b/aerodrome/salalah/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/aerodrome/index.html b/aerodrome/sharjah/aerodrome/index.html new file mode 100644 index 00000000..6710ac03 --- /dev/null +++ b/aerodrome/sharjah/aerodrome/index.html @@ -0,0 +1,7340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Aerodrome Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

1. Aerodrome Information

+

1.1 Aerodrome Details

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ICAO Code
Aerodrome Reference Point (ARP)
Elevation
Magnetic Variation / Annual Change
Transition Altitude / Level13,000 ft / FL150
+

1.2 Air traffic services

+

1.2.1 List of ATS callsigns

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radio CallsignLogon CallsignAbbreviationFrequency
+

1.2.2 ATS airspace

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AirspaceClassificationVertical LimitsTransition AltitudeTransition Level
CTA (Terminal Area)13 000 ftFL 150
CTR (Control Zone)13 000 ftFL 150
+

1.3 Radio navigation aids

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIdentifierFrequency
+

1.4 Runways

+

1.4.1 Runway physical characteristics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runway DesignationTrue/Magnetic BearingDimensions (m)
+

1.4.2 Declared distances (take-off)

+ + + + + + + + + + + + + + + + + + + +
RunwayIntersectionTake-off Run Available (TORA)Accelerate Stop Distance Available (ASDA)
12RFULL LENGTH4315 m4504 m
K2/M5B4125 m4314 m
+ +

1.4.3 Declared distances (landing)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayLanding Distance Available (at Threshold)
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/air/index.html b/aerodrome/sharjah/air/index.html new file mode 100644 index 00000000..60848e3e --- /dev/null +++ b/aerodrome/sharjah/air/index.html @@ -0,0 +1,8033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 4. Air Control ("XXX Tower") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

4. Air Control ("XXX Tower")

+

4.1 General provisions

+

4.2 Preferential runways

+

4.3 Departure procedures

+

4.3.1 Standard departure points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayStandard departure points
+
+
Table 4-1: Standard departure points
+
+

4.3.2 Line up clearances

+

4.3.4 Separation requirements

+

4.3.4.1 General

+

4.3.4.2 Muscat FIR flow control procedure

+ + + + + + + + + + + + + + + + + + + + +
SIDFIR exit pointLongitudinal separation
+
+
Table 4-2: Flow control procedures for traffic entering the Muscat FIR
+
+

4.3.4.3 Low visibility and IMC

+

4.3.5 IFR handoff procedure

+

4.3.5.1 General

+

4.3.5.2 Procedure for 30 configuration

+ + + + + + + + + + + +
SIDHandoff station
ANVIX7FDEP 1
+
+
Table 4-3: Departure handoff procedure (30)
+
+

4.3.5.3 Procedure for 12 configuration

+ + + + + + + + + + + + +
SIDHandoff station
ANVIX5GDEP 1
+
+
Table 4-4: Departure handoff procedure (12)
+
+

4.3.6 Omnidirectional departures

+

4.3.7 Stopping a departure

+

4.4 Arrival Procedures

+

4.4.1 Preferred exit points

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Landing RunwayPreferred Exit POint
+
+
Table 4-5: Preferred exit points
+
+

4.4.2 Separation requirements

+

4.4.2.1 General

+

4.4.2.2 Speed control

+

4.4.2.3 Visual separation

+

4.4.3 Go-around instruction

+

4.4.3.1 General go-around procedure

+

4.4.3.2 Go-around with simultaneous departure in VMC

+

4.4.3.2 Go-around with simultaneous departure in IMC or during LVO

+

4.4.4 Arrival taxi procedures

+

4.5 Reduced runway separation minima (RRSM)

+

4.5.1 Conditions for the application of RRSM

+

4.5.2 Single runway mode procedure

+

4.5.2.1 Landing following landing

+

4.5.2.2 Landing following departure

+

4.5.3 Dual dependent runway mode

+

4.6 VFR procedures

+

4.6.1 VFR departures

+

4.6.2 VFR traffic remaining in the circuit

+

4.6.3 VFR arrivals

+

4.7 Low visibility operations (LVO)

+

4.7.1 Commencement of LVO

+

4.7.2 LVO departure procedures

+ + + + + + + + + + + + + + + + + + + + + + + + + +
RunwayHolding Point
+
+
Table 4-9: CATII/III holding points
+
+

4.7.3 LVO arrival procedures

+

4.8 Designated areas of responsibility

+

4.8.1 AIR positions

+

4.8.2 Handoff procedure

+

4.8.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/appendix_aor/index.html b/aerodrome/sharjah/appendix_aor/index.html new file mode 100644 index 00000000..9d653bbc --- /dev/null +++ b/aerodrome/sharjah/appendix_aor/index.html @@ -0,0 +1,6983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 7. Appendix - Areas of Responsibility - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

7. Appendix - Areas of Responsibility

+

7.1 Use of Diagrams

+

Areas indicated in a solid colour are the sole responsibility of the respective AIR controller. GMC shall expect traffic to only be handed off once at the boundary of these areas. Transfer of control shall be initiated by GMC before aircraft reach the boundary of these areas.

+

Areas indicated in a cross-hatched colour are areas of shared responsibility. Here, transfer of control may only be initiated when required between controllers, except as provided in 3.3.1 to facilitate a non-stop taxi.

+

Uncoloured areas are the responsibility of the respective GMC controller as indicated by the green boundary line between GMC 1 and GMC 2.

+

7.2 Runway 13L/31R

+

7.3 Runway 13R/31L

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/appendix_hotspots/index.html b/aerodrome/sharjah/appendix_hotspots/index.html new file mode 100644 index 00000000..7aa1dadd --- /dev/null +++ b/aerodrome/sharjah/appendix_hotspots/index.html @@ -0,0 +1,6943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 8. Appendix - Aerodrome Incursion Hotspot Diagram - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

8. Appendix - Aerodrome Incursion Hotspot Diagram

+

8.1 Use of Diagrams

+

The hotspots shown on the diagram correspond to the lettered hotspots described in Section 5. Refer to this section for a detailed description of each hotspot.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/appendix_taxi/index.html b/aerodrome/sharjah/appendix_taxi/index.html new file mode 100644 index 00000000..a27d9893 --- /dev/null +++ b/aerodrome/sharjah/appendix_taxi/index.html @@ -0,0 +1,7122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 6. Appendix - Taxi Diagrams - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

6. Appendix - Taxi Diagrams

+

6.1 Use of Diagrams

+

Blue lines indicate departure taxi routes. Yellow lines indicate arrival taxi routes.

+

Commonly used intermediate holding points are shown in white. Runway holding points are shown in red.

+

Pink indicates areas not available in some sceneries and shall not be used unless requested.

+

Taxiways with a red background are not code F (A380/B747-8) compatible.

+

6.2 Runway 30 configuration

+

6.2.1 Dual Runway 30L/30R

+

6.2.2 Single Runway 30L

+

6.2.3 Single Runway 30R

+

6.3 Runway 12 configuration

+

6.3.1 Dual Runway 12L/12R (Departure Bias and Arrival Bias)

+

6.3.2 Single Runway 12L

+

6.3.3 Single Runway 12R

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/gmc/index.html b/aerodrome/sharjah/gmc/index.html new file mode 100644 index 00000000..21d7ef5f --- /dev/null +++ b/aerodrome/sharjah/gmc/index.html @@ -0,0 +1,7743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3. Ground Movement Control ("XXX Ground") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

3. Ground Movement Control ("XXX Ground")

+

3.1 General provisions

+

3.2 Departure pushback procedures

+

3.2.1 General pushback procedures

+

3.2.2 Pushback types

+

3.2.2.1 Standard pushback

+

3.2.2.2 Short pushback

+

3.2.3 Simultaneous pushback operations

+

3.2.4 Dual runway 30R departure pushback procedures

+

3.2.5 Dual runway 12R departure pushback procedures

+

3.2.6 Single runway pushback procedures

+

3.3 Departure taxi procedures

+

3.3.1 General departure taxi procedures

+

3.3.2 Dual runway 30R departure taxi procedures

+

3.3.3 Single runway 30R departure taxi procedures

+

3.3.4 Single runway 30L departure taxi procedures

+

3.3.5 Dual runway 12R departure taxi procedures

+

3.3.6 Single runway 12R departure taxi procedures

+

3.3.7 Single runway 12L departure taxi procedures

+

3.3.8 Departure handoff procedures

+

3.4 Arrival taxi procedures

+

3.4.1 General arrival taxi procedures

+

3.4.2 Dual runway 30L arrival taxi procedures

+

3.4.3 Dual runway 30R arrival taxi procedures

+

3.4.4 Single runway 30L arrival taxi procedures

+

3.4.5 Single runway 30R arrival taxi procedures

+

3.4.6 Dual runway 12L arrival taxi procedures

+

3.4.7 Single runway 12L arrival taxi procedure

+

3.4.8 Single runway 12R arrival taxi procedure

+

3.4.9 Stand allocation procedure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaStand AllocationOperator
+
+
Table 3-1: Stand allocation procedure
+
+

3.4.10 Stand restrictions

+

3.5 Low visibility operations (LVO)

+

3.5.1 LVO taxi routes

+

3.6 Designated areas of responsibility

+

3.6.1 GMC positions

+

3.6.2 Handoff procedures

+

3.6.3 Splitting procedure

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/gmp/index.html b/aerodrome/sharjah/gmp/index.html new file mode 100644 index 00000000..3168bb64 --- /dev/null +++ b/aerodrome/sharjah/gmp/index.html @@ -0,0 +1,7442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2. Ground Movement Planner ("XXX Delivery") - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

2. Ground Movement Planner ("XXX Delivery")

+

2.1 General provisions

+

2.2 Departure clearance

+

2.2.1 General

+

2.2.2 Information contained in a departure clearance

+ +

2.2.4 Aircraft requiring a reroute

+

2.2.5 Voice clearance

+

2.3 Departure Procedures

+

2.3.1 RNAV Standard instrument departures

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First Fix30L/30R12L/12R
ANVIX7F5G
DAVMO4F4G
EMERU2F2G
IVURO1F1G
KUTLI4F4G
MIROT3F3G
NABIX3F3G
RIDAP2F3G
SENPA2F3G
+
+
Table 2-1: RNAV SIDs
+
+

2.3.2 Omnidirectional departures

+

2.4 Rerouting aircraft

+
+

Example

+

Controller: "RJA615, cleared to Amman, via SENPA1G, SENPA N571 ALPOB L768 ULADA, flight planned route. Maintain 4000ft, squawk 0553."

+
+ + + + + + + + + + + + +
DestinationLevel RestrictionsRouting
Tehran FIR Northbound-DAVMO M318 GABKO
+
+
Table 2-2: Standard routes
+
+

2.5 Requested cruising level

+

2.5.1 Level restrictions

+

2.6 Delay mitigation

+

2.6.1 Target off-block time (TOBT)

+

2.7 Runway change procedure

+

2.8 VFR aircraft

+

2.8.1 VFR departures into uncontrolled airspace

+

2.8.2 VFR departures into controlled airspace

+

2.8.3 VFR traffic remaining in circuit

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/hotspots/index.html b/aerodrome/sharjah/hotspots/index.html new file mode 100644 index 00000000..6c5c56f1 --- /dev/null +++ b/aerodrome/sharjah/hotspots/index.html @@ -0,0 +1,7075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 5. Aerodrome Incursion Hotspots - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

5. Aerodrome Incursion Hotspots

+

5.1 General guidance

+

5.2 Hotspot A

+

5.3 Hotspot B

+

5.4 Hotspot C

+

5.5 Hotspot D

+

5.6 Hotspot E

+

5.7 Hotspot F

+

5.8 Hotspot G

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/aerodrome/sharjah/info/index.html b/aerodrome/sharjah/info/index.html new file mode 100644 index 00000000..868fb2f2 --- /dev/null +++ b/aerodrome/sharjah/info/index.html @@ -0,0 +1,7012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Document Information - Arabian vACC - Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Document Information

+

Document Control Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeProcedure
Revision01/2024
Effective Date01 DEC 2024
Prepared bySuprojit Paul - ACCARB3 & Shahzin Shajid - Mentor
Approved byChris Marriott - ACCARB1
Next review date01 DEC 2025
Cancelled documentsSOP OMDB R05/2021
+

Record of Revisions

+ + + + + + + + + + + + +
Revision NumberNotesEffective Date
01/2019Initial issue26 SEP 2019
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/assets/hero-image.png b/assets/hero-image.png new file mode 100644 index 00000000..fafa9081 Binary files /dev/null and b/assets/hero-image.png differ diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico new file mode 100644 index 00000000..2ee31874 Binary files /dev/null and b/assets/images/favicon.ico differ diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..1cf13b9f Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 00000000..33e82410 Binary files /dev/null and b/assets/images/logo.png differ diff --git a/assets/javascripts/bundle.60a45f97.min.js b/assets/javascripts/bundle.60a45f97.min.js new file mode 100644 index 00000000..f8f18f6c --- /dev/null +++ b/assets/javascripts/bundle.60a45f97.min.js @@ -0,0 +1,16 @@ +"use strict";(()=>{var Wi=Object.create;var gr=Object.defineProperty;var Di=Object.getOwnPropertyDescriptor;var Vi=Object.getOwnPropertyNames,Vt=Object.getOwnPropertySymbols,Ni=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,ao=Object.prototype.propertyIsEnumerable;var io=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,$=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&io(e,r,t[r]);if(Vt)for(var r of Vt(t))ao.call(t,r)&&io(e,r,t[r]);return e};var so=(e,t)=>{var r={};for(var o in e)yr.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&Vt)for(var o of Vt(e))t.indexOf(o)<0&&ao.call(e,o)&&(r[o]=e[o]);return r};var xr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var zi=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Vi(t))!yr.call(e,n)&&n!==r&&gr(e,n,{get:()=>t[n],enumerable:!(o=Di(t,n))||o.enumerable});return e};var Mt=(e,t,r)=>(r=e!=null?Wi(Ni(e)):{},zi(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var co=(e,t,r)=>new Promise((o,n)=>{var i=p=>{try{s(r.next(p))}catch(c){n(c)}},a=p=>{try{s(r.throw(p))}catch(c){n(c)}},s=p=>p.done?o(p.value):Promise.resolve(p.value).then(i,a);s((r=r.apply(e,t)).next())});var lo=xr((Er,po)=>{(function(e,t){typeof Er=="object"&&typeof po!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Er,function(){"use strict";function e(r){var o=!0,n=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(k){return!!(k&&k!==document&&k.nodeName!=="HTML"&&k.nodeName!=="BODY"&&"classList"in k&&"contains"in k.classList)}function p(k){var ft=k.type,qe=k.tagName;return!!(qe==="INPUT"&&a[ft]&&!k.readOnly||qe==="TEXTAREA"&&!k.readOnly||k.isContentEditable)}function c(k){k.classList.contains("focus-visible")||(k.classList.add("focus-visible"),k.setAttribute("data-focus-visible-added",""))}function l(k){k.hasAttribute("data-focus-visible-added")&&(k.classList.remove("focus-visible"),k.removeAttribute("data-focus-visible-added"))}function f(k){k.metaKey||k.altKey||k.ctrlKey||(s(r.activeElement)&&c(r.activeElement),o=!0)}function u(k){o=!1}function d(k){s(k.target)&&(o||p(k.target))&&c(k.target)}function y(k){s(k.target)&&(k.target.classList.contains("focus-visible")||k.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(i),i=window.setTimeout(function(){n=!1},100),l(k.target))}function L(k){document.visibilityState==="hidden"&&(n&&(o=!0),X())}function X(){document.addEventListener("mousemove",J),document.addEventListener("mousedown",J),document.addEventListener("mouseup",J),document.addEventListener("pointermove",J),document.addEventListener("pointerdown",J),document.addEventListener("pointerup",J),document.addEventListener("touchmove",J),document.addEventListener("touchstart",J),document.addEventListener("touchend",J)}function te(){document.removeEventListener("mousemove",J),document.removeEventListener("mousedown",J),document.removeEventListener("mouseup",J),document.removeEventListener("pointermove",J),document.removeEventListener("pointerdown",J),document.removeEventListener("pointerup",J),document.removeEventListener("touchmove",J),document.removeEventListener("touchstart",J),document.removeEventListener("touchend",J)}function J(k){k.target.nodeName&&k.target.nodeName.toLowerCase()==="html"||(o=!1,te())}document.addEventListener("keydown",f,!0),document.addEventListener("mousedown",u,!0),document.addEventListener("pointerdown",u,!0),document.addEventListener("touchstart",u,!0),document.addEventListener("visibilitychange",L,!0),X(),r.addEventListener("focus",d,!0),r.addEventListener("blur",y,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var qr=xr((hy,On)=>{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var $a=/["'&<>]/;On.exports=Pa;function Pa(e){var t=""+e,r=$a.exec(t);if(!r)return t;var o,n="",i=0,a=0;for(i=r.index;i{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof It=="object"&&typeof Yr=="object"?Yr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof It=="object"?It.ClipboardJS=r():t.ClipboardJS=r()})(It,function(){return function(){var e={686:function(o,n,i){"use strict";i.d(n,{default:function(){return Ui}});var a=i(279),s=i.n(a),p=i(370),c=i.n(p),l=i(817),f=i.n(l);function u(V){try{return document.execCommand(V)}catch(A){return!1}}var d=function(A){var M=f()(A);return u("cut"),M},y=d;function L(V){var A=document.documentElement.getAttribute("dir")==="rtl",M=document.createElement("textarea");M.style.fontSize="12pt",M.style.border="0",M.style.padding="0",M.style.margin="0",M.style.position="absolute",M.style[A?"right":"left"]="-9999px";var F=window.pageYOffset||document.documentElement.scrollTop;return M.style.top="".concat(F,"px"),M.setAttribute("readonly",""),M.value=V,M}var X=function(A,M){var F=L(A);M.container.appendChild(F);var D=f()(F);return u("copy"),F.remove(),D},te=function(A){var M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},F="";return typeof A=="string"?F=X(A,M):A instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(A==null?void 0:A.type)?F=X(A.value,M):(F=f()(A),u("copy")),F},J=te;function k(V){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?k=function(M){return typeof M}:k=function(M){return M&&typeof Symbol=="function"&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},k(V)}var ft=function(){var A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},M=A.action,F=M===void 0?"copy":M,D=A.container,Y=A.target,$e=A.text;if(F!=="copy"&&F!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(Y!==void 0)if(Y&&k(Y)==="object"&&Y.nodeType===1){if(F==="copy"&&Y.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(F==="cut"&&(Y.hasAttribute("readonly")||Y.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if($e)return J($e,{container:D});if(Y)return F==="cut"?y(Y):J(Y,{container:D})},qe=ft;function Fe(V){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Fe=function(M){return typeof M}:Fe=function(M){return M&&typeof Symbol=="function"&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},Fe(V)}function ki(V,A){if(!(V instanceof A))throw new TypeError("Cannot call a class as a function")}function no(V,A){for(var M=0;M0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof D.action=="function"?D.action:this.defaultAction,this.target=typeof D.target=="function"?D.target:this.defaultTarget,this.text=typeof D.text=="function"?D.text:this.defaultText,this.container=Fe(D.container)==="object"?D.container:document.body}},{key:"listenClick",value:function(D){var Y=this;this.listener=c()(D,"click",function($e){return Y.onClick($e)})}},{key:"onClick",value:function(D){var Y=D.delegateTarget||D.currentTarget,$e=this.action(Y)||"copy",Dt=qe({action:$e,container:this.container,target:this.target(Y),text:this.text(Y)});this.emit(Dt?"success":"error",{action:$e,text:Dt,trigger:Y,clearSelection:function(){Y&&Y.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(D){return vr("action",D)}},{key:"defaultTarget",value:function(D){var Y=vr("target",D);if(Y)return document.querySelector(Y)}},{key:"defaultText",value:function(D){return vr("text",D)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(D){var Y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return J(D,Y)}},{key:"cut",value:function(D){return y(D)}},{key:"isSupported",value:function(){var D=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],Y=typeof D=="string"?[D]:D,$e=!!document.queryCommandSupported;return Y.forEach(function(Dt){$e=$e&&!!document.queryCommandSupported(Dt)}),$e}}]),M}(s()),Ui=Fi},828:function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,p){for(;s&&s.nodeType!==n;){if(typeof s.matches=="function"&&s.matches(p))return s;s=s.parentNode}}o.exports=a},438:function(o,n,i){var a=i(828);function s(l,f,u,d,y){var L=c.apply(this,arguments);return l.addEventListener(u,L,y),{destroy:function(){l.removeEventListener(u,L,y)}}}function p(l,f,u,d,y){return typeof l.addEventListener=="function"?s.apply(null,arguments):typeof u=="function"?s.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(L){return s(L,f,u,d,y)}))}function c(l,f,u,d){return function(y){y.delegateTarget=a(y.target,f),y.delegateTarget&&d.call(l,y)}}o.exports=p},879:function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(o,n,i){var a=i(879),s=i(438);function p(u,d,y){if(!u&&!d&&!y)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(y))throw new TypeError("Third argument must be a Function");if(a.node(u))return c(u,d,y);if(a.nodeList(u))return l(u,d,y);if(a.string(u))return f(u,d,y);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(u,d,y){return u.addEventListener(d,y),{destroy:function(){u.removeEventListener(d,y)}}}function l(u,d,y){return Array.prototype.forEach.call(u,function(L){L.addEventListener(d,y)}),{destroy:function(){Array.prototype.forEach.call(u,function(L){L.removeEventListener(d,y)})}}}function f(u,d,y){return s(document.body,u,d,y)}o.exports=p},817:function(o){function n(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var p=window.getSelection(),c=document.createRange();c.selectNodeContents(i),p.removeAllRanges(),p.addRange(c),a=p.toString()}return a}o.exports=n},279:function(o){function n(){}n.prototype={on:function(i,a,s){var p=this.e||(this.e={});return(p[i]||(p[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var p=this;function c(){p.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),p=0,c=s.length;for(p;p0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function N(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],a;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(s){a={error:s}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i}function q(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||p(d,L)})},y&&(n[d]=y(n[d])))}function p(d,y){try{c(o[d](y))}catch(L){u(i[0][3],L)}}function c(d){d.value instanceof nt?Promise.resolve(d.value.v).then(l,f):u(i[0][2],d)}function l(d){p("next",d)}function f(d){p("throw",d)}function u(d,y){d(y),i.shift(),i.length&&p(i[0][0],i[0][1])}}function uo(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof he=="function"?he(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(a){return new Promise(function(s,p){a=e[i](a),n(s,p,a.done,a.value)})}}function n(i,a,s,p){Promise.resolve(p).then(function(c){i({value:c,done:s})},a)}}function H(e){return typeof e=="function"}function ut(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var zt=ut(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(o,n){return n+1+") "+o.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Qe(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ue=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=he(a),p=s.next();!p.done;p=s.next()){var c=p.value;c.remove(this)}}catch(L){t={error:L}}finally{try{p&&!p.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(H(l))try{l()}catch(L){i=L instanceof zt?L.errors:[L]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=he(f),d=u.next();!d.done;d=u.next()){var y=d.value;try{ho(y)}catch(L){i=i!=null?i:[],L instanceof zt?i=q(q([],N(i)),N(L.errors)):i.push(L)}}}catch(L){o={error:L}}finally{try{d&&!d.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new zt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ho(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Qe(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Qe(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=Ue.EMPTY;function qt(e){return e instanceof Ue||e&&"closed"in e&&H(e.remove)&&H(e.add)&&H(e.unsubscribe)}function ho(e){H(e)?e():e.unsubscribe()}var Pe={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var dt={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,a=n.isStopped,s=n.observers;return i||a?Tr:(this.currentObservers=null,s.push(r),new Ue(function(){o.currentObservers=null,Qe(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,a=o.isStopped;n?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new j;return r.source=this,r},t.create=function(r,o){return new To(r,o)},t}(j);var To=function(e){oe(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:Tr},t}(g);var _r=function(e){oe(t,e);function t(r){var o=e.call(this)||this;return o._value=r,o}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var o=e.prototype._subscribe.call(this,r);return!o.closed&&r.next(this._value),o},t.prototype.getValue=function(){var r=this,o=r.hasError,n=r.thrownError,i=r._value;if(o)throw n;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t}(g);var At={now:function(){return(At.delegate||Date).now()},delegate:void 0};var Ct=function(e){oe(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=At);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,a=o._infiniteTimeWindow,s=o._timestampProvider,p=o._windowTime;n||(i.push(r),!a&&i.push(s.now()+p)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,a=n._buffer,s=a.slice(),p=0;p0?e.prototype.schedule.call(this,r,o):(this.delay=o,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,o){return o>0||this.closed?e.prototype.execute.call(this,r,o):this._execute(r,o)},t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!=null&&n>0||n==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.flush(this),0)},t}(gt);var Lo=function(e){oe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(yt);var kr=new Lo(Oo);var Mo=function(e){oe(t,e);function t(r,o){var n=e.call(this,r,o)||this;return n.scheduler=r,n.work=o,n}return t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=vt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var a=r.actions;o!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==o&&(vt.cancelAnimationFrame(o),r._scheduled=void 0)},t}(gt);var _o=function(e){oe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(yt);var me=new _o(Mo);var S=new j(function(e){return e.complete()});function Yt(e){return e&&H(e.schedule)}function Hr(e){return e[e.length-1]}function Xe(e){return H(Hr(e))?e.pop():void 0}function ke(e){return Yt(Hr(e))?e.pop():void 0}function Bt(e,t){return typeof Hr(e)=="number"?e.pop():t}var xt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Gt(e){return H(e==null?void 0:e.then)}function Jt(e){return H(e[bt])}function Xt(e){return Symbol.asyncIterator&&H(e==null?void 0:e[Symbol.asyncIterator])}function Zt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var er=Zi();function tr(e){return H(e==null?void 0:e[er])}function rr(e){return fo(this,arguments,function(){var r,o,n,i;return Nt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,nt(r.read())];case 3:return o=a.sent(),n=o.value,i=o.done,i?[4,nt(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,nt(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function or(e){return H(e==null?void 0:e.getReader)}function U(e){if(e instanceof j)return e;if(e!=null){if(Jt(e))return ea(e);if(xt(e))return ta(e);if(Gt(e))return ra(e);if(Xt(e))return Ao(e);if(tr(e))return oa(e);if(or(e))return na(e)}throw Zt(e)}function ea(e){return new j(function(t){var r=e[bt]();if(H(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function ta(e){return new j(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?b(function(n,i){return e(n,i,o)}):le,Te(1),r?De(t):Qo(function(){return new ir}))}}function jr(e){return e<=0?function(){return S}:E(function(t,r){var o=[];t.subscribe(T(r,function(n){o.push(n),e=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new g}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,p=s===void 0?!0:s;return function(c){var l,f,u,d=0,y=!1,L=!1,X=function(){f==null||f.unsubscribe(),f=void 0},te=function(){X(),l=u=void 0,y=L=!1},J=function(){var k=l;te(),k==null||k.unsubscribe()};return E(function(k,ft){d++,!L&&!y&&X();var qe=u=u!=null?u:r();ft.add(function(){d--,d===0&&!L&&!y&&(f=Ur(J,p))}),qe.subscribe(ft),!l&&d>0&&(l=new at({next:function(Fe){return qe.next(Fe)},error:function(Fe){L=!0,X(),f=Ur(te,n,Fe),qe.error(Fe)},complete:function(){y=!0,X(),f=Ur(te,a),qe.complete()}}),U(k).subscribe(l))})(c)}}function Ur(e,t){for(var r=[],o=2;oe.next(document)),e}function P(e,t=document){return Array.from(t.querySelectorAll(e))}function R(e,t=document){let r=fe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function fe(e,t=document){return t.querySelector(e)||void 0}function Ie(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var wa=O(h(document.body,"focusin"),h(document.body,"focusout")).pipe(_e(1),Q(void 0),m(()=>Ie()||document.body),G(1));function et(e){return wa.pipe(m(t=>e.contains(t)),K())}function $t(e,t){return C(()=>O(h(e,"mouseenter").pipe(m(()=>!0)),h(e,"mouseleave").pipe(m(()=>!1))).pipe(t?Ht(r=>Le(+!r*t)):le,Q(e.matches(":hover"))))}function Jo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Jo(e,r)}function x(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)Jo(o,n);return o}function sr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Tt(e){let t=x("script",{src:e});return C(()=>(document.head.appendChild(t),O(h(t,"load"),h(t,"error").pipe(v(()=>$r(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),_(()=>document.head.removeChild(t)),Te(1))))}var Xo=new g,Ta=C(()=>typeof ResizeObserver=="undefined"?Tt("https://unpkg.com/resize-observer-polyfill"):I(void 0)).pipe(m(()=>new ResizeObserver(e=>e.forEach(t=>Xo.next(t)))),v(e=>O(Ye,I(e)).pipe(_(()=>e.disconnect()))),G(1));function ce(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return Ta.pipe(w(r=>r.observe(t)),v(r=>Xo.pipe(b(o=>o.target===t),_(()=>r.unobserve(t)))),m(()=>ce(e)),Q(ce(e)))}function St(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function Zo(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Ve(e){return{x:e.offsetLeft,y:e.offsetTop}}function en(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function tn(e){return O(h(window,"load"),h(window,"resize")).pipe(Me(0,me),m(()=>Ve(e)),Q(Ve(e)))}function pr(e){return{x:e.scrollLeft,y:e.scrollTop}}function Ne(e){return O(h(e,"scroll"),h(window,"scroll"),h(window,"resize")).pipe(Me(0,me),m(()=>pr(e)),Q(pr(e)))}var rn=new g,Sa=C(()=>I(new IntersectionObserver(e=>{for(let t of e)rn.next(t)},{threshold:0}))).pipe(v(e=>O(Ye,I(e)).pipe(_(()=>e.disconnect()))),G(1));function tt(e){return Sa.pipe(w(t=>t.observe(e)),v(t=>rn.pipe(b(({target:r})=>r===e),_(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function on(e,t=16){return Ne(e).pipe(m(({y:r})=>{let o=ce(e),n=St(e);return r>=n.height-o.height-t}),K())}var lr={drawer:R("[data-md-toggle=drawer]"),search:R("[data-md-toggle=search]")};function nn(e){return lr[e].checked}function Je(e,t){lr[e].checked!==t&&lr[e].click()}function ze(e){let t=lr[e];return h(t,"change").pipe(m(()=>t.checked),Q(t.checked))}function Oa(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function La(){return O(h(window,"compositionstart").pipe(m(()=>!0)),h(window,"compositionend").pipe(m(()=>!1))).pipe(Q(!1))}function an(){let e=h(window,"keydown").pipe(b(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:nn("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),b(({mode:t,type:r})=>{if(t==="global"){let o=Ie();if(typeof o!="undefined")return!Oa(o,r)}return!0}),pe());return La().pipe(v(t=>t?S:e))}function ye(){return new URL(location.href)}function lt(e,t=!1){if(B("navigation.instant")&&!t){let r=x("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function sn(){return new g}function cn(){return location.hash.slice(1)}function pn(e){let t=x("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Ma(e){return O(h(window,"hashchange"),e).pipe(m(cn),Q(cn()),b(t=>t.length>0),G(1))}function ln(e){return Ma(e).pipe(m(t=>fe(`[id="${t}"]`)),b(t=>typeof t!="undefined"))}function Pt(e){let t=matchMedia(e);return ar(r=>t.addListener(()=>r(t.matches))).pipe(Q(t.matches))}function mn(){let e=matchMedia("print");return O(h(window,"beforeprint").pipe(m(()=>!0)),h(window,"afterprint").pipe(m(()=>!1))).pipe(Q(e.matches))}function Nr(e,t){return e.pipe(v(r=>r?t():S))}function zr(e,t){return new j(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let a=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+a*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function je(e,t){return zr(e,t).pipe(v(r=>r.text()),m(r=>JSON.parse(r)),G(1))}function fn(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),G(1))}function un(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),G(1))}function dn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function hn(){return O(h(window,"scroll",{passive:!0}),h(window,"resize",{passive:!0})).pipe(m(dn),Q(dn()))}function bn(){return{width:innerWidth,height:innerHeight}}function vn(){return h(window,"resize",{passive:!0}).pipe(m(bn),Q(bn()))}function gn(){return z([hn(),vn()]).pipe(m(([e,t])=>({offset:e,size:t})),G(1))}function mr(e,{viewport$:t,header$:r}){let o=t.pipe(ee("size")),n=z([o,r]).pipe(m(()=>Ve(e)));return z([r,t,n]).pipe(m(([{height:i},{offset:a,size:s},{x:p,y:c}])=>({offset:{x:a.x-p,y:a.y-c+i},size:s})))}function _a(e){return h(e,"message",t=>t.data)}function Aa(e){let t=new g;return t.subscribe(r=>e.postMessage(r)),t}function yn(e,t=new Worker(e)){let r=_a(t),o=Aa(t),n=new g;n.subscribe(o);let i=o.pipe(Z(),ie(!0));return n.pipe(Z(),Re(r.pipe(W(i))),pe())}var Ca=R("#__config"),Ot=JSON.parse(Ca.textContent);Ot.base=`${new URL(Ot.base,ye())}`;function xe(){return Ot}function B(e){return Ot.features.includes(e)}function Ee(e,t){return typeof t!="undefined"?Ot.translations[e].replace("#",t.toString()):Ot.translations[e]}function Se(e,t=document){return R(`[data-md-component=${e}]`,t)}function ae(e,t=document){return P(`[data-md-component=${e}]`,t)}function ka(e){let t=R(".md-typeset > :first-child",e);return h(t,"click",{once:!0}).pipe(m(()=>R(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function xn(e){if(!B("announce.dismiss")||!e.childElementCount)return S;if(!e.hidden){let t=R(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return C(()=>{let t=new g;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),ka(e).pipe(w(r=>t.next(r)),_(()=>t.complete()),m(r=>$({ref:e},r)))})}function Ha(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function En(e,t){let r=new g;return r.subscribe(({hidden:o})=>{e.hidden=o}),Ha(e,t).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))}function Rt(e,t){return t==="inline"?x("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"})):x("div",{class:"md-tooltip",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"}))}function wn(...e){return x("div",{class:"md-tooltip2",role:"tooltip"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function Tn(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return x("aside",{class:"md-annotation",tabIndex:0},Rt(t),x("a",{href:r,class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}else return x("aside",{class:"md-annotation",tabIndex:0},Rt(t),x("span",{class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}function Sn(e){return x("button",{class:"md-clipboard md-icon",title:Ee("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}var Ln=Mt(qr());function Qr(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(p=>!e.terms[p]).reduce((p,c)=>[...p,x("del",null,(0,Ln.default)(c))," "],[]).slice(0,-1),i=xe(),a=new URL(e.location,i.base);B("search.highlight")&&a.searchParams.set("h",Object.entries(e.terms).filter(([,p])=>p).reduce((p,[c])=>`${p} ${c}`.trim(),""));let{tags:s}=xe();return x("a",{href:`${a}`,class:"md-search-result__link",tabIndex:-1},x("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&x("div",{class:"md-search-result__icon md-icon"}),r>0&&x("h1",null,e.title),r<=0&&x("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&x("nav",{class:"md-tags"},e.tags.map(p=>{let c=s?p in s?`md-tag-icon md-tag--${s[p]}`:"md-tag-icon":"";return x("span",{class:`md-tag ${c}`},p)})),o>0&&n.length>0&&x("p",{class:"md-search-result__terms"},Ee("search.result.term.missing"),": ",...n)))}function Mn(e){let t=e[0].score,r=[...e],o=xe(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),a=r.findIndex(l=>l.scoreQr(l,1)),...p.length?[x("details",{class:"md-search-result__more"},x("summary",{tabIndex:-1},x("div",null,p.length>0&&p.length===1?Ee("search.result.more.one"):Ee("search.result.more.other",p.length))),...p.map(l=>Qr(l,1)))]:[]];return x("li",{class:"md-search-result__item"},c)}function _n(e){return x("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>x("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?sr(r):r)))}function Kr(e){let t=`tabbed-control tabbed-control--${e}`;return x("div",{class:t,hidden:!0},x("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function An(e){return x("div",{class:"md-typeset__scrollwrap"},x("div",{class:"md-typeset__table"},e))}function Ra(e){var o;let t=xe(),r=new URL(`../${e.version}/`,t.base);return x("li",{class:"md-version__item"},x("a",{href:`${r}`,class:"md-version__link"},e.title,((o=t.version)==null?void 0:o.alias)&&e.aliases.length>0&&x("span",{class:"md-version__alias"},e.aliases[0])))}function Cn(e,t){var o;let r=xe();return e=e.filter(n=>{var i;return!((i=n.properties)!=null&&i.hidden)}),x("div",{class:"md-version"},x("button",{class:"md-version__current","aria-label":Ee("select.version")},t.title,((o=r.version)==null?void 0:o.alias)&&t.aliases.length>0&&x("span",{class:"md-version__alias"},t.aliases[0])),x("ul",{class:"md-version__list"},e.map(Ra)))}var Ia=0;function ja(e){let t=z([et(e),$t(e)]).pipe(m(([o,n])=>o||n),K()),r=C(()=>Zo(e)).pipe(ne(Ne),pt(1),He(t),m(()=>en(e)));return t.pipe(Ae(o=>o),v(()=>z([t,r])),m(([o,n])=>({active:o,offset:n})),pe())}function Fa(e,t){let{content$:r,viewport$:o}=t,n=`__tooltip2_${Ia++}`;return C(()=>{let i=new g,a=new _r(!1);i.pipe(Z(),ie(!1)).subscribe(a);let s=a.pipe(Ht(c=>Le(+!c*250,kr)),K(),v(c=>c?r:S),w(c=>c.id=n),pe());z([i.pipe(m(({active:c})=>c)),s.pipe(v(c=>$t(c,250)),Q(!1))]).pipe(m(c=>c.some(l=>l))).subscribe(a);let p=a.pipe(b(c=>c),re(s,o),m(([c,l,{size:f}])=>{let u=e.getBoundingClientRect(),d=u.width/2;if(l.role==="tooltip")return{x:d,y:8+u.height};if(u.y>=f.height/2){let{height:y}=ce(l);return{x:d,y:-16-y}}else return{x:d,y:16+u.height}}));return z([s,i,p]).subscribe(([c,{offset:l},f])=>{c.style.setProperty("--md-tooltip-host-x",`${l.x}px`),c.style.setProperty("--md-tooltip-host-y",`${l.y}px`),c.style.setProperty("--md-tooltip-x",`${f.x}px`),c.style.setProperty("--md-tooltip-y",`${f.y}px`),c.classList.toggle("md-tooltip2--top",f.y<0),c.classList.toggle("md-tooltip2--bottom",f.y>=0)}),a.pipe(b(c=>c),re(s,(c,l)=>l),b(c=>c.role==="tooltip")).subscribe(c=>{let l=ce(R(":scope > *",c));c.style.setProperty("--md-tooltip-width",`${l.width}px`),c.style.setProperty("--md-tooltip-tail","0px")}),a.pipe(K(),ve(me),re(s)).subscribe(([c,l])=>{l.classList.toggle("md-tooltip2--active",c)}),z([a.pipe(b(c=>c)),s]).subscribe(([c,l])=>{l.role==="dialog"?(e.setAttribute("aria-controls",n),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",n)}),a.pipe(b(c=>!c)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),ja(e).pipe(w(c=>i.next(c)),_(()=>i.complete()),m(c=>$({ref:e},c)))})}function mt(e,{viewport$:t},r=document.body){return Fa(e,{content$:new j(o=>{let n=e.title,i=wn(n);return o.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",n)}}),viewport$:t})}function Ua(e,t){let r=C(()=>z([tn(e),Ne(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:a,height:s}=ce(e);return{x:o-i.x+a/2,y:n-i.y+s/2}}));return et(e).pipe(v(o=>r.pipe(m(n=>({active:o,offset:n})),Te(+!o||1/0))))}function kn(e,t,{target$:r}){let[o,n]=Array.from(e.children);return C(()=>{let i=new g,a=i.pipe(Z(),ie(!0));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),tt(e).pipe(W(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),O(i.pipe(b(({active:s})=>s)),i.pipe(_e(250),b(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe(Me(16,me)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(pt(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),h(n,"click").pipe(W(a),b(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>{s.stopPropagation(),s.preventDefault()}),h(n,"mousedown").pipe(W(a),re(i)).subscribe(([s,{active:p}])=>{var c;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(p){s.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(c=Ie())==null||c.blur()}}),r.pipe(W(a),b(s=>s===o),Ge(125)).subscribe(()=>e.focus()),Ua(e,t).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))})}function Wa(e){return e.tagName==="CODE"?P(".c, .c1, .cm",e):[e]}function Da(e){let t=[];for(let r of Wa(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,p]=a;if(typeof p=="undefined"){let c=i.splitText(a.index);i=c.splitText(s.length),t.push(c)}else{i.textContent=s,t.push(i);break}}}}return t}function Hn(e,t){t.append(...Array.from(e.childNodes))}function fr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,a=new Map;for(let s of Da(t)){let[,p]=s.textContent.match(/\((\d+)\)/);fe(`:scope > li:nth-child(${p})`,e)&&(a.set(p,Tn(p,i)),s.replaceWith(a.get(p)))}return a.size===0?S:C(()=>{let s=new g,p=s.pipe(Z(),ie(!0)),c=[];for(let[l,f]of a)c.push([R(".md-typeset",f),R(`:scope > li:nth-child(${l})`,e)]);return o.pipe(W(p)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of c)l?Hn(f,u):Hn(u,f)}),O(...[...a].map(([,l])=>kn(l,t,{target$:r}))).pipe(_(()=>s.complete()),pe())})}function $n(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return $n(t)}}function Pn(e,t){return C(()=>{let r=$n(e);return typeof r!="undefined"?fr(r,e,t):S})}var Rn=Mt(Br());var Va=0;function In(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return In(t)}}function Na(e){return ge(e).pipe(m(({width:t})=>({scrollable:St(e).width>t})),ee("scrollable"))}function jn(e,t){let{matches:r}=matchMedia("(hover)"),o=C(()=>{let n=new g,i=n.pipe(jr(1));n.subscribe(({scrollable:c})=>{c&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let a=[];if(Rn.default.isSupported()&&(e.closest(".copy")||B("content.code.copy")&&!e.closest(".no-copy"))){let c=e.closest("pre");c.id=`__code_${Va++}`;let l=Sn(c.id);c.insertBefore(l,e),B("content.tooltips")&&a.push(mt(l,{viewport$}))}let s=e.closest(".highlight");if(s instanceof HTMLElement){let c=In(s);if(typeof c!="undefined"&&(s.classList.contains("annotate")||B("content.code.annotate"))){let l=fr(c,e,t);a.push(ge(s).pipe(W(i),m(({width:f,height:u})=>f&&u),K(),v(f=>f?l:S)))}}return P(":scope > span[id]",e).length&&e.classList.add("md-code__content"),Na(e).pipe(w(c=>n.next(c)),_(()=>n.complete()),m(c=>$({ref:e},c)),Re(...a))});return B("content.lazy")?tt(e).pipe(b(n=>n),Te(1),v(()=>o)):o}function za(e,{target$:t,print$:r}){let o=!0;return O(t.pipe(m(n=>n.closest("details:not([open])")),b(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(b(n=>n||!o),w(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Fn(e,t){return C(()=>{let r=new g;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),za(e,t).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}var Un=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.flowchartTitleText{fill:var(--md-mermaid-label-fg-color)}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}.classDiagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}.statediagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityTitleText{fill:var(--md-mermaid-label-fg-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}text:not([class]):last-child{fill:var(--md-mermaid-label-fg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var Gr,Qa=0;function Ka(){return typeof mermaid=="undefined"||mermaid instanceof Element?Tt("https://unpkg.com/mermaid@11/dist/mermaid.min.js"):I(void 0)}function Wn(e){return e.classList.remove("mermaid"),Gr||(Gr=Ka().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Un,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),G(1))),Gr.subscribe(()=>co(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${Qa++}`,r=x("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),a=r.attachShadow({mode:"closed"});a.innerHTML=n,e.replaceWith(r),i==null||i(a)})),Gr.pipe(m(()=>({ref:e})))}var Dn=x("table");function Vn(e){return e.replaceWith(Dn),Dn.replaceWith(An(e)),I({ref:e})}function Ya(e){let t=e.find(r=>r.checked)||e[0];return O(...e.map(r=>h(r,"change").pipe(m(()=>R(`label[for="${r.id}"]`))))).pipe(Q(R(`label[for="${t.id}"]`)),m(r=>({active:r})))}function Nn(e,{viewport$:t,target$:r}){let o=R(".tabbed-labels",e),n=P(":scope > input",e),i=Kr("prev");e.append(i);let a=Kr("next");return e.append(a),C(()=>{let s=new g,p=s.pipe(Z(),ie(!0));z([s,ge(e),tt(e)]).pipe(W(p),Me(1,me)).subscribe({next([{active:c},l]){let f=Ve(c),{width:u}=ce(c);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let d=pr(o);(f.xd.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),z([Ne(o),ge(o)]).pipe(W(p)).subscribe(([c,l])=>{let f=St(o);i.hidden=c.x<16,a.hidden=c.x>f.width-l.width-16}),O(h(i,"click").pipe(m(()=>-1)),h(a,"click").pipe(m(()=>1))).pipe(W(p)).subscribe(c=>{let{width:l}=ce(o);o.scrollBy({left:l*c,behavior:"smooth"})}),r.pipe(W(p),b(c=>n.includes(c))).subscribe(c=>c.click()),o.classList.add("tabbed-labels--linked");for(let c of n){let l=R(`label[for="${c.id}"]`);l.replaceChildren(x("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),h(l.firstElementChild,"click").pipe(W(p),b(f=>!(f.metaKey||f.ctrlKey)),w(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return B("content.tabs.link")&&s.pipe(Ce(1),re(t)).subscribe(([{active:c},{offset:l}])=>{let f=c.innerText.trim();if(c.hasAttribute("data-md-switching"))c.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let y of P("[data-tabs]"))for(let L of P(":scope > input",y)){let X=R(`label[for="${L.id}"]`);if(X!==c&&X.innerText.trim()===f){X.setAttribute("data-md-switching",""),L.click();break}}window.scrollTo({top:e.offsetTop-u});let d=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...d])])}}),s.pipe(W(p)).subscribe(()=>{for(let c of P("audio, video",e))c.pause()}),Ya(n).pipe(w(c=>s.next(c)),_(()=>s.complete()),m(c=>$({ref:e},c)))}).pipe(Ke(se))}function zn(e,{viewport$:t,target$:r,print$:o}){return O(...P(".annotate:not(.highlight)",e).map(n=>Pn(n,{target$:r,print$:o})),...P("pre:not(.mermaid) > code",e).map(n=>jn(n,{target$:r,print$:o})),...P("pre.mermaid",e).map(n=>Wn(n)),...P("table:not([class])",e).map(n=>Vn(n)),...P("details",e).map(n=>Fn(n,{target$:r,print$:o})),...P("[data-tabs]",e).map(n=>Nn(n,{viewport$:t,target$:r})),...P("[title]",e).filter(()=>B("content.tooltips")).map(n=>mt(n,{viewport$:t})))}function Ba(e,{alert$:t}){return t.pipe(v(r=>O(I(!0),I(!1).pipe(Ge(2e3))).pipe(m(o=>({message:r,active:o})))))}function qn(e,t){let r=R(".md-typeset",e);return C(()=>{let o=new g;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),Ba(e,t).pipe(w(n=>o.next(n)),_(()=>o.complete()),m(n=>$({ref:e},n)))})}var Ga=0;function Ja(e,t){document.body.append(e);let{width:r}=ce(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=cr(t),n=typeof o!="undefined"?Ne(o):I({x:0,y:0}),i=O(et(t),$t(t)).pipe(K());return z([i,n]).pipe(m(([a,s])=>{let{x:p,y:c}=Ve(t),l=ce(t),f=t.closest("table");return f&&t.parentElement&&(p+=f.offsetLeft+t.parentElement.offsetLeft,c+=f.offsetTop+t.parentElement.offsetTop),{active:a,offset:{x:p-s.x+l.width/2-r/2,y:c-s.y+l.height+8}}}))}function Qn(e){let t=e.title;if(!t.length)return S;let r=`__tooltip_${Ga++}`,o=Rt(r,"inline"),n=R(".md-typeset",o);return n.innerHTML=t,C(()=>{let i=new g;return i.subscribe({next({offset:a}){o.style.setProperty("--md-tooltip-x",`${a.x}px`),o.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),O(i.pipe(b(({active:a})=>a)),i.pipe(_e(250),b(({active:a})=>!a))).subscribe({next({active:a}){a?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe(Me(16,me)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(pt(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?o.style.setProperty("--md-tooltip-0",`${-a}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),Ja(o,e).pipe(w(a=>i.next(a)),_(()=>i.complete()),m(a=>$({ref:e},a)))}).pipe(Ke(se))}function Xa({viewport$:e}){if(!B("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:n}})=>n),Be(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),K()),o=ze("search");return z([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),K(),v(n=>n?r:I(!1)),Q(!1))}function Kn(e,t){return C(()=>z([ge(e),Xa(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),K((r,o)=>r.height===o.height&&r.hidden===o.hidden),G(1))}function Yn(e,{header$:t,main$:r}){return C(()=>{let o=new g,n=o.pipe(Z(),ie(!0));o.pipe(ee("active"),He(t)).subscribe(([{active:a},{hidden:s}])=>{e.classList.toggle("md-header--shadow",a&&!s),e.hidden=s});let i=ue(P("[title]",e)).pipe(b(()=>B("content.tooltips")),ne(a=>Qn(a)));return r.subscribe(o),t.pipe(W(n),m(a=>$({ref:e},a)),Re(i.pipe(W(n))))})}function Za(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=ce(e);return{active:o>=n}}),ee("active"))}function Bn(e,t){return C(()=>{let r=new g;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=fe(".md-content h1");return typeof o=="undefined"?S:Za(o,t).pipe(w(n=>r.next(n)),_(()=>r.complete()),m(n=>$({ref:e},n)))})}function Gn(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),K()),n=o.pipe(v(()=>ge(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),ee("bottom"))));return z([o,n,t]).pipe(m(([i,{top:a,bottom:s},{offset:{y:p},size:{height:c}}])=>(c=Math.max(0,c-Math.max(0,a-p,i)-Math.max(0,c+p-s)),{offset:a-i,height:c,active:a-i<=p})),K((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function es(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return I(...e).pipe(ne(o=>h(o,"change").pipe(m(()=>o))),Q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),G(1))}function Jn(e){let t=P("input",e),r=x("meta",{name:"theme-color"});document.head.appendChild(r);let o=x("meta",{name:"color-scheme"});document.head.appendChild(o);let n=Pt("(prefers-color-scheme: light)");return C(()=>{let i=new g;return i.subscribe(a=>{if(document.body.setAttribute("data-md-color-switching",""),a.color.media==="(prefers-color-scheme)"){let s=matchMedia("(prefers-color-scheme: light)"),p=document.querySelector(s.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");a.color.scheme=p.getAttribute("data-md-color-scheme"),a.color.primary=p.getAttribute("data-md-color-primary"),a.color.accent=p.getAttribute("data-md-color-accent")}for(let[s,p]of Object.entries(a.color))document.body.setAttribute(`data-md-color-${s}`,p);for(let s=0;sa.key==="Enter"),re(i,(a,s)=>s)).subscribe(({index:a})=>{a=(a+1)%t.length,t[a].click(),t[a].focus()}),i.pipe(m(()=>{let a=Se("header"),s=window.getComputedStyle(a);return o.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(p=>(+p).toString(16).padStart(2,"0")).join("")})).subscribe(a=>r.content=`#${a}`),i.pipe(ve(se)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),es(t).pipe(W(n.pipe(Ce(1))),ct(),w(a=>i.next(a)),_(()=>i.complete()),m(a=>$({ref:e},a)))})}function Xn(e,{progress$:t}){return C(()=>{let r=new g;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(w(o=>r.next({value:o})),_(()=>r.complete()),m(o=>({ref:e,value:o})))})}var Jr=Mt(Br());function ts(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function Zn({alert$:e}){Jr.default.isSupported()&&new j(t=>{new Jr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||ts(R(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>Ee("clipboard.copied"))).subscribe(e)}function ei(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function rs(e,t){let r=new Map;for(let o of P("url",e)){let n=R("loc",o),i=[ei(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let a of P("[rel=alternate]",o)){let s=a.getAttribute("href");s!=null&&i.push(ei(new URL(s),t))}}return r}function ur(e){return un(new URL("sitemap.xml",e)).pipe(m(t=>rs(t,new URL(e))),de(()=>I(new Map)))}function os(e,t){if(!(e.target instanceof Element))return S;let r=e.target.closest("a");if(r===null)return S;if(r.target||e.metaKey||e.ctrlKey)return S;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),I(new URL(r.href))):S}function ti(e){let t=new Map;for(let r of P(":scope > *",e.head))t.set(r.outerHTML,r);return t}function ri(e){for(let t of P("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return I(e)}function ns(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...B("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=fe(o),i=fe(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=ti(document);for(let[o,n]of ti(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values()){let n=o.getAttribute("name");n!=="theme-color"&&n!=="color-scheme"&&o.remove()}let r=Se("container");return We(P("script",r)).pipe(v(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new j(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),S}),Z(),ie(document))}function oi({location$:e,viewport$:t,progress$:r}){let o=xe();if(location.protocol==="file:")return S;let n=ur(o.base);I(document).subscribe(ri);let i=h(document.body,"click").pipe(He(n),v(([p,c])=>os(p,c)),pe()),a=h(window,"popstate").pipe(m(ye),pe());i.pipe(re(t)).subscribe(([p,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",p)}),O(i,a).subscribe(e);let s=e.pipe(ee("pathname"),v(p=>fn(p,{progress$:r}).pipe(de(()=>(lt(p,!0),S)))),v(ri),v(ns),pe());return O(s.pipe(re(e,(p,c)=>c)),s.pipe(v(()=>e),ee("pathname"),v(()=>e),ee("hash")),e.pipe(K((p,c)=>p.pathname===c.pathname&&p.hash===c.hash),v(()=>i),w(()=>history.back()))).subscribe(p=>{var c,l;history.state!==null||!p.hash?window.scrollTo(0,(l=(c=history.state)==null?void 0:c.y)!=null?l:0):(history.scrollRestoration="auto",pn(p.hash),history.scrollRestoration="manual")}),e.subscribe(()=>{history.scrollRestoration="manual"}),h(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),t.pipe(ee("offset"),_e(100)).subscribe(({offset:p})=>{history.replaceState(p,"")}),s}var ni=Mt(qr());function ii(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,a)=>`${i}${a}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(0,ni.default)(a).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function jt(e){return e.type===1}function dr(e){return e.type===3}function ai(e,t){let r=yn(e);return O(I(location.protocol!=="file:"),ze("search")).pipe(Ae(o=>o),v(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:B("search.suggest")}}})),r}function si(e){var l;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:o,currentBaseURL:n}=e,i=(l=Xr(n))==null?void 0:l.pathname;if(i===void 0)return;let a=ss(o.pathname,i);if(a===void 0)return;let s=ps(t.keys());if(!t.has(s))return;let p=Xr(a,s);if(!p||!t.has(p.href))return;let c=Xr(a,r);if(c)return c.hash=o.hash,c.search=o.search,c}function Xr(e,t){try{return new URL(e,t)}catch(r){return}}function ss(e,t){if(e.startsWith(t))return e.slice(t.length)}function cs(e,t){let r=Math.min(e.length,t.length),o;for(o=0;oS)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:a,aliases:s})=>a===i||s.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),v(n=>h(document.body,"click").pipe(b(i=>!i.metaKey&&!i.ctrlKey),re(o),v(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&n.has(s.href)){let p=s.href;return!i.target.closest(".md-version")&&n.get(p)===a?S:(i.preventDefault(),I(new URL(p)))}}return S}),v(i=>ur(i).pipe(m(a=>{var s;return(s=si({selectedVersionSitemap:a,selectedVersionBaseURL:i,currentLocation:ye(),currentBaseURL:t.base}))!=null?s:i})))))).subscribe(n=>lt(n,!0)),z([r,o]).subscribe(([n,i])=>{R(".md-header__topic").appendChild(Cn(n,i))}),e.pipe(v(()=>o)).subscribe(n=>{var a;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let s=((a=t.version)==null?void 0:a.default)||"latest";Array.isArray(s)||(s=[s]);e:for(let p of s)for(let c of n.aliases.concat(n.version))if(new RegExp(p,"i").test(c)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let s of ae("outdated"))s.hidden=!1})}function ls(e,{worker$:t}){let{searchParams:r}=ye();r.has("q")&&(Je("search",!0),e.value=r.get("q"),e.focus(),ze("search").pipe(Ae(i=>!i)).subscribe(()=>{let i=ye();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=et(e),n=O(t.pipe(Ae(jt)),h(e,"keyup"),o).pipe(m(()=>e.value),K());return z([n,o]).pipe(m(([i,a])=>({value:i,focus:a})),G(1))}function pi(e,{worker$:t}){let r=new g,o=r.pipe(Z(),ie(!0));z([t.pipe(Ae(jt)),r],(i,a)=>a).pipe(ee("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(ee("focus")).subscribe(({focus:i})=>{i&&Je("search",i)}),h(e.form,"reset").pipe(W(o)).subscribe(()=>e.focus());let n=R("header [for=__search]");return h(n,"click").subscribe(()=>e.focus()),ls(e,{worker$:t}).pipe(w(i=>r.next(i)),_(()=>r.complete()),m(i=>$({ref:e},i)),G(1))}function li(e,{worker$:t,query$:r}){let o=new g,n=on(e.parentElement).pipe(b(Boolean)),i=e.parentElement,a=R(":scope > :first-child",e),s=R(":scope > :last-child",e);ze("search").subscribe(l=>s.setAttribute("role",l?"list":"presentation")),o.pipe(re(r),Wr(t.pipe(Ae(jt)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:a.textContent=f.length?Ee("search.result.none"):Ee("search.result.placeholder");break;case 1:a.textContent=Ee("search.result.one");break;default:let u=sr(l.length);a.textContent=Ee("search.result.other",u)}});let p=o.pipe(w(()=>s.innerHTML=""),v(({items:l})=>O(I(...l.slice(0,10)),I(...l.slice(10)).pipe(Be(4),Vr(n),v(([f])=>f)))),m(Mn),pe());return p.subscribe(l=>s.appendChild(l)),p.pipe(ne(l=>{let f=fe("details",l);return typeof f=="undefined"?S:h(f,"toggle").pipe(W(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(b(dr),m(({data:l})=>l)).pipe(w(l=>o.next(l)),_(()=>o.complete()),m(l=>$({ref:e},l)))}function ms(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=ye();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function mi(e,t){let r=new g,o=r.pipe(Z(),ie(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),h(e,"click").pipe(W(o)).subscribe(n=>n.preventDefault()),ms(e,t).pipe(w(n=>r.next(n)),_(()=>r.complete()),m(n=>$({ref:e},n)))}function fi(e,{worker$:t,keyboard$:r}){let o=new g,n=Se("search-query"),i=O(h(n,"keydown"),h(n,"focus")).pipe(ve(se),m(()=>n.value),K());return o.pipe(He(i),m(([{suggest:s},p])=>{let c=p.split(/([\s-]+)/);if(s!=null&&s.length&&c[c.length-1]){let l=s[s.length-1];l.startsWith(c[c.length-1])&&(c[c.length-1]=l)}else c.length=0;return c})).subscribe(s=>e.innerHTML=s.join("").replace(/\s/g," ")),r.pipe(b(({mode:s})=>s==="search")).subscribe(s=>{switch(s.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(b(dr),m(({data:s})=>s)).pipe(w(s=>o.next(s)),_(()=>o.complete()),m(()=>({ref:e})))}function ui(e,{index$:t,keyboard$:r}){let o=xe();try{let n=ai(o.search,t),i=Se("search-query",e),a=Se("search-result",e);h(e,"click").pipe(b(({target:p})=>p instanceof Element&&!!p.closest("a"))).subscribe(()=>Je("search",!1)),r.pipe(b(({mode:p})=>p==="search")).subscribe(p=>{let c=Ie();switch(p.type){case"Enter":if(c===i){let l=new Map;for(let f of P(":first-child [href]",a)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,d])=>d-u);f.click()}p.claim()}break;case"Escape":case"Tab":Je("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof c=="undefined")i.focus();else{let l=[i,...P(":not(details) > [href], summary, details[open] [href]",a)],f=Math.max(0,(Math.max(0,l.indexOf(c))+l.length+(p.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}p.claim();break;default:i!==Ie()&&i.focus()}}),r.pipe(b(({mode:p})=>p==="global")).subscribe(p=>{switch(p.type){case"f":case"s":case"/":i.focus(),i.select(),p.claim();break}});let s=pi(i,{worker$:n});return O(s,li(a,{worker$:n,query$:s})).pipe(Re(...ae("search-share",e).map(p=>mi(p,{query$:s})),...ae("search-suggest",e).map(p=>fi(p,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,Ye}}function di(e,{index$:t,location$:r}){return z([t,r.pipe(Q(ye()),b(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>ii(o.config)(n.searchParams.get("h"))),m(o=>{var a;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let p=s.textContent,c=o(p);c.length>p.length&&n.set(s,c)}for(let[s,p]of n){let{childNodes:c}=x("span",null,p);s.replaceWith(...Array.from(c))}return{ref:e,nodes:n}}))}function fs(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return z([r,t]).pipe(m(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(n,Math.max(0,s-i))-n,{height:a,locked:s>=i+n})),K((i,a)=>i.height===a.height&&i.locked===a.locked))}function Zr(e,o){var n=o,{header$:t}=n,r=so(n,["header$"]);let i=R(".md-sidebar__scrollwrap",e),{y:a}=Ve(i);return C(()=>{let s=new g,p=s.pipe(Z(),ie(!0)),c=s.pipe(Me(0,me));return c.pipe(re(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),c.pipe(Ae()).subscribe(()=>{for(let l of P(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=ce(f);f.scrollTo({top:u-d/2})}}}),ue(P("label[tabindex]",e)).pipe(ne(l=>h(l,"click").pipe(ve(se),m(()=>l),W(p)))).subscribe(l=>{let f=R(`[id="${l.htmlFor}"]`);R(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),fs(e,r).pipe(w(l=>s.next(l)),_(()=>s.complete()),m(l=>$({ref:e},l)))})}function hi(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return st(je(`${r}/releases/latest`).pipe(de(()=>S),m(o=>({version:o.tag_name})),De({})),je(r).pipe(de(()=>S),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),De({}))).pipe(m(([o,n])=>$($({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(o=>({repositories:o.public_repos})),De({}))}}function bi(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return st(je(`${r}/releases/permalink/latest`).pipe(de(()=>S),m(({tag_name:o})=>({version:o})),De({})),je(r).pipe(de(()=>S),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),De({}))).pipe(m(([o,n])=>$($({},o),n)))}function vi(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return hi(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return bi(r,o)}return S}var us;function ds(e){return us||(us=C(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(ae("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return S}return vi(e.href).pipe(w(o=>__md_set("__source",o,sessionStorage)))}).pipe(de(()=>S),b(t=>Object.keys(t).length>0),m(t=>({facts:t})),G(1)))}function gi(e){let t=R(":scope > :last-child",e);return C(()=>{let r=new g;return r.subscribe(({facts:o})=>{t.appendChild(_n(o)),t.classList.add("md-source__repository--active")}),ds(e).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}function hs(e,{viewport$:t,header$:r}){return ge(document.body).pipe(v(()=>mr(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),ee("hidden"))}function yi(e,t){return C(()=>{let r=new g;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(B("navigation.tabs.sticky")?I({hidden:!1}):hs(e,t)).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}function bs(e,{viewport$:t,header$:r}){let o=new Map,n=P(".md-nav__link",e);for(let s of n){let p=decodeURIComponent(s.hash.substring(1)),c=fe(`[id="${p}"]`);typeof c!="undefined"&&o.set(s,c)}let i=r.pipe(ee("height"),m(({height:s})=>{let p=Se("main"),c=R(":scope > :first-child",p);return s+.8*(c.offsetTop-p.offsetTop)}),pe());return ge(document.body).pipe(ee("height"),v(s=>C(()=>{let p=[];return I([...o].reduce((c,[l,f])=>{for(;p.length&&o.get(p[p.length-1]).tagName>=f.tagName;)p.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let d=f.offsetParent;for(;d;d=d.offsetParent)u+=d.offsetTop;return c.set([...p=[...p,l]].reverse(),u)},new Map))}).pipe(m(p=>new Map([...p].sort(([,c],[,l])=>c-l))),He(i),v(([p,c])=>t.pipe(Fr(([l,f],{offset:{y:u},size:d})=>{let y=u+d.height>=Math.floor(s.height);for(;f.length;){let[,L]=f[0];if(L-c=u&&!y)f=[l.pop(),...f];else break}return[l,f]},[[],[...p]]),K((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([s,p])=>({prev:s.map(([c])=>c),next:p.map(([c])=>c)})),Q({prev:[],next:[]}),Be(2,1),m(([s,p])=>s.prev.length{let i=new g,a=i.pipe(Z(),ie(!0));if(i.subscribe(({prev:s,next:p})=>{for(let[c]of p)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[l]]of s.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",c===s.length-1)}),B("toc.follow")){let s=O(t.pipe(_e(1),m(()=>{})),t.pipe(_e(250),m(()=>"smooth")));i.pipe(b(({prev:p})=>p.length>0),He(o.pipe(ve(se))),re(s)).subscribe(([[{prev:p}],c])=>{let[l]=p[p.length-1];if(l.offsetHeight){let f=cr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=ce(f);f.scrollTo({top:u-d/2,behavior:c})}}})}return B("navigation.tracking")&&t.pipe(W(a),ee("offset"),_e(250),Ce(1),W(n.pipe(Ce(1))),ct({delay:250}),re(i)).subscribe(([,{prev:s}])=>{let p=ye(),c=s[s.length-1];if(c&&c.length){let[l]=c,{hash:f}=new URL(l.href);p.hash!==f&&(p.hash=f,history.replaceState({},"",`${p}`))}else p.hash="",history.replaceState({},"",`${p}`)}),bs(e,{viewport$:t,header$:r}).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))})}function vs(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:a}})=>a),Be(2,1),m(([a,s])=>a>s&&s>0),K()),i=r.pipe(m(({active:a})=>a));return z([i,n]).pipe(m(([a,s])=>!(a&&s)),K(),W(o.pipe(Ce(1))),ie(!0),ct({delay:250}),m(a=>({hidden:a})))}function Ei(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new g,a=i.pipe(Z(),ie(!0));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(W(a),ee("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),h(e,"click").subscribe(s=>{s.preventDefault(),window.scrollTo({top:0})}),vs(e,{viewport$:t,main$:o,target$:n}).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))}function wi({document$:e,viewport$:t}){e.pipe(v(()=>P(".md-ellipsis")),ne(r=>tt(r).pipe(W(e.pipe(Ce(1))),b(o=>o),m(()=>r),Te(1))),b(r=>r.offsetWidth{let o=r.innerText,n=r.closest("a")||r;return n.title=o,B("content.tooltips")?mt(n,{viewport$:t}).pipe(W(e.pipe(Ce(1))),_(()=>n.removeAttribute("title"))):S})).subscribe(),B("content.tooltips")&&e.pipe(v(()=>P(".md-status")),ne(r=>mt(r,{viewport$:t}))).subscribe()}function Ti({document$:e,tablet$:t}){e.pipe(v(()=>P(".md-toggle--indeterminate")),w(r=>{r.indeterminate=!0,r.checked=!1}),ne(r=>h(r,"change").pipe(Dr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),re(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function gs(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Si({document$:e}){e.pipe(v(()=>P("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),b(gs),ne(t=>h(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Oi({viewport$:e,tablet$:t}){z([ze("search"),t]).pipe(m(([r,o])=>r&&!o),v(r=>I(r).pipe(Ge(r?400:100))),re(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function ys(){return location.protocol==="file:"?Tt(`${new URL("search/search_index.js",eo.base)}`).pipe(m(()=>__index),G(1)):je(new URL("search/search_index.json",eo.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var ot=Go(),Ut=sn(),Lt=ln(Ut),to=an(),Oe=gn(),hr=Pt("(min-width: 960px)"),Mi=Pt("(min-width: 1220px)"),_i=mn(),eo=xe(),Ai=document.forms.namedItem("search")?ys():Ye,ro=new g;Zn({alert$:ro});var oo=new g;B("navigation.instant")&&oi({location$:Ut,viewport$:Oe,progress$:oo}).subscribe(ot);var Li;((Li=eo.version)==null?void 0:Li.provider)==="mike"&&ci({document$:ot});O(Ut,Lt).pipe(Ge(125)).subscribe(()=>{Je("drawer",!1),Je("search",!1)});to.pipe(b(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=fe("link[rel=prev]");typeof t!="undefined"&<(t);break;case"n":case".":let r=fe("link[rel=next]");typeof r!="undefined"&<(r);break;case"Enter":let o=Ie();o instanceof HTMLLabelElement&&o.click()}});wi({viewport$:Oe,document$:ot});Ti({document$:ot,tablet$:hr});Si({document$:ot});Oi({viewport$:Oe,tablet$:hr});var rt=Kn(Se("header"),{viewport$:Oe}),Ft=ot.pipe(m(()=>Se("main")),v(e=>Gn(e,{viewport$:Oe,header$:rt})),G(1)),xs=O(...ae("consent").map(e=>En(e,{target$:Lt})),...ae("dialog").map(e=>qn(e,{alert$:ro})),...ae("palette").map(e=>Jn(e)),...ae("progress").map(e=>Xn(e,{progress$:oo})),...ae("search").map(e=>ui(e,{index$:Ai,keyboard$:to})),...ae("source").map(e=>gi(e))),Es=C(()=>O(...ae("announce").map(e=>xn(e)),...ae("content").map(e=>zn(e,{viewport$:Oe,target$:Lt,print$:_i})),...ae("content").map(e=>B("search.highlight")?di(e,{index$:Ai,location$:Ut}):S),...ae("header").map(e=>Yn(e,{viewport$:Oe,header$:rt,main$:Ft})),...ae("header-title").map(e=>Bn(e,{viewport$:Oe,header$:rt})),...ae("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Nr(Mi,()=>Zr(e,{viewport$:Oe,header$:rt,main$:Ft})):Nr(hr,()=>Zr(e,{viewport$:Oe,header$:rt,main$:Ft}))),...ae("tabs").map(e=>yi(e,{viewport$:Oe,header$:rt})),...ae("toc").map(e=>xi(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Lt})),...ae("top").map(e=>Ei(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Lt})))),Ci=ot.pipe(v(()=>Es),Re(xs),G(1));Ci.subscribe();window.document$=ot;window.location$=Ut;window.target$=Lt;window.keyboard$=to;window.viewport$=Oe;window.tablet$=hr;window.screen$=Mi;window.print$=_i;window.alert$=ro;window.progress$=oo;window.component$=Ci;})(); +//# sourceMappingURL=bundle.60a45f97.min.js.map + diff --git a/assets/javascripts/bundle.60a45f97.min.js.map b/assets/javascripts/bundle.60a45f97.min.js.map new file mode 100644 index 00000000..7edbc6f4 --- /dev/null +++ b/assets/javascripts/bundle.60a45f97.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/escape-html/index.js", "node_modules/clipboard/dist/clipboard.js", "src/templates/assets/javascripts/bundle.ts", "node_modules/tslib/tslib.es6.mjs", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/BehaviorSubject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/QueueAction.ts", "node_modules/rxjs/src/internal/scheduler/QueueScheduler.ts", "node_modules/rxjs/src/internal/scheduler/queue.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/EmptyError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/debounce.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/throwIfEmpty.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/first.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/document/index.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/hover/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/offset/_/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/browser/keyboard/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/location/hash/index.ts", "src/templates/assets/javascripts/browser/media/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/templates/assets/javascripts/browser/viewport/offset/index.ts", "src/templates/assets/javascripts/browser/viewport/size/index.ts", "src/templates/assets/javascripts/browser/viewport/_/index.ts", "src/templates/assets/javascripts/browser/viewport/at/index.ts", "src/templates/assets/javascripts/browser/worker/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/components/_/index.ts", "src/templates/assets/javascripts/components/announce/index.ts", "src/templates/assets/javascripts/components/consent/index.ts", "src/templates/assets/javascripts/templates/tooltip/index.tsx", "src/templates/assets/javascripts/templates/annotation/index.tsx", "src/templates/assets/javascripts/templates/clipboard/index.tsx", "src/templates/assets/javascripts/templates/search/index.tsx", "src/templates/assets/javascripts/templates/source/index.tsx", "src/templates/assets/javascripts/templates/tabbed/index.tsx", "src/templates/assets/javascripts/templates/table/index.tsx", "src/templates/assets/javascripts/templates/version/index.tsx", "src/templates/assets/javascripts/components/tooltip2/index.ts", "src/templates/assets/javascripts/components/content/annotation/_/index.ts", "src/templates/assets/javascripts/components/content/annotation/list/index.ts", "src/templates/assets/javascripts/components/content/annotation/block/index.ts", "src/templates/assets/javascripts/components/content/code/_/index.ts", "src/templates/assets/javascripts/components/content/details/index.ts", "src/templates/assets/javascripts/components/content/mermaid/index.css", "src/templates/assets/javascripts/components/content/mermaid/index.ts", "src/templates/assets/javascripts/components/content/table/index.ts", "src/templates/assets/javascripts/components/content/tabs/index.ts", "src/templates/assets/javascripts/components/content/_/index.ts", "src/templates/assets/javascripts/components/dialog/index.ts", "src/templates/assets/javascripts/components/tooltip/index.ts", "src/templates/assets/javascripts/components/header/_/index.ts", "src/templates/assets/javascripts/components/header/title/index.ts", "src/templates/assets/javascripts/components/main/index.ts", "src/templates/assets/javascripts/components/palette/index.ts", "src/templates/assets/javascripts/components/progress/index.ts", "src/templates/assets/javascripts/integrations/clipboard/index.ts", "src/templates/assets/javascripts/integrations/sitemap/index.ts", "src/templates/assets/javascripts/integrations/instant/index.ts", "src/templates/assets/javascripts/integrations/search/highlighter/index.ts", "src/templates/assets/javascripts/integrations/search/worker/message/index.ts", "src/templates/assets/javascripts/integrations/search/worker/_/index.ts", "src/templates/assets/javascripts/integrations/version/findurl/index.ts", "src/templates/assets/javascripts/integrations/version/index.ts", "src/templates/assets/javascripts/components/search/query/index.ts", "src/templates/assets/javascripts/components/search/result/index.ts", "src/templates/assets/javascripts/components/search/share/index.ts", "src/templates/assets/javascripts/components/search/suggest/index.ts", "src/templates/assets/javascripts/components/search/_/index.ts", "src/templates/assets/javascripts/components/search/highlight/index.ts", "src/templates/assets/javascripts/components/sidebar/index.ts", "src/templates/assets/javascripts/components/source/facts/github/index.ts", "src/templates/assets/javascripts/components/source/facts/gitlab/index.ts", "src/templates/assets/javascripts/components/source/facts/_/index.ts", "src/templates/assets/javascripts/components/source/_/index.ts", "src/templates/assets/javascripts/components/tabs/index.ts", "src/templates/assets/javascripts/components/toc/index.ts", "src/templates/assets/javascripts/components/top/index.ts", "src/templates/assets/javascripts/patches/ellipsis/index.ts", "src/templates/assets/javascripts/patches/indeterminate/index.ts", "src/templates/assets/javascripts/patches/scrollfix/index.ts", "src/templates/assets/javascripts/patches/scrolllock/index.ts", "src/templates/assets/javascripts/polyfills/index.ts"], + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*\n * Copyright (c) 2016-2025 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"focus-visible\"\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getActiveElement,\n getOptionalElement,\n requestJSON,\n setLocation,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchScript,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountProgress,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantNavigation,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchEllipsis,\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Functions - @todo refactor\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch search index\n *\n * @returns Search index observable\n */\nfunction fetchSearchIndex(): Observable {\n if (location.protocol === \"file:\") {\n return watchScript(\n `${new URL(\"search/search_index.js\", config.base)}`\n )\n .pipe(\n // @ts-ignore - @todo fix typings\n map(() => __index),\n shareReplay(1)\n )\n } else {\n return requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget(location$)\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? fetchSearchIndex()\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up progress indicator */\nconst progress$ = new Subject()\n\n/* Set up instant navigation, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantNavigation({ location$, viewport$, progress$ })\n .subscribe(document$)\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"link[rel=prev]\")\n if (typeof prev !== \"undefined\")\n setLocation(prev)\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"link[rel=next]\")\n if (typeof next !== \"undefined\")\n setLocation(next)\n break\n\n /* Expand navigation, see https://bit.ly/3ZjG5io */\n case \"Enter\":\n const active = getActiveElement()\n if (active instanceof HTMLLabelElement)\n active.click()\n }\n })\n\n/* Set up patches */\npatchEllipsis({ viewport$, document$ })\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Progress bar */\n ...getComponentElements(\"progress\")\n .map(el => mountProgress(el, { progress$ })),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, {\n viewport$, header$, main$, target$\n })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.progress$ = progress$ /* Progress indicator subject */\nwindow.component$ = component$ /* Component observable */\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver implements Observer {\n constructor(private partialObserver: Partial>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe(fn1: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction, fn3: UnaryFunction): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction,\n ...fns: UnaryFunction[]\n): UnaryFunction;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array>): UnaryFunction {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray(fns: Array>): UnaryFunction {\n if (fns.length === 0) {\n return identity as UnaryFunction;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate(\n init: (liftedSource: Observable, subscriber: Subscriber) => (() => void) | void\n): OperatorFunction {\n return (source: Observable) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber, liftedSource: Observable) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\n\n/**\n * A variant of Subject that requires an initial value and emits its current\n * value whenever it is subscribed to.\n *\n * @class BehaviorSubject\n */\nexport class BehaviorSubject extends Subject {\n constructor(private _value: T) {\n super();\n }\n\n get value(): T {\n return this.getValue();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n\n getValue(): T {\n const { hasError, thrownError, _value } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n\n next(value: T): void {\n super.next((this._value = value));\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction extends Action {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { QueueScheduler } from './QueueScheduler';\nimport { SchedulerAction } from '../types';\nimport { TimerHandle } from './timerHandle';\n\nexport class QueueAction extends AsyncAction {\n constructor(protected scheduler: QueueScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (delay > 0) {\n return super.schedule(state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n }\n\n public execute(state: T, delay: number): any {\n return delay > 0 || this.closed ? super.execute(state, delay) : this._execute(state, delay);\n }\n\n protected requestAsyncId(scheduler: QueueScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n\n // Otherwise flush the scheduler starting with this action.\n scheduler.flush(this);\n\n // HACK: In the past, this was returning `void`. However, `void` isn't a valid\n // `TimerHandle`, and generally the return value here isn't really used. So the\n // compromise is to return `0` which is both \"falsy\" and a valid `TimerHandle`,\n // as opposed to refactoring every other instanceo of `requestAsyncId`.\n return 0;\n }\n}\n", "import { AsyncScheduler } from './AsyncScheduler';\n\nexport class QueueScheduler extends AsyncScheduler {\n}\n", "import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\n\n/**\n *\n * Queue Scheduler\n *\n * Put every next task on a queue, instead of executing it immediately\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * ## Examples\n * Schedule recursively first, then do something\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(() => {\n * queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n * console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n * ```\n *\n * Reschedule itself recursively\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(function(state) {\n * if (state !== 0) {\n * console.log('before', state);\n * this.schedule(state - 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * console.log('after', state);\n * }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n * ```\n */\n\nexport const queueScheduler = new QueueScheduler(QueueAction);\n\n/**\n * @deprecated Renamed to {@link queueScheduler}. Will be removed in v8.\n */\nexport const queue = queueScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an