About the examples

The following examples only cover open channel flow problems using the Gauckler-Manning-Strickler equation (commonly called Manning’s equation) [Wikimedia] to calculate the missing parameters and the critical depth.

Other examples using the Gauckler-Manning-Strickler equation can be found in Open Channel Flow Examples using the Gauckler-Manning-Strickler equation written by the author.


Examples

rectangular cross-section

install.load::load_package("iemisc", "iemiscdata", "rivr")
# load needed packages using the load_package function from the install.load
# package (it is assumed that you have already installed these packages)


# 1) Practice Problem 14.10 from Mott (page 391-392)

# What is the Q (discharge) for this cross-section?

# See nchannel in iemiscdata for the Manning's n table that the following example
# uses Use the normal Manning's n value for Natural streams - minor streams (top
# width at floodstage < 100 ft), Lined or Constructed Channels, Concrete, and
# unfinished.

# The 1st heading is 'Manning's n for Channels' The 2nd heading is 'Natural
# streams - minor streams (top width at floodstage < 100 ft)' The 3rd heading is
# 'Lined or Constructed Channels,' The 4th heading is 'Concrete' The 5th heading
# is 'unfinished'


data(nchannel)
# load the data set nchannel from iemiscdata

nlocation <- grep("unfinished", nchannel$"Type of Channel and Description")
# search for the term 'unfinished' in the 'Type of Channel and Description'
# column in the nchannel data set

nlocation
## [1] 72
n <- nchannel[nlocation, 3]  # 3 for column 3 - Normal n
# the value of n will be found in column 3 at the location specified by nlocation

n
## [1] 0.017
Q <- Manningrect(b = 3.5, y = 2, Sf = 0.1/100, n = n, units = "SI")
## 
## Flow is NOT in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is not acceptable to use.
## 
## 
## This is subcritical flow.
# b = 3.5 m, y = 2 m, Sf = 0.1 percent m/m, n = 0.017, units = SI units This will
# solve for Q since it is missing and Q will be in m^3/s

# Note: Q (discharge), velocity (V), area (A), wetted perimeter (P), R (hydraulic
# radius), Re (Reynolds number), and Fr (Froude number) are returned as an R list

Q
## $Q
## [1] 12.4358
## 
## $V
## [1] 1.776542
## 
## $A
## [1] 7
## 
## $P
## [1] 7.5
## 
## $R
## [1] 0.9333333
## 
## $B
## [1] 3.5
## 
## $D
## [1] 2
## 
## $Re
## [1] 1651.825
## 
## $Fr
## [1] 0.401144
# What is the critical depth for this given discharge?

critical_depth(Q$Q, 2, 9.80665, 3.5, 0)
## [1] 1.087836
# 2) Problem 1 from Hauser (page 88)

# What is the Sf (slope) for this cross-section?

Sf <- Manningrect(Q = 6.25 * 8 * 14.9, b = 8, y = 6.25, n = 0.01, units = "Eng")
## 
## Flow IS in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is acceptable to use.
## 
## 
## This is supercritical flow.
# Q = 6.25 ft * 8 ft * 14.9 ft/sec, b = 8 ft, y = 6.25 ft, n = 0.01, units = Eng
# units This will solve for Sf since it is missing and Sf will be in ft/ft

# Note: Sf (slope), velocity (V), area (A), wetted perimeter (P), R (hydraulic
# radius), Re (Reynolds number), and Fr (Froude number) are returned as an R list

Sf
## $Sf
## [1] 0.003062629
## 
## $V
## [1] 14.9
## 
## $A
## [1] 50
## 
## $P
## [1] 20.5
## 
## $R
## [1] 2.439024
## 
## $B
## [1] 8
## 
## $D
## [1] 6.25
## 
## $Re
## [1] 3233750
## 
## $Fr
## [1] 1.050737
# What is the critical depth for this given discharge?

critical_depth(6.25 * 8 * 14.9, 6.25, 9.80665 * (3937/1200), 8, 0)
## [1] 6.459654



trapezoidal cross-section

install.load::load_package("iemisc", "iemiscdata", "rivr")
# load needed packages using the load_package function from the install.load
# package (it is assumed that you have already installed these packages)


# 3) Practice Problem 14.17 from Mott (page 392)

# What is the y (flow depth) for this cross-section?

# See nchannel in iemiscdata for the Manning's n table that the following example
# uses Use the normal Manning's n value for Natural streams - minor streams (top
# width at floodstage < 100 ft), Lined or Constructed Channels, Concrete, and
# unfinished.

# The 1st heading is 'Manning's n for Channels' The 2nd heading is 'Natural
# streams - minor streams (top width at floodstage < 100 ft)' The 3rd heading is
# 'Lined or Constructed Channels,' The 4th heading is 'Concrete' The 5th heading
# is 'unfinished'

data(nchannel)
# load the data set nchannel from iemiscdata

nlocation <- grep("unfinished", nchannel$"Type of Channel and Description")
# search for the term 'unfinished' in the 'Type of Channel and Description'
# column in the nchannel data set

nlocation
## [1] 72
n <- nchannel[nlocation, 3]  # 3 for column 3 - Normal n
# the value of n will be found in column 3 at the location specified by nlocation

n
## [1] 0.017
y <- Manningtrap(Q = 15, b = 3, m = 1/tand(40), Sf = 0.1/100, n = n, units = "SI")
## 
## Flow is NOT in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is not acceptable to use.
## 
## 
## This is subcritical flow.
# Q = 15, b = 3 m, m = 1 / tand(40), Sf = 0.1 percent m/m, n = 0.017, units = SI
# units This will solve for y since it is missing and y will be in m

# Note: y (flow depth), velocity (V), area (A), wetted perimeter (P), R
# (hydraulic radius), Re (Reynolds number), and Fr (Froude number) are returned
# as an R list

y
## $y
## [1] 1.631874
## 
## $V
## [1] 1.858903
## 
## $A
## [1] 8.069276
## 
## $P
## [1] 8.07749
## 
## $R
## [1] 0.9989831
## 
## $B
## [1] 6.889583
## 
## $D
## [1] 1.171228
## 
## $Re
## [1] 1849.978
## 
## $Fr
## [1] 0.5484986
# What is the critical depth for this given discharge?

critical_depth(15, y$y, 9.80665, 3, 1/tand(40))
## [1] 1.16226
# 4) Example 2 from FHWA

# What is the y (flow depth) for this cross-section?

y <- Manningtrap(Q = 150, b = 4, m = 2, Sf = 2/100, n = 0.03, units = "Eng")
## 
## Flow IS in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is acceptable to use.
## 
## 
## This is supercritical flow.
# Q = 150 cfs, b = 4 ft, m = 2, Sf = 2/100 ft/ft, n = 0.030, units = Eng units
# This will solve for y since it is missing and y will be in ft

# Note: y (flow depth), velocity (V), area (A), wetted perimeter (P), R
# (hydraulic radius), Re (Reynolds number), and Fr (Froude number) are returned
# as an R list

y
## $y
## [1] 2.152071
## 
## $V
## [1] 8.393437
## 
## $A
## [1] 17.87111
## 
## $P
## [1] 13.62436
## 
## $R
## [1] 1.311703
## 
## $B
## [1] 12.60828
## 
## $D
## [1] 1.41741
## 
## $Re
## [1] 979668.9
## 
## $Fr
## [1] 1.24291
# What is the critical depth for this given discharge?

critical_depth(150, y$y, 9.80665 * (3937/1200), 4, 2)
## [1] 2.40582



triangular cross-section

install.load::load_package("iemisc", "rivr")
# load needed packages using the load_package function from the install.load
# package (it is assumed that you have already installed these packages)


# 5) Problem 17 from Hauser (page 89)

# What is the Q (discharge) for this cross-section?

Q <- Manningtri(y = 6, m = 4, Sf = 0.006, n = 0.025, units = "Eng")
## 
## Flow IS in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is acceptable to use.
## 
## 
## This is subcritical flow.
# y = 6 ft, m = 4 ft/ft, Sf = 0.006 ft/ft, n = 0.025, units = Eng units This will
# solve for Q since it is missing and Q will be in ft^3/s

# Note: Q (discharge), velocity (V), area (A), wetted perimeter (P), R (hydraulic
# radius), Re (Reynolds number), and Fr (Froude number) are returned as an R list

Q
## $Q
## [1] 1351.443
## 
## $V
## [1] 9.385019
## 
## $A
## [1] 144
## 
## $P
## [1] 49.47727
## 
## $R
## [1] 2.910428
## 
## $B
## [1] 48
## 
## $D
## [1] 3
## 
## $Re
## [1] 2430502
## 
## $Fr
## [1] 0.9552611
# What is the critical depth for this given discharge?

critical_depth(Q$Q, 6, 9.80665 * (3937/1200), 0, 4)
## [1] 5.89115
# 6) Example 2 from FHWA

# What is the y (flow depth) for this cross-section?

y <- Manningtri(Q = 150, m = 2, Sf = 2/100, n = 0.03, units = "Eng")
## 
## Flow IS in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is acceptable to use.
## 
## 
## This is supercritical flow.
# Q = 150 cfs, m = 2, Sf = 2/100 ft/ft, n = 0.030, units = Eng units This will
# solve for y since it is missing and y will be in ft

# Note: y (flow depth), velocity (V), area (A), wetted perimeter (P), R
# (hydraulic radius), Re (Reynolds number), and Fr (Froude number) are returned
# as an R list

y
## $y
## [1] 2.975079
## 
## $V
## [1] 8.473527
## 
## $A
## [1] 17.70219
## 
## $P
## [1] 13.30496
## 
## $R
## [1] 1.330496
## 
## $B
## [1] 11.90032
## 
## $D
## [1] 1.48754
## 
## $Re
## [1] 1003187
## 
## $Fr
## [1] 1.224835
# What is the critical depth for this given discharge?

critical_depth(150, y$y, 9.80665 * (3937/1200), 4, 2)
## [1] 2.40582



circular cross-section

library(iemisc)

# 7) Modified Practice Problem 14.32/14.34 from Mott (page 393)

# What is the Q (discharge) for this cross-section?

Q <- Manningcirc(d = 375/1000, y = 225/1000, Sf = 0.12/100, n = 0.015, units = "SI")
## 
## Flow is NOT in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is not acceptable to use.
## 
## 
## This is subcritical flow.
# d = 375/1000 m, y = 225/1000 m, Sf = 0.12/100 m/m, n = 0.015, units = SI units
# This will solve for Q since it is missing and Q will be in m^3/s

# Note: Q (discharge), velocity (V), area (A), wetted perimeter (P), R (hydraulic radius), Re (Reynolds number), and Fr (Froude number) are returned as an R list

Q
## $Q
## [1] 0.03536432
## 
## $V
## [1] 0.5111079
## 
## $A
## [1] 0.06919149
## 
## $P
## [1] 0.6645578
## 
## $R
## [1] 0.1041166
## 
## $Re
## [1] 53.01321
## 
## $Fr
## [1] 0.3761052
# 8) Problem 18 from Hauser (page 89)

# What is the Q (discharge) for this cross-section?

Q <- Manningcirc(d = 10/12, y = 3/12, Sf = 2/100, n = 0.025, units = "Eng")
## 
## Flow IS in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is acceptable to use.
## 
## 
## This is subcritical flow.
# d = 10/12 ft, y = 3/12 ft, Sf = 2/100 ft/ft, n = 0.025, units = Eng units
# This will solve for Q since it is missing and Q will be in ft

# Note: Q (discharge), velocity (V), area (A), wetted perimeter (P), R (hydraulic radius), Re (Reynolds number), and Fr (Froude number) are returned as an R list

Q
## $Q
## [1] 0.3155138
## 
## $V
## [1] 2.292697
## 
## $A
## [1] 0.1376169
## 
## $P
## [1] 0.9660662
## 
## $R
## [1] 0.1424508
## 
## $Re
## [1] 29061.33
## 
## $Fr
## [1] 0.9522204



parabolic cross-section

library(iemisc)

# 9) Modified Exercise 4.3 from Sturm (page 153)

# What is the B1 ("bank-full width") for this cross-section?

B1 <- Manningpara(Q = 32.2, y = 8, y1 = 5.1, Sf = 0.0092, n = 0.025, units = "SI")
## 
## Flow is NOT in the rough turbulent zone so the Gauckler-Manning-Strickler equation
##  is not acceptable to use.
## 
## 
## This is subcritical flow.
# Q = 32.2 m^3/s, y = 8 m, y1 = 5.1 m, Sf = 0.0092 m/m, n = 0.025, units = SI units
# This will solve for B1 since it is missing and B1 will be in m

# Note: B1 ("bank-full width"), velocity (V), area (A), wetted perimeter (P), R (hydraulic radius), Re (Reynolds number), and Fr (Froude number) are returned as an R list

B1
## $B1
## [1] 0.982228
## 
## $V
## [1] 4.907778
## 
## $A
## [1] 6.561014
## 
## $P
## [1] 16.10527
## 
## $R
## [1] 0.407383
## 
## $B
## [1] 1.23019
## 
## $D
## [1] 5.333333
## 
## $Re
## [1] 1991.771
## 
## $Fr
## [1] 0.6786177



Works Cited

Barbara A. Hauser, Practical Hydraulics Handbook, Second Edition, Boca Raton, Florida: CRC Press, Inc., 1996, page 88-89.

Robert L. Mott and Joseph A. Untener, Applied Fluid Mechanics, Seventh Edition, New York City, New York: Pearson, 2015, page 392-393.

Terry W. Sturm, Open Channel Hydraulics, 2nd Edition, New York City, New York: The McGraw-Hill Companies, Inc., 2010, page 153.

U.S. Department of Transportation Federal Highway Administration (FHWA), “Design Charts for Open-Channel Flow HDS 3”, August 1961, https://www.fhwa.dot.gov/engineering/hydraulics/pubs/hds3.pdf.

Wikimedia Foundation, Inc. Wikipedia, 5 May 2016, “Gravitational acceleration”, https://en.wikipedia.org/wiki/Gravitational_acceleration.

Wikimedia Foundation, Inc. Wikipedia, 26 November 2015, “Manning formula”, https://en.wikipedia.org/wiki/Manning_formula.

LS0tCnRpdGxlOiAiaWVtaXNjOiBPcGVuIENoYW5uZWwgRmxvdyBFeGFtcGxlcyBpbnZvbHZpbmcgR2VvbWV0cmljIFNoYXBlcyIKYXV0aG9yOiAiSXJ1Y2thIEVtYnJ5IgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBybWFya2Rvd246Omh0bWxfZG9jdW1lbnQ6CiAgICBoaWdobGlnaHQ6IGthdGUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgY29kZV9kb3dubG9hZDogVFJVRQp2aWduZXR0ZTogPgogICVcVmlnbmV0dGVJbmRleEVudHJ5e2llbWlzYyBvcGVuIGNoYW5uZWwgZmxvdyBleGFtcGxlcyBHYXVja2xlci1NYW5uaW5nLVN0cmlja2xlciBlcXVhdGlvbn0KICAlXFZpZ25ldHRlRW5naW5le2tuaXRyOjpybWFya2Rvd259CiAgXHVzZXBhY2thZ2VbdXRmOF17aW5wdXRlbmN9Ci0tLQoKPGJyIC8+CjxiciAvPgoKIyBBYm91dCB0aGUgZXhhbXBsZXMKClRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgb25seSBjb3ZlciBvcGVuIGNoYW5uZWwgZmxvdyBwcm9ibGVtcyB1c2luZyB0aGUgR2F1Y2tsZXItTWFubmluZy1TdHJpY2tsZXIgZXF1YXRpb24gKGNvbW1vbmx5IGNhbGxlZCBNYW5uaW5nJ3MgZXF1YXRpb24pIFtXaWtpbWVkaWFdIHRvIGNhbGN1bGF0ZSB0aGUgbWlzc2luZyBwYXJhbWV0ZXJzIGFuZCB0aGUgY3JpdGljYWwgZGVwdGguCgpPdGhlciBleGFtcGxlcyB1c2luZyB0aGUgR2F1Y2tsZXItTWFubmluZy1TdHJpY2tsZXIgZXF1YXRpb24gY2FuIGJlIGZvdW5kIGluIFtPcGVuIENoYW5uZWwgRmxvdyBFeGFtcGxlcyB1c2luZyB0aGUgR2F1Y2tsZXItTWFubmluZy1TdHJpY2tsZXIgZXF1YXRpb25dKGh0dHBzOi8vd3d3LmVjb2Njcy5jb20vUl9FeGFtcGxlcy9vcGVuX2NoYW5uZWxfZmxvdy5odG1sKSB3cml0dGVuIGJ5IHRoZSBhdXRob3IuCgo8YnIgLz4KCiMgRXhhbXBsZXMKIyMgcmVjdGFuZ3VsYXIgY3Jvc3Mtc2VjdGlvbgoKYGBge3IsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB0aWR5ID0gVFJVRX0KaW5zdGFsbC5sb2FkOjpsb2FkX3BhY2thZ2UoImllbWlzYyIsICJpZW1pc2NkYXRhIiwgInJpdnIiKQojIGxvYWQgbmVlZGVkIHBhY2thZ2VzIHVzaW5nIHRoZSBsb2FkX3BhY2thZ2UgZnVuY3Rpb24gZnJvbSB0aGUgaW5zdGFsbC5sb2FkIHBhY2thZ2UgKGl0IGlzIGFzc3VtZWQgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCB0aGVzZSBwYWNrYWdlcykKCgojIDEpIFByYWN0aWNlIFByb2JsZW0gMTQuMTAgZnJvbSBNb3R0IChwYWdlIDM5MS0zOTIpCgojIFdoYXQgaXMgdGhlIFEgKGRpc2NoYXJnZSkgZm9yIHRoaXMgY3Jvc3Mtc2VjdGlvbj8KCiMgU2VlIG5jaGFubmVsIGluIGllbWlzY2RhdGEgZm9yIHRoZSBNYW5uaW5nJ3MgbiB0YWJsZSB0aGF0IHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzCiMgVXNlIHRoZSBub3JtYWwgTWFubmluZydzIG4gdmFsdWUgZm9yIE5hdHVyYWwgc3RyZWFtcyAtIG1pbm9yIHN0cmVhbXMgKHRvcCB3aWR0aCBhdCBmbG9vZHN0YWdlIDwgMTAwIGZ0KSwgTGluZWQgb3IgQ29uc3RydWN0ZWQgQ2hhbm5lbHMsIENvbmNyZXRlLCBhbmQgdW5maW5pc2hlZC4KCiMgVGhlIDFzdCBoZWFkaW5nIGlzICJNYW5uaW5nJ3MgbiBmb3IgQ2hhbm5lbHMiCiMgVGhlIDJuZCBoZWFkaW5nIGlzICJOYXR1cmFsIHN0cmVhbXMgLSBtaW5vciBzdHJlYW1zICh0b3Agd2lkdGggYXQgZmxvb2RzdGFnZSA8IDEwMCBmdCkiCiMgVGhlIDNyZCBoZWFkaW5nIGlzICJMaW5lZCBvciBDb25zdHJ1Y3RlZCBDaGFubmVscywiCiMgVGhlIDR0aCBoZWFkaW5nIGlzICJDb25jcmV0ZSIKIyBUaGUgNXRoIGhlYWRpbmcgaXMgInVuZmluaXNoZWQiCgoKZGF0YShuY2hhbm5lbCkKIyBsb2FkIHRoZSBkYXRhIHNldCBuY2hhbm5lbCBmcm9tIGllbWlzY2RhdGEKCm5sb2NhdGlvbiA8LSBncmVwKCJ1bmZpbmlzaGVkIiwgbmNoYW5uZWwkIlR5cGUgb2YgQ2hhbm5lbCBhbmQgRGVzY3JpcHRpb24iKQojIHNlYXJjaCBmb3IgdGhlIHRlcm0gInVuZmluaXNoZWQiIGluIHRoZSAiVHlwZSBvZiBDaGFubmVsIGFuZCBEZXNjcmlwdGlvbiIgY29sdW1uIGluIHRoZSBuY2hhbm5lbCBkYXRhIHNldAoKbmxvY2F0aW9uCgpuIDwtIG5jaGFubmVsW25sb2NhdGlvbiwgM10gIyAzIGZvciBjb2x1bW4gMyAtIE5vcm1hbCBuCiMgdGhlIHZhbHVlIG9mIG4gd2lsbCBiZSBmb3VuZCBpbiBjb2x1bW4gMyBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IG5sb2NhdGlvbgoKbgoKUSA8LSBNYW5uaW5ncmVjdChiID0gMy41LCB5ID0gMiwgU2YgPSAwLjEvMTAwLCBuID0gbiwgdW5pdHMgPSAiU0kiKQojIGIgPSAzLjUgbSwgeSA9IDIgbSwgU2YgPSAwLjEgcGVyY2VudCBtL20sIG4gPSAwLjAxNywgdW5pdHMgPSBTSSB1bml0cwojIFRoaXMgd2lsbCBzb2x2ZSBmb3IgUSBzaW5jZSBpdCBpcyBtaXNzaW5nIGFuZCBRIHdpbGwgYmUgaW4gbV4zL3MKCiMgTm90ZTogUSAoZGlzY2hhcmdlKSwgdmVsb2NpdHkgKFYpLCBhcmVhIChBKSwgd2V0dGVkIHBlcmltZXRlciAoUCksIFIgKGh5ZHJhdWxpYyByYWRpdXMpLCBSZSAoUmV5bm9sZHMgbnVtYmVyKSwgYW5kIEZyIChGcm91ZGUgbnVtYmVyKSBhcmUgcmV0dXJuZWQgYXMgYW4gUiBsaXN0CgpRCgoKIyBXaGF0IGlzIHRoZSBjcml0aWNhbCBkZXB0aCBmb3IgdGhpcyBnaXZlbiBkaXNjaGFyZ2U/Cgpjcml0aWNhbF9kZXB0aChRJFEsIDIsIDkuODA2NjUsIDMuNSwgMCkKCgoKCiMgMikgUHJvYmxlbSAxIGZyb20gSGF1c2VyIChwYWdlIDg4KQoKIyBXaGF0IGlzIHRoZSBTZiAoc2xvcGUpIGZvciB0aGlzIGNyb3NzLXNlY3Rpb24/CgpTZiA8LSBNYW5uaW5ncmVjdChRID0gNi4yNSAqIDggKiAxNC45LCBiID0gOCwgeSA9IDYuMjUsIG4gPSAwLjAxLCB1bml0cyA9ICJFbmciKQojIFEgPSA2LjI1IGZ0ICogOCBmdCAqIDE0LjkgZnQvc2VjLCBiID0gOCBmdCwgeSA9IDYuMjUgZnQsIG4gPSAwLjAxLCB1bml0cyA9IEVuZyB1bml0cwojIFRoaXMgd2lsbCBzb2x2ZSBmb3IgU2Ygc2luY2UgaXQgaXMgbWlzc2luZyBhbmQgU2Ygd2lsbCBiZSBpbiBmdC9mdAoKIyBOb3RlOiBTZiAoc2xvcGUpLCB2ZWxvY2l0eSAoViksIGFyZWEgKEEpLCB3ZXR0ZWQgcGVyaW1ldGVyIChQKSwgUiAoaHlkcmF1bGljIHJhZGl1cyksIFJlIChSZXlub2xkcyBudW1iZXIpLCBhbmQgRnIgKEZyb3VkZSBudW1iZXIpIGFyZSByZXR1cm5lZCBhcyBhbiBSIGxpc3QKClNmCgoKIyBXaGF0IGlzIHRoZSBjcml0aWNhbCBkZXB0aCBmb3IgdGhpcyBnaXZlbiBkaXNjaGFyZ2U/Cgpjcml0aWNhbF9kZXB0aCg2LjI1ICogOCAqIDE0LjksIDYuMjUsIDkuODA2NjUgKiAoMzkzNyAvIDEyMDApLCA4LCAwKQpgYGAKCjxiciAvPgo8YnIgLz4KCiMjIHRyYXBlem9pZGFsIGNyb3NzLXNlY3Rpb24KCmBgYHtyLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgdGlkeSA9IFRSVUV9Cmluc3RhbGwubG9hZDo6bG9hZF9wYWNrYWdlKCJpZW1pc2MiLCAiaWVtaXNjZGF0YSIsICJyaXZyIikKIyBsb2FkIG5lZWRlZCBwYWNrYWdlcyB1c2luZyB0aGUgbG9hZF9wYWNrYWdlIGZ1bmN0aW9uIGZyb20gdGhlIGluc3RhbGwubG9hZCBwYWNrYWdlIChpdCBpcyBhc3N1bWVkIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgdGhlc2UgcGFja2FnZXMpCgoKIyAzKSBQcmFjdGljZSBQcm9ibGVtIDE0LjE3IGZyb20gTW90dCAocGFnZSAzOTIpCgojIFdoYXQgaXMgdGhlIHkgKGZsb3cgZGVwdGgpIGZvciB0aGlzIGNyb3NzLXNlY3Rpb24/CgojIFNlZSBuY2hhbm5lbCBpbiBpZW1pc2NkYXRhIGZvciB0aGUgTWFubmluZydzIG4gdGFibGUgdGhhdCB0aGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcwojIFVzZSB0aGUgbm9ybWFsIE1hbm5pbmcncyBuIHZhbHVlIGZvciBOYXR1cmFsIHN0cmVhbXMgLSBtaW5vciBzdHJlYW1zICh0b3Agd2lkdGggYXQgZmxvb2RzdGFnZSA8IDEwMCBmdCksIExpbmVkIG9yIENvbnN0cnVjdGVkIENoYW5uZWxzLCBDb25jcmV0ZSwgYW5kIHVuZmluaXNoZWQuCgojIFRoZSAxc3QgaGVhZGluZyBpcyAiTWFubmluZydzIG4gZm9yIENoYW5uZWxzIgojIFRoZSAybmQgaGVhZGluZyBpcyAiTmF0dXJhbCBzdHJlYW1zIC0gbWlub3Igc3RyZWFtcyAodG9wIHdpZHRoIGF0IGZsb29kc3RhZ2UgPCAxMDAgZnQpIgojIFRoZSAzcmQgaGVhZGluZyBpcyAiTGluZWQgb3IgQ29uc3RydWN0ZWQgQ2hhbm5lbHMsIgojIFRoZSA0dGggaGVhZGluZyBpcyAiQ29uY3JldGUiCiMgVGhlIDV0aCBoZWFkaW5nIGlzICJ1bmZpbmlzaGVkIgoKZGF0YShuY2hhbm5lbCkKIyBsb2FkIHRoZSBkYXRhIHNldCBuY2hhbm5lbCBmcm9tIGllbWlzY2RhdGEKCm5sb2NhdGlvbiA8LSBncmVwKCJ1bmZpbmlzaGVkIiwgbmNoYW5uZWwkIlR5cGUgb2YgQ2hhbm5lbCBhbmQgRGVzY3JpcHRpb24iKQojIHNlYXJjaCBmb3IgdGhlIHRlcm0gInVuZmluaXNoZWQiIGluIHRoZSAiVHlwZSBvZiBDaGFubmVsIGFuZCBEZXNjcmlwdGlvbiIgY29sdW1uIGluIHRoZSBuY2hhbm5lbCBkYXRhIHNldAoKbmxvY2F0aW9uCgpuIDwtIG5jaGFubmVsW25sb2NhdGlvbiwgM10gIyAzIGZvciBjb2x1bW4gMyAtIE5vcm1hbCBuCiMgdGhlIHZhbHVlIG9mIG4gd2lsbCBiZSBmb3VuZCBpbiBjb2x1bW4gMyBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IG5sb2NhdGlvbgoKbgoKeSA8LSBNYW5uaW5ndHJhcChRID0gMTUsIGIgPSAzLCBtID0gMSAvIHRhbmQoNDApLCBTZiA9IDAuMS8xMDAsIG4gPSBuLCB1bml0cyA9ICJTSSIpCiMgUSA9IDE1LCBiID0gMyBtLCBtID0gMSAvIHRhbmQoNDApLCBTZiA9IDAuMSBwZXJjZW50IG0vbSwgbiA9IDAuMDE3LCB1bml0cyA9IFNJIHVuaXRzCiMgVGhpcyB3aWxsIHNvbHZlIGZvciB5IHNpbmNlIGl0IGlzIG1pc3NpbmcgYW5kIHkgd2lsbCBiZSBpbiBtCgojIE5vdGU6IHkgKGZsb3cgZGVwdGgpLCB2ZWxvY2l0eSAoViksIGFyZWEgKEEpLCB3ZXR0ZWQgcGVyaW1ldGVyIChQKSwgUiAoaHlkcmF1bGljIHJhZGl1cyksIFJlIChSZXlub2xkcyBudW1iZXIpLCBhbmQgRnIgKEZyb3VkZSBudW1iZXIpIGFyZSByZXR1cm5lZCBhcyBhbiBSIGxpc3QKCnkKCgojIFdoYXQgaXMgdGhlIGNyaXRpY2FsIGRlcHRoIGZvciB0aGlzIGdpdmVuIGRpc2NoYXJnZT8KCmNyaXRpY2FsX2RlcHRoKDE1LCB5JHksIDkuODA2NjUsIDMsIDEgLyB0YW5kKDQwKSkKCgoKCiMgNCkgRXhhbXBsZSAyIGZyb20gRkhXQQoKIyBXaGF0IGlzIHRoZSB5IChmbG93IGRlcHRoKSBmb3IgdGhpcyBjcm9zcy1zZWN0aW9uPwoKeSA8LSBNYW5uaW5ndHJhcChRID0gMTUwLCBiID0gNCwgbSA9IDIsIFNmID0gMi8xMDAsIG4gPSAwLjAzMCwgdW5pdHMgPSAiRW5nIikKIyBRID0gMTUwIGNmcywgYiA9IDQgZnQsIG0gPSAyLCBTZiA9IDIvMTAwIGZ0L2Z0LCBuID0gMC4wMzAsIHVuaXRzID0gRW5nIHVuaXRzCiMgVGhpcyB3aWxsIHNvbHZlIGZvciB5IHNpbmNlIGl0IGlzIG1pc3NpbmcgYW5kIHkgd2lsbCBiZSBpbiBmdAoKIyBOb3RlOiB5IChmbG93IGRlcHRoKSwgdmVsb2NpdHkgKFYpLCBhcmVhIChBKSwgd2V0dGVkIHBlcmltZXRlciAoUCksIFIgKGh5ZHJhdWxpYyByYWRpdXMpLCBSZSAoUmV5bm9sZHMgbnVtYmVyKSwgYW5kIEZyIChGcm91ZGUgbnVtYmVyKSBhcmUgcmV0dXJuZWQgYXMgYW4gUiBsaXN0Cgp5CgoKIyBXaGF0IGlzIHRoZSBjcml0aWNhbCBkZXB0aCBmb3IgdGhpcyBnaXZlbiBkaXNjaGFyZ2U/Cgpjcml0aWNhbF9kZXB0aCgxNTAsIHkkeSwgOS44MDY2NSAqICgzOTM3IC8gMTIwMCksIDQsIDIpCmBgYAoKPGJyIC8+CjxiciAvPgoKIyMgdHJpYW5ndWxhciBjcm9zcy1zZWN0aW9uCgpgYGB7ciwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHRpZHkgPSBUUlVFfQppbnN0YWxsLmxvYWQ6OmxvYWRfcGFja2FnZSgiaWVtaXNjIiwgInJpdnIiKQojIGxvYWQgbmVlZGVkIHBhY2thZ2VzIHVzaW5nIHRoZSBsb2FkX3BhY2thZ2UgZnVuY3Rpb24gZnJvbSB0aGUgaW5zdGFsbC5sb2FkIHBhY2thZ2UgKGl0IGlzIGFzc3VtZWQgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCB0aGVzZSBwYWNrYWdlcykKCgojIDUpIFByb2JsZW0gMTcgZnJvbSBIYXVzZXIgKHBhZ2UgODkpCgojIFdoYXQgaXMgdGhlIFEgKGRpc2NoYXJnZSkgZm9yIHRoaXMgY3Jvc3Mtc2VjdGlvbj8KClEgPC0gTWFubmluZ3RyaSh5ID0gNiwgbSA9IDQsIFNmID0gMC4wMDYsIG4gPSAwLjAyNSwgdW5pdHMgPSAiRW5nIikKIyB5ID0gNiBmdCwgbSA9IDQgZnQvZnQsIFNmID0gMC4wMDYgZnQvZnQsIG4gPSAwLjAyNSwgdW5pdHMgPSBFbmcgdW5pdHMKIyBUaGlzIHdpbGwgc29sdmUgZm9yIFEgc2luY2UgaXQgaXMgbWlzc2luZyBhbmQgUSB3aWxsIGJlIGluIGZ0XjMvcwoKIyBOb3RlOiBRIChkaXNjaGFyZ2UpLCB2ZWxvY2l0eSAoViksIGFyZWEgKEEpLCB3ZXR0ZWQgcGVyaW1ldGVyIChQKSwgUiAoaHlkcmF1bGljIHJhZGl1cyksIFJlIChSZXlub2xkcyBudW1iZXIpLCBhbmQgRnIgKEZyb3VkZSBudW1iZXIpIGFyZSByZXR1cm5lZCBhcyBhbiBSIGxpc3QKClEKCgojIFdoYXQgaXMgdGhlIGNyaXRpY2FsIGRlcHRoIGZvciB0aGlzIGdpdmVuIGRpc2NoYXJnZT8KCmNyaXRpY2FsX2RlcHRoKFEkUSwgNiwgOS44MDY2NSAqICgzOTM3IC8gMTIwMCksIDAsIDQpCgoKCgojIDYpIEV4YW1wbGUgMiBmcm9tIEZIV0EKCiMgV2hhdCBpcyB0aGUgeSAoZmxvdyBkZXB0aCkgZm9yIHRoaXMgY3Jvc3Mtc2VjdGlvbj8KCnkgPC0gTWFubmluZ3RyaShRID0gMTUwLCBtID0gMiwgU2YgPSAyLzEwMCwgbiA9IDAuMDMwLCB1bml0cyA9ICJFbmciKQojIFEgPSAxNTAgY2ZzLCBtID0gMiwgU2YgPSAyLzEwMCBmdC9mdCwgbiA9IDAuMDMwLCB1bml0cyA9IEVuZyB1bml0cwojIFRoaXMgd2lsbCBzb2x2ZSBmb3IgeSBzaW5jZSBpdCBpcyBtaXNzaW5nIGFuZCB5IHdpbGwgYmUgaW4gZnQKCiMgTm90ZTogeSAoZmxvdyBkZXB0aCksIHZlbG9jaXR5IChWKSwgYXJlYSAoQSksIHdldHRlZCBwZXJpbWV0ZXIgKFApLCBSIChoeWRyYXVsaWMgcmFkaXVzKSwgUmUgKFJleW5vbGRzIG51bWJlciksIGFuZCBGciAoRnJvdWRlIG51bWJlcikgYXJlIHJldHVybmVkIGFzIGFuIFIgbGlzdAoKeQoKCiMgV2hhdCBpcyB0aGUgY3JpdGljYWwgZGVwdGggZm9yIHRoaXMgZ2l2ZW4gZGlzY2hhcmdlPwoKY3JpdGljYWxfZGVwdGgoMTUwLCB5JHksIDkuODA2NjUgKiAoMzkzNyAvIDEyMDApLCA0LCAyKQpgYGAKCjxiciAvPgo8YnIgLz4KCiMjIGNpcmN1bGFyIGNyb3NzLXNlY3Rpb24KCmBgYHtyfQpsaWJyYXJ5KGllbWlzYykKCiMgNykgTW9kaWZpZWQgUHJhY3RpY2UgUHJvYmxlbSAxNC4zMi8xNC4zNCBmcm9tIE1vdHQgKHBhZ2UgMzkzKQoKIyBXaGF0IGlzIHRoZSBRIChkaXNjaGFyZ2UpIGZvciB0aGlzIGNyb3NzLXNlY3Rpb24/CgpRIDwtIE1hbm5pbmdjaXJjKGQgPSAzNzUvMTAwMCwgeSA9IDIyNS8xMDAwLCBTZiA9IDAuMTIvMTAwLCBuID0gMC4wMTUsIHVuaXRzID0gIlNJIikKIyBkID0gMzc1LzEwMDAgbSwgeSA9IDIyNS8xMDAwIG0sIFNmID0gMC4xMi8xMDAgbS9tLCBuID0gMC4wMTUsIHVuaXRzID0gU0kgdW5pdHMKIyBUaGlzIHdpbGwgc29sdmUgZm9yIFEgc2luY2UgaXQgaXMgbWlzc2luZyBhbmQgUSB3aWxsIGJlIGluIG1eMy9zCgojIE5vdGU6IFEgKGRpc2NoYXJnZSksIHZlbG9jaXR5IChWKSwgYXJlYSAoQSksIHdldHRlZCBwZXJpbWV0ZXIgKFApLCBSIChoeWRyYXVsaWMgcmFkaXVzKSwgUmUgKFJleW5vbGRzIG51bWJlciksIGFuZCBGciAoRnJvdWRlIG51bWJlcikgYXJlIHJldHVybmVkIGFzIGFuIFIgbGlzdAoKUQoKCgoKIyA4KSBQcm9ibGVtIDE4IGZyb20gSGF1c2VyIChwYWdlIDg5KQoKIyBXaGF0IGlzIHRoZSBRIChkaXNjaGFyZ2UpIGZvciB0aGlzIGNyb3NzLXNlY3Rpb24/CgpRIDwtIE1hbm5pbmdjaXJjKGQgPSAxMC8xMiwgeSA9IDMvMTIsIFNmID0gMi8xMDAsIG4gPSAwLjAyNSwgdW5pdHMgPSAiRW5nIikKIyBkID0gMTAvMTIgZnQsIHkgPSAzLzEyIGZ0LCBTZiA9IDIvMTAwIGZ0L2Z0LCBuID0gMC4wMjUsIHVuaXRzID0gRW5nIHVuaXRzCiMgVGhpcyB3aWxsIHNvbHZlIGZvciBRIHNpbmNlIGl0IGlzIG1pc3NpbmcgYW5kIFEgd2lsbCBiZSBpbiBmdAoKIyBOb3RlOiBRIChkaXNjaGFyZ2UpLCB2ZWxvY2l0eSAoViksIGFyZWEgKEEpLCB3ZXR0ZWQgcGVyaW1ldGVyIChQKSwgUiAoaHlkcmF1bGljIHJhZGl1cyksIFJlIChSZXlub2xkcyBudW1iZXIpLCBhbmQgRnIgKEZyb3VkZSBudW1iZXIpIGFyZSByZXR1cm5lZCBhcyBhbiBSIGxpc3QKClEKYGBgCgo8YnIgLz4KPGJyIC8+CgojIyBwYXJhYm9saWMgY3Jvc3Mtc2VjdGlvbgoKYGBge3J9CmxpYnJhcnkoaWVtaXNjKQoKIyA5KSBNb2RpZmllZCBFeGVyY2lzZSA0LjMgZnJvbSBTdHVybSAocGFnZSAxNTMpCgojIFdoYXQgaXMgdGhlIEIxICgiYmFuay1mdWxsIHdpZHRoIikgZm9yIHRoaXMgY3Jvc3Mtc2VjdGlvbj8KCkIxIDwtIE1hbm5pbmdwYXJhKFEgPSAzMi4yLCB5ID0gOCwgeTEgPSA1LjEsIFNmID0gMC4wMDkyLCBuID0gMC4wMjUsIHVuaXRzID0gIlNJIikKIyBRID0gMzIuMiBtXjMvcywgeSA9IDggbSwgeTEgPSA1LjEgbSwgU2YgPSAwLjAwOTIgbS9tLCBuID0gMC4wMjUsIHVuaXRzID0gU0kgdW5pdHMKIyBUaGlzIHdpbGwgc29sdmUgZm9yIEIxIHNpbmNlIGl0IGlzIG1pc3NpbmcgYW5kIEIxIHdpbGwgYmUgaW4gbQoKIyBOb3RlOiBCMSAoImJhbmstZnVsbCB3aWR0aCIpLCB2ZWxvY2l0eSAoViksIGFyZWEgKEEpLCB3ZXR0ZWQgcGVyaW1ldGVyIChQKSwgUiAoaHlkcmF1bGljIHJhZGl1cyksIFJlIChSZXlub2xkcyBudW1iZXIpLCBhbmQgRnIgKEZyb3VkZSBudW1iZXIpIGFyZSByZXR1cm5lZCBhcyBhbiBSIGxpc3QKCkIxCmBgYAoKPGJyIC8+CjxiciAvPgoKIyMgV29ya3MgQ2l0ZWQKCkJhcmJhcmEgQS4gSGF1c2VyLCAqUHJhY3RpY2FsIEh5ZHJhdWxpY3MgSGFuZGJvb2sqLCBTZWNvbmQgRWRpdGlvbiwgQm9jYSBSYXRvbiwgRmxvcmlkYTogQ1JDIFByZXNzLCBJbmMuLCAxOTk2LCBwYWdlIDg4LTg5LgoKUm9iZXJ0IEwuIE1vdHQgYW5kIEpvc2VwaCBBLiBVbnRlbmVyLCAqQXBwbGllZCBGbHVpZCBNZWNoYW5pY3MqLCBTZXZlbnRoIEVkaXRpb24sIE5ldyBZb3JrIENpdHksIE5ldyBZb3JrOiBQZWFyc29uLCAyMDE1LCBwYWdlIDM5Mi0zOTMuCgpUZXJyeSBXLiBTdHVybSwgKk9wZW4gQ2hhbm5lbCBIeWRyYXVsaWNzKiwgMm5kIEVkaXRpb24sIE5ldyBZb3JrIENpdHksIE5ldyBZb3JrOiBUaGUgTWNHcmF3LUhpbGwgQ29tcGFuaWVzLCBJbmMuLCAyMDEwLCBwYWdlIDE1My4KClUuUy4gRGVwYXJ0bWVudCBvZiBUcmFuc3BvcnRhdGlvbiBGZWRlcmFsIEhpZ2h3YXkgQWRtaW5pc3RyYXRpb24gKEZIV0EpLCAiRGVzaWduIENoYXJ0cyBmb3IgT3Blbi1DaGFubmVsIEZsb3cgSERTIDMiLCBBdWd1c3QgMTk2MSwgaHR0cHM6Ly93d3cuZmh3YS5kb3QuZ292L2VuZ2luZWVyaW5nL2h5ZHJhdWxpY3MvcHVicy9oZHMzLnBkZi4KCldpa2ltZWRpYSBGb3VuZGF0aW9uLCBJbmMuIFdpa2lwZWRpYSwgNSBNYXkgMjAxNiwg4oCcR3Jhdml0YXRpb25hbCBhY2NlbGVyYXRpb27igJ0sIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYXZpdGF0aW9uYWxfYWNjZWxlcmF0aW9uLgoKV2lraW1lZGlhIEZvdW5kYXRpb24sIEluYy4gV2lraXBlZGlhLCAyNiBOb3ZlbWJlciAyMDE1LCDigJxNYW5uaW5nIGZvcm11bGHigJ0sIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hbm5pbmdfZm9ybXVsYS4K