From e5a8798e65396bfb251a6fd7f7f1323786ea92b1 Mon Sep 17 00:00:00 2001 From: Micah Hinckley Date: Thu, 27 Nov 2025 10:38:12 -0800 Subject: [PATCH] Use msgpack for API --- .gitmodules | 3 + Cargo.lock | 12 + Cargo.toml | 2 + build.rs | 5 + plugin/Packages/msgpack-luau/.gitignore | 2 + plugin/Packages/msgpack-luau/LICENSE | 21 + plugin/Packages/msgpack-luau/README.md | 103 +++ .../msgpack-luau/assets/decode-benchmark.png | Bin 0 -> 70555 bytes .../assets/decode-encode-benchmark.png | Bin 0 -> 83775 bytes .../msgpack-luau/assets/encode-benchmark.png | Bin 0 -> 66559 bytes .../msgpack-luau/benchmark.project.json | 17 + .../msgpack-luau/benchmark/JsonMessage.lua | 1 + .../msgpack-luau/benchmark/MsgpackMessage.lua | 1 + .../benchmark/decode-encode.bench.lua | 34 + .../msgpack-luau/benchmark/decode.bench.lua | 23 + .../msgpack-luau/benchmark/encode.bench.lua | 23 + .../msgpack-luau/default.project.json | 7 + plugin/Packages/msgpack-luau/src/msgpack.lua | 868 ++++++++++++++++++ .../msgpack-luau/src/msgpack.spec.lua | 543 +++++++++++ .../msgpack-luau/test-runner.server.lua | 3 + .../msgpack-luau/testing.project.json | 26 + plugin/Packages/msgpack-luau/wally.lock | 13 + plugin/Packages/msgpack-luau/wally.toml | 11 + plugin/http/Response.lua | 6 + plugin/http/init.lua | 11 +- plugin/src/ApiContext.lua | 31 +- plugin/src/Reconciler/diff.lua | 5 + src/snapshot/patch_compute.rs | 4 +- src/web/api.rs | 57 +- src/web/interface.rs | 27 +- src/web/util.rs | 46 +- tests/rojo_test/serve_util.rs | 33 +- 32 files changed, 1848 insertions(+), 90 deletions(-) create mode 100644 plugin/Packages/msgpack-luau/.gitignore create mode 100644 plugin/Packages/msgpack-luau/LICENSE create mode 100644 plugin/Packages/msgpack-luau/README.md create mode 100644 plugin/Packages/msgpack-luau/assets/decode-benchmark.png create mode 100644 plugin/Packages/msgpack-luau/assets/decode-encode-benchmark.png create mode 100644 plugin/Packages/msgpack-luau/assets/encode-benchmark.png create mode 100644 plugin/Packages/msgpack-luau/benchmark.project.json create mode 100644 plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua create mode 100644 plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua create mode 100644 plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua create mode 100644 plugin/Packages/msgpack-luau/benchmark/decode.bench.lua create mode 100644 plugin/Packages/msgpack-luau/benchmark/encode.bench.lua create mode 100644 plugin/Packages/msgpack-luau/default.project.json create mode 100644 plugin/Packages/msgpack-luau/src/msgpack.lua create mode 100644 plugin/Packages/msgpack-luau/src/msgpack.spec.lua create mode 100644 plugin/Packages/msgpack-luau/test-runner.server.lua create mode 100644 plugin/Packages/msgpack-luau/testing.project.json create mode 100644 plugin/Packages/msgpack-luau/wally.lock create mode 100644 plugin/Packages/msgpack-luau/wally.toml diff --git a/.gitmodules b/.gitmodules index 46789ed1..678237a2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "plugin/Packages/Highlighter"] path = plugin/Packages/Highlighter url = https://github.com/boatbomber/highlighter.git +[submodule "plugin/Packages/msgpack-luau"] + path = plugin/Packages/msgpack-luau + url = https://github.com/cipharius/msgpack-luau diff --git a/Cargo.lock b/Cargo.lock index 7f9a58a7..49351dd3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2077,10 +2077,12 @@ dependencies = [ "rbx_xml", "reqwest", "ritz", + "rmp-serde", "roblox_install", "rojo-insta-ext", "semver", "serde", + "serde_bytes", "serde_json", "serde_yaml", "strum", @@ -2221,6 +2223,16 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + [[package]] name = "serde_cbor" version = "0.11.2" diff --git a/Cargo.toml b/Cargo.toml index d8f34311..08879ab6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -104,6 +104,8 @@ data-encoding = "2.8.0" blake3 = "1.5.0" float-cmp = "0.9.0" indexmap = { version = "2.10.0", features = ["serde"] } +rmp-serde = "1.3.0" +serde_bytes = "0.11.19" [target.'cfg(windows)'.dependencies] winreg = "0.10.1" diff --git a/build.rs b/build.rs index 6bfd8e55..0f52585b 100644 --- a/build.rs +++ b/build.rs @@ -30,6 +30,11 @@ fn snapshot_from_fs_path(path: &Path) -> io::Result { continue; } + // Ignore images in msgpack-luau because they aren't UTF-8 encoded. + if file_name.ends_with(".png") { + continue; + } + let child_snapshot = snapshot_from_fs_path(&entry.path())?; children.push((file_name, child_snapshot)); } diff --git a/plugin/Packages/msgpack-luau/.gitignore b/plugin/Packages/msgpack-luau/.gitignore new file mode 100644 index 00000000..e08ff63c --- /dev/null +++ b/plugin/Packages/msgpack-luau/.gitignore @@ -0,0 +1,2 @@ +Packages +DevPackages diff --git a/plugin/Packages/msgpack-luau/LICENSE b/plugin/Packages/msgpack-luau/LICENSE new file mode 100644 index 00000000..d9ca8cf2 --- /dev/null +++ b/plugin/Packages/msgpack-luau/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Valts Liepiņš + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugin/Packages/msgpack-luau/README.md b/plugin/Packages/msgpack-luau/README.md new file mode 100644 index 00000000..fb9a041c --- /dev/null +++ b/plugin/Packages/msgpack-luau/README.md @@ -0,0 +1,103 @@ + +[latest release]: https://github.com/cipharius/msgpack-luau/releases/latest + + +[shield wally release]: https://img.shields.io/endpoint?url=https://runkit.io/clockworksquirrel/wally-version-shield/branches/master/cipharius/msgpack-luau&color=blue&label=wally&style=flat + +# MessagePack for Luau + +[![Wally release (latest)][shield wally release]][latest release] + +A pure MessagePack binary serialization format implementation in Luau. + +# Goals + +* Fulfill as much of MessagePack specification, as Luau allows +* Be on par with HttpService's `JSONEncode` and `JSONDecode` performance wise +* Keep code readable as long as it does not get in the way of prior goals + +## Example usage + +```lua +local msgpack = require(path.to.msgpack) +local message = msgpack.encode({"hello", "world", 123, key="value"}) + +for i,v in pairs(msgpack.decode(message)) do + print(i, v) +end + +-- To store MessagePack message in DataStore, it first needs to be wrapped in UTF8 format +-- This is not nescessary for HttpService or RemoteEvents! +local dataStore = game:GetService("DataStoreService"):GetGlobalDataStore() +dataStore:SetAsync("message", msgpack.utf8Encode(message)) + +local retrieved = msgpack.utf8Decode(dataStore:GetAsync("message")) +for i,v in pairs(msgpack.decode(retrieved)) do + print(i, v) +end +``` + +## API + +* `msgpack.encode(data: any): string` + + Encodes any pure Luau datatype in MessagePack binary string format. + It does not currently handle any Roblox specific datatypes. + +* `msgpack.decode(message: string): any` + + Decodes MessagePack binary string as pure Luau value. + +* `msgpack.utf8Encode(message: string): string` + + Wraps binary string in a UTF-8 compatible encoding. + Nescessary to save binary strings (like MessagePack serialized data) in DataStore. + +* `msgpack.utf8Decode(blob: string): string` + + Unwraps binary string from UTF-8 compatible encoding. + +* `msgpack.Extension.new(extensionType: number, blob: buffer): msgpack.Extension` + + Create MessagePack extension type, which is used for custom datatype serialization purposes. + First argument `extensionType` must be an integer. + +* `msgpack.Int64.new(mostSignificantPart: number, leastSignificantPart: number): msgpack.Int64` + + Represents 64-bit signed integer, which is too large to to represent as Luau integer. + Both arguments must be integers. + +* `msgpack.UInt64.new(mostSignificantPart: number, leastSignificantPart: number): msgpack.UInt64` + + Represents 64-bit unsigned integer, which is too large to to represent as Luau integer. + Both arguments must be integers. + +## Performance + +One of the project goals is to match or exceed the performance of Roblox offered data serialization and deserialization methods (HttpService's `JSONEncode` and `JSONDecode`). +To ensure fulfilment of this goal the module's methods need to be benchmarked. + +To benchmark message decoding performance an approximately 210KB large JSON encoded payload has been chosen. +This JSON is then used as input for `HttpService:JSONEncode()` method and also encoded in MessagePack format so that it can be used as input for `msgpack.decode()` function. +For MessagePack encoding [an online msgpack-lite encoder](https://kawanet.github.io/msgpack-lite/) was used. + +As visible in the [boatbomber's benchmarker plugin](https://devforum.roblox.com/t/benchmarker-plugin-compare-function-speeds-with-graphs-percentiles-and-more/829912) results, `msgpack.decode` considerably exceeds `JSONDecode` performance: +![Figure with JSONDecode and msgpack.decode benchmark results](./assets/decode-benchmark.png) + +To benchmark module's encoding performance same data is used as previously. +It is first decoded as table structure then both `msgpack.encode` and `JSONEncode` encode it with the following results: +![Figure with JSONEncode and msgpack.encode benchmark results](./assets/encode-benchmark.png) + +After transitioning to Luau buffer based encoding strategy, MessagePack encoder significantly exceeds the performance of the `JSONEncode` function. +An interesting observation can be made on how consistent is it's execution time, even in comparision with the `msgpack.decode`. +This is most likely is because `msgpack.encode` performs only a single dynamic allocation by computing the nescessary amount of bytes to encode the data and then allocates the result buffer in one go. + +Here is another benchmark which combines both decoding and encoding steps and as it can be seen, thanks to much greater `msgpack.decode` speed, both methods together perform better than built-in `JSONEncode` and `JSONDecode`: +![Figure with "JSONEncode & JSONDecode" and "msgpack.encode & msgpack.decode" benchmark results](./assets/decode-encode-benchmark.png) + +For more details on the benchmark setup, look into `./benchmark` directory. +To construct the benchmarking place, the following shell command was used: `rojo build -o benchmark.rbxl benchmark.project.json` + +## State of project + +Encoding and decoding fully works, extensions are currently not specially treated. diff --git a/plugin/Packages/msgpack-luau/assets/decode-benchmark.png b/plugin/Packages/msgpack-luau/assets/decode-benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..0585351258cf38c54c3271205d688d3bf1bb3deb GIT binary patch literal 70555 zcmd?S2UJt()<5iwR{;yCD5x}*5wK7c4IQjt1BP)dNQn^<5fVV8w{Z+0B48&PAfu@0 zNJj`ACp4uhC;>tdkRS%6gc3;m_6ed)afJ6>_rKn?zPr|4(n|GaAzz9cxt{UnU8tgASoq#2v3e$36cSQ$_{?s}biJZSX4g@M#Rs21ijBQ{L43~c z?c3zHZ>llWwOJ+o!#48Wz5T-L?H0fH;&ZI)8lRvzzcki0rnerd_Cr%$9~^#jqStD; zXT3u+qcSH$1TJmze~T8;C;t}y%Gger{pBCy?TCD40M8V=_{+cB7MU=QIbS7nm19~Z zs?DNx{4mxy>)dd)(3d~5a1nhOhF)Zk9s z-}s|H|Dj*1j*DaRo!cnRA0EdA^^#lld(x`)+v;s1ns*(g?V&TP4Gem6nN@A3ymzLQ z?l_Vx-zvJZJTmx6Qoc5ijcd*h)EjM5&mI5p#D&PUklNZ(5Wr8aHPH#=b4YwwR;81_ zIC(`SYixHvek|LKK~W|*Eg6B2XX&(_t2K7vmfhS?_(G8+o$b*lD{8>$R}0{AoEz=q zid(5CH1em=8Ghv?TF&dVpVWiE?|D-?0N zn{zxgN1I%2y7;a9QGOtQ%z$s##2czLE%oPdTlsqWyurwVrbN3hx9s(4#R}sE{7y8_ z_C}n7eycYl!TJ5&;F3}|4EFn>_puS8d@6r9ATTb*d;Pwj#eY{g&Y(pY@K`J--hdo` z(?+Z8ExG-a`7Xpf-c=*n6=c1kmpjes?{Iow#TpUR?Mx2(`!~; zCLiBkk0m!#+KWRA>r-rEPofs<+1K392q3rmv$2~`(Ec-Ir_a3Y%^+_ zKEIND^2Igh7O$?ra+REoxF_?OVR7ge@)ZV^eGIN>0H;H)LugsG-l*l$QM(wgQ>@?s zRxoQE&2FT&yB>HdwsMP7E^nMMklr)B$Z|B;fO8j{6Q+wYyVDt>7;}*}KGc2CqSlk^TBQ}Y&Y(bvNW4~jzu?93 z>#s)A9-2h2Z1EdycJBW}D0sh0*8S#49L{7L?a`RFg*d&TD_mM@bCg@1dAgCl7vAe? zs|H(#!|5^*L-WU}9jO?(WA&%ci8Dy-rml8v_RDu|!E)j9Otk-4CyW36=O;F6&uyg& zMvd?Lmv_zP5;^f{DarXA;X3U$ss-F$Ct5~d0iQQ8X8wW3<5cr=GZgTQqyqiKv{%oO zbvuC13iIc~@06R9Y|K3o+Y)!+_7ZY}d746aynat|A?5w6*p6)7@5l2-TSDcF8IF4i z5i7T@4{vW-;)cn8K;5d}+ehTe93a@u$>&-S-Aj|N@)Vx)$CLQlJQeg<*%3+txn<=? zSgV;bpRah;p+*sAh`6HRfMaYSgMpH$>nI5ejS$m%cZKC?^MTg8^+46B#}R6+Zd5A= zhsFpsr;=*bONte8K0PT){@DKv6E@jU!gW3_56lX?C}-gB8`b_UND3z`Y3+&e&FA72 z2uI?NE|!y$nt$5I(KUp&r_YN?-)$dlL~z22GL`dif;(Nm$DequlUl%Y^%L0B4}I&6Gc68ha(5&trE;x1$1$4j(1% z;kHW_ET=ZZ^_rzN4*gIYXX-?=CV6m#3|QN5RG_YTz4`r+OZcFCxaJyMc@-wVP*i8v z-Nwr#^ipy9NaL`jYvtB~`O4UqbK+wP!M&k-j0wam8CM4sZefeu{cdD%KaN-uZ{4pd z`MxppV>Y8*@|Qcw8CevaH5D2f!C5I;ROLbTsQ{tEhb1X|$@5$tcCt-Fs;x_&v6T(8 zoECX!C5oICRyAdnN5d-j>`u zmW?@fh0kl{`*7|V(ekVH+4xeq09{;K0K3;IKxc?SRV}L%H_^O{^%jp^VSpA9r;T7P z$n5`e+gL-6Ybx%hFW2|=l)f9#n@+8(`|=;3#eIjFa*LB?@mf>?tww(J^!eExjips0IvQVoyb*pJH78JUfrwc|w3HY8Dr3#} zzg?irk+fVSCnl?_iPYNOvotI@Fx`O~v|lxE%TP~)I`UYWJX-w*#wI_i^2CdZ+ikaF z!{>=%(~K(~S?4w0dP3;oHTctbv(NnpueDmMW-*3$L5{OZ+Mm^irRbK|JlJ0dTl5N} zgleLOs$~Fo7&FjbjA?vof7gPH!@z=0x0~FAmMU&2UuMG=d%1WK9sh2RHAdg2^eMuo6$Cc_%(U2 ziCQX|-yhiD9;zB7BYk6k z6`tBJS#Wy({hj7rTPaajq@nVNL8UX!Z(<5s9|z%9-Uyk@Dvp6Vd1ko=&XVKx+jmxy zuxuZ1M?OvTT*7yHf)93^4Ojahc2z~~{dnd|Oum_+vCnEp=F85udtI{bWG59xlT1Zk zPUI<553+{5EoVWyVuV_CdzhNR$IK4O{k_-EMC{09f6OU-d3R@rq@PK&_ST_Znnp#m zj>g0{xu6#O`Zoue_s4{?>wbxGL;g1Vyy6vQxm=$2+Cf^14eeGQ_vyK%c&|G*+^pp* zH0DvFJne(j$g0CnRp%ryTYUNg)vGk+k)>6I#i5s;sjr^B@O`$Xu&d=;UgEm zH-}F@pD5+|eZ#ezRSDAgEK%ENs>~94tWiXG_2Y9v}5Z?hY9>Q2l-EG zZQWNGTwrxSQd9kvE4b-jyHxY;rn0f#Oc!iUbSEM2_LMVxHAY6^hCy&6DJNpVaKQ9Wbw%s><&aCkIjkG&WR3v2&aU z4~_=OM)<1sXnzoDqjbrNGVAzk{wOIpI9fIjm2apwnv2@R>!a2clyu4E=nt9mISjO~ zE-#nruc0o@EY~SiiOnzI+4-sZ4nOv3cc5jE`1CC2mmTCH61%GdCt47#o)ZmCUzq)X z9lwDfSKPWTNA8w|wf|;ZtId#DVZM#iC4QnxT3__wljPBHE@SNZn>H4jSKa?%ytS~- z$DlSQr+U1rF~6~Iyh-ZdeC~o8&Z>&L>c27CS5>UuDtM&l6Sw|mCwRKJw<0I^AJ!(H zeJEdHtHj9tctwq*=QE;E<7;D%s~+HC_1sqL^$%DSZb-A+)#ec4PX5-;+Zj~d9!Z1nUpemwJn;Pfevd-e zG}J{qpTrmMXx1y_NFL3h9h8IW*7Io*xtpccc~$*HEhl`4dfZbsmp9TNbnmy1-1l1< zX2ZplJ3JImIT0pcDfV;HH}*~&D=>i~`Y-1Hth z8sFb((55$o>iTAU80t7xp`^57tXMU`|7Xi8`o&>`R`%`TF45>gM_=FZqPqhrF9uDS z>K~H!-;u&=ott~kN*b?qf9~IRAjcQ`x(^U^E>_u#c4KcN7*HdNE_>f;) z+vDm|TVi%+4ccHyq=sSz_9WT3xTY^fE@(yiI?L2Cobgeg%{jbAu>`(XLqG?&qEDB9 z+R`qzt9KwEnpMlHH;f6mL)xybDD3)v!L)V<(msO4fh+tIT)D8dNgK)UmeKjT4rf>c z8wxJVm-E{PEIM-Ep*}QaL|F3+S{!(B10E&admUwmWaP564~#WeXy%1tbC_@93L~t& z*QgNH0({5I%`Q>njJ!^A9ZsSdQFeR}+FL_@EVdq()s^!p(%Q4LRYWP$ zKV3lfJb343dkeNd#@v`~87CjOZV$TGd1)x@E_>nCh=W;{fM=kw~9D;Sk>OAj&cS~uh(W& z{*axQ!CgR<;}kd4()43Teixh?*Jv1k+bL_N0B|L*#gLjhh!mnB%Er z(yj1c)l9F$>b4>)yX_Zo-I2Y1 z+G|hPb;sHNU__(8UXv|SYqD-$P@~>Os`ovSL`V2j5o zR@hbES!V6iyY;@->h$`o<6Zb@DO-$z2?@i_?RQ^|lK)Y_a_#;I-SdekO+^ zUGs}d4Ycmly?Zfg=dOzW`=c3bd;R$4^Py5XCySAh+8VP(bo-y`yu#E>muK%0n(obX zzMD11v$5eC}zl9(WP(z*qLV}>vgi;HqwgH!7yEE0}Xc@ zpjYAL2|Hp`P#zn@wmQ_|FNkU@SvvnQXCOsJ$KoR(EcJFIKMG)6Qq;maSUq;rT0|e0 zU~p$Wh{FN#<}Y&2b=M@*a5;gG8T?GNSLe-SXf2IiV5MD(7Gs5q?mLlj&FzEqOh6bY z5dgCY5UqMlaIxD3Au-W|4-bS0E-=@|ybBqAH37P#;m59<>aR%5`Iw!2qWBVP`wl*j z+u>cW{qHMcN*if~T3fDK$N$52ZBm#L`D%@uiB{(gR!)?AqrI81h2#A!5oU~@PY}^5 zU#sV7t%=M1A%Mvo_-AGVu4qos_w%;Y|L`bQ05ExVMN7(&mw4sWvyQG*KUE<-TS#<4 zVbDScak^9*0BFH(jJh|nSZ!}UT<<&tV6?Q(I%}&r_U`)5(T~lsc(R!MjcwDtvnGZF zVpJZ$hYrxAzrPnsL3;E-e|9g`ecOQ#cXSH|N~AjW*o(I*JWs0^X40Gr^04@^Wk)O* zTf@L*{Lp@HwCRQl<6i^X=A(sG^I0c60ZFpL=;N9)``;w_r;nVT9ivvj87%J@1mvtk zNJ61X(fH0%3FTu;sZXZ8IHTj$3IMVzto9#C%gjxI?x^{yyitbKZJaNwE!bu0(-#A) zcLw46{6}*>Zc%>Bw1>)OU?ZowJVp(TfOoFddWG@kX=fZzZ$+3-60_H<6u_csdwW4l zG}7|yUV@hEDa*M3OnWEa3<#W>UGeB%#ptCm{^Q-5xoa`{XI?*Yrr)-!lf{;eb&=#+ z0{C3GJ@#|-6VwaSvX@)eP)XxW0H+J`2O1G>9Dym``*u~Ss*hf6NRUmwU*n)0^| zJtX2Tl}nk{*39!ghKX6LLunfE>&qJzCAWAx_~veMcQj5kjnUQGXql;2bspzRpe+-L+!0}rzmvj=a;*yamHOPI_C)M`i}ML?DGzMS6*p8QWzp}jq}lCN<4kPh zO>K8aAHbOBE?B;3e6&xFo!o&d^=!%Y!o2)#`#?QSNc0T9ZTfpk>SB7bTiHhnKFjau zcf?<(yHUc9Pe@!uhp{DI@7In0zC#SQJ+;5NXDL11*2zFwW)3Ds0Y*+?CjM^dxoN+l zh6Ke0R`+L5cX4i|=wjZlky%84x#Fdp%Od)fm7f5Dl`qp^q@Qi2(f^;+wHu->v}#G7 z_oj{==^H9URudm?WJP3)PN%JR_^(}=u&WGA&x`3IJ0+)I!2ZjXm>i{s&T+@q!`A2! z@%uuG?sRVP#23lgMSvHr1%uSD;nynwXnYU&>w6m6$+IV=^o+w!&4D6un&=)Fj9wYZ z18lL@c)ojad2re>Ik>tDC(xcf8Q+#RJz=iWX zE}NRc61=EwE9?iOlO^z$3+d45+7SjPiw}PD?K3nJVL-6AnEI=$ho~XGh0N0&33?L z!>d;+?m*8Z1BsT|Bh#U+P+xj^g}A70|1DjG8|w_lUq!TgUr#%N_H(mDsbs&ur*`iB%gkJ$lG0@sUC&mi zcFG+nQSvv&6IWHAkgos+Y9wPZ{fMQ@ZcpwoRpa)Z!&YUY#f0h z)EQt6e{9wX-(1};!Yo%U&{c^5#L)jZCJCXcl25<7muWp`+V{E!h>Krj^}NqT{aS2z zp0;Hp>QGq;g+rOIy1;nfIFEz0JKku*-M4c-~}s|?qr8Y3;CV!3>-sPytKHS%J{|E_LxfQAl7 zziR+oG?{Ac69`@Y{fxEv#qx%DeZTQtR~^v%%)5B(z6e*G9Pmwmpms&Mnk>yVbiX4Z zwYGVlV?wAyVwS=@9D9uk8yyM|LzWE(All+r^pOXTx#Pq0p_>h5FzQo!;p;C~JH9O{ zv3UG{P|G9y*|dE{crU-H*jc3Mi|>hXJt_wXwBTjQ>!$shLRIdbhrz{GV-8NIb_NWD zX8d0)>Jt^m3S%;(fmwapO~e1i(kx%`-yM?Wj7ioZyD-*M=YC{dF58f_K&LO)b-AYV zaZlb@mxIGjghl*c6!%DLZ+k>#@t&H5&V(5uBeNwFw)T#J^bTE66f_>IUpegs{a`*5 z6c%`x)3tqJCc_{Y&a+>>GwWCR*DBwW)tv1XT26%V`J=D_Zy=(OGsY~$1j|TJ7XqJm z;P&RVD&%<u9b^%7F{IGDstT78+7n7C;7dF-Av zQ-Y2Mt{07c3k}r#S}N&>5;G&2WyJ%Zr|P3ACw4DaKXpK}|Jm#d!{&A!!%vPRgxOhhqiQJk^Y@S7t7%F-}gdPQf?ncfX1K~D_@b6*?y@X`X{H&#`{0K>!ui9q7A$U^^CN!wVf+N&hzd0On<0Z z^O1QD+dEem11gNj(#{l{(h{+a2ck^xY*~kJhlxj~4U1);!{nc;yyFat13dHsc$)}4 zR1}Q6$aD(4@_f}?HBOJ6L1?+ud}jRXtqn0Uw{i8aV29cZnL z(o#=6`2BQIyzKq?L+YU+y;`pHT`9z6t%}j-e)1gej_Vk_g&%ul7E8Hp7h~@8bX^xI zz(30Uq@citySpI5E0>OvH?mtFC6VnNd-fYJ>XmpteR<@O(}gL`?li1J1j={&>5-ia z*vW<7sbbPSJ4L7S{A)?RsZ-}GHyDWxwP}y~ZOd=%HfKLj^;?&S&iD1=)R+>rAMhTK zP+b`=|I!M$K&w=0@6a<}4~s@bXI-wXP2R+64#6fo1U+OgU(#FtGeS2uJ^|nlWmW#} z#q~l;;QYd8=Vy0F(;0OMq3Akoe-2A?ZTUitrbT?YS^H-4O7_mzL{wDp(~$+7PIt7d z)`_Bv2t26dY5cJ+3sIX`HjVUYuc@fk>WWhG4C~pVjM|sItp1oJOh499EhYK?Nk

zW9pMJ7M4!+7hQBp+@&3HqZ_|W^>HpK`aPMnO)(ly*2}k?{!w>i5cDWr%NvH`(Yll zaSFrn|F1!Qrrkn0ehir?y+=RFz$|{qVz$(Ea_CfOJALbFOMsyup_wC2wm{@$bJNhc6T} z$TcRI64X{p`whKnyC9}7EUsv>VD{Vv!Vc8Lh5I8_7D5TIAZWXt@$9^LgaYG7m5_wi zv|j_j*?DxLQ;@1(_x`pQ!vQY^I=}3Lrg~d1uTWP|kqY2a17u>nKRnLVg`FfBT9lw@ z_r`VmFl;~LS#nc_qKIfRv-6e(Mb@WhG0CIWSfe<=fzuysa5*-CY##9IQC_<$Z%yK; zwZ_`PbDM0q#m@|{ibmEFIpvm*j6-7~99XAH6* zEq%J-aQwyC8f2Tz>{Ta?9mwR4&^nk{xsO?0G5tWh7zILX3{G| z4@TDOJAHIJc*4Od-h!;+I~6OZ;j@f$&Qe4a@e%stN{Emb1ESCc@Pkl;Tk+|vQQtz7kdoi!>?RLqV_wB|oYDGsW`A<{x5{y3-96U^U z$|?b!8_*&0<;HhLL7e3~_(IX;ham*WCL`iYC#eeZ9r-Fo70Dw~KNyL{KYD&>j~eGG@aF z*}RZ1puXU%xxG2$GS=+Tx)9M*Wxl(%pHgvKy+eCCwf1wbg$O&dLmnlXik}^6uq(Cy ziAQ(hDd>WZ$|X7kYf-RCs=OH*1blS>kJ*OERbxvLS(E_0>b-y6WL{2B>VD3>{lx5| z`Xdboy$2GJnz9{Z)%KP$h_SL+*KRk;^FASW1|85(Y9x^#V*%ATpqwG zlxyd7DAZuJuKsL(4PK)S{NF(zB)CFY8(=N?y3w1 zSNouT>BjO~%JTt9aEelGISNfj)bI3RD%y!%Q{Cf|Vsoa(Z}8oVft^A`sb;zw`7t`4 zIG&Q-79`dF{@jdiKT2l5-;if?Y`FINeK_$nRP-fd_SNED34707f6MPI;6%bCA_sa) z!APS+hj*Xb!S>pDuEZcZs{`R6e8$-qvF_=*ocSP>toar=&>4GMeZy6y3WupOunnpek^qGn z#lY9q3%{k`h8I6Z-@hSe2Vu0QA#FrB_21jD@@w#!i^b`~Q}KqIlJtcC4lVFMn(%w) zx$b!WaNT@fY~t*%Y6z$374A%c`&Z)Tvuj=>s!)HIGX?%!3P{lGI!cfUN+4L*s^V(`(FCcZ+2`y9{9u%pD`aYtLlg1PM@?q|(c zD^xCPo53%6P74fMN?vya=~;|!+nHxLnn(R!jQ5U)U%5&@U~)>d>=LmJtlu4RC7d32 z(Ep8ulMYBz5q;{TQt{^!;+2O&$s~!sOviNx{l{xFJZXEW4;CyEkTNf?s@&RWzN92v zMhYR~fX)5cLW%Ln+pg_b5rLsPfCX%;rxpHOBP+D zU_~S>h~{KQVor(b?xrPPB1;+7qPLi2U*cxH*w+YDkB-TAKZ(7Q zHlqIZ@)uPuhjSF%d8<8p@B`k;kUhiR$b zv6s9IYiEYP=v!QF6o-O-|ba={ZpS>SH_RDv( zkx6_-mov(L@Hz>P*ixWw33mhRoR9TN${U$?#M;aDJz&F#R;1Ce*Si{ua`}!3Sv?BO zvV}nAONt^+jJ^*C(S)d0fF;^fF$Qd%)-e;yD)vg-tK?90yn$C5B{$qJ>wee?l$k~3 zy9U2jLeIb!FeiKk)xq#MW6(y~MoGH)hp0uKm&*K_g0=jbdD{BFZt_6#(M}H{-UCYz z(+>>%w*3NSro>C0$r!LYG%qs?wSYtO53&S6@qBhmvdI{ZUb!o<(sfDT^xw4AQuELx(*9kyb2R zQ=4B@6CRuwWW3=Tck})^i=gFHELXndJp0Hr#F;>=p_HHB+3G-%EMOJ)gV9Uh#0FF2 z;R+0o3otw@x_VFnf91l%i=ECbdg>2(-;#+Gn&T2W3M#!Fu zh*|`usT=DKo~dp*$2TURkp{1UUat>ZLE+j+%O$6(qE=AXomX?R)-}hO;lF;zr)bwa zZmVfj8Sptu1;#A;GJ33G*rnR6^ZZWgCrAF>*&}~BPYs{Cf&Hv@;84AJziS7&*4Fi;>_C@_bhF2?= z+uv5$F%Ed|I+Myl7`f_rZ-TgFd&@~Kr^}hF1p?P`yofl3HPF#Imq)5b{Hj9)|CvJgJ@TuLjEG5krW*V+ z^v zOJ~w4Y$Ir>{&&C3B;3-H`>jQ>)+yI4q=KM!cPeQ5Ss!Ci0hvZw z&k4$9Dn)94OM>GJwwVyMRz%qd9q3`7r{`g_R`F#LTjTZ0szDSXVAgy z5+RAFcBtv;QV3x@>4f^xLYxBpr%Z-AvCI0~vdB6UPC0E8~{ZCM>Gy#z4~8`(%HME0gL>Z|!x9{J*t%zVQY zz#v2QH`>dCCNJ>8{>YL}#7~S%vp>`0LAJTIjNZU)A@rntrI_zyjWN4Qhu5#Fn92J9 zZ4-9O7}O5g#JrJ4mM2Kc+U^F+o&ozK8#D}hZ3rtK8|ML5wq(zN_RN+T9ne)c54|!9 z2G<*QO@#sTb~PT6#vpDj#3Oz;fX@>sX#yp!g-P5VyAEcCLIpF|a0Lhtz+HCn;1fr3 zvwK^eg;N-#XLhhE;6iQ1lIR6u`mEzbHI42(Fku$0b96iwCC7bl^w z0bJ6NfHC8PEV9oN}tK9=y<`~=>KOl}=wtyeGwnJz!qQs>wfUh*s6FONwQ6EomA9|i1A6A@q*C5D}Afrh-W zmD}7}Txzj|t`MG(%F zR8P5eypDXP`pj{;pD#;mr2;>c?_3L^*v?A>&FAvFgj6)nH8fx)23MVym5IGS zlnd1_@=C@%HL{HjGm|Fi*C^bNSb3ql6i-i(dLFKZ=v@n;=P3OB&=U#_+)Lw5dBGR# zKoyQOzZ(at2+Zgxq3lWwPQF$#zJPUE&OqP&cxV!5NTM9MdSi zh}b235D|Jh`F2Pl!3JRzj!!Gw`bK(?9*=3jXCjJg(fO_&(3sB$QRQVcT??r0TTAId zVYA3$GL9yL8xk|`Wn^pzAW>)`(7eZ*gxDu)L6!1DVv-FThju)JE<3}_h*-X9jk_AC za9Mx+S}EsLT4G3e!VMOh*@Z8`{O`LFpZ|B=$TT)}b8R2@wI?XK`8~aHUp$;M?|&xg zrF&}Vaoh|>zE4Qcj~QyDyrJf@l4*2zb|nW*)2HIplS0#(Yzm*SpUpX*^DrvY>!T)q z&CW3jCvRHUIpL-HA9W~Y!c4>ujf}h_k3i>L``wJzsfrZ=(N!ZVh(}VuJGDI4vpI;& zk_oblc4KgC-#_L^3MhNOkp@LwKw+>9)x4pamuYs@FO$#(&VXnX50@aB9f$%F@j>@< znAOy}pk#ne$c)(VQI2w+|Do;E><-lz(>H^y$fH3Rk(}&W91{$i&xt2OyUYj%U`uF2 zUTp;R0{+dRpY)MGKNqU%fMpqKBF->R7 zl`%lj3G4JeJ($`3kl0>uXenLFM*fdp*6U4I^dM4;=CYn_Id)rL@|={TN;NOLy|%=u^0xb|Djkp?7&#i=r|(E80(b6zX$JzP2Y(6XX{3sNfyQT(uO-vmP~)* zcp=Or0hiRqK=ZwUy>soVS_nwV5zDH1t{q5=B#1tFbozS6!8ntf67-Qj&cEn^*6K~2 z@$H}gEYYaU>rxfs}aaoxd( zjw54kD1WXtxKBR({-k{n>DomBd2ohq27g=KuEZ^27G)+IO7so23Dq%5de-%4Kx_SD zml4}^Xc-+*Jk>*|(Q&%J6495GEPgL#bMRjMK-2Q;?}o3wGe?bb!qBbR^#XCp4n*Qr zC=dfJy?0ULl|Pu3(#8AN&2XX1SMY&dEm~*p&t;%X*KI=*L-2@32dDGy%1#OhVA`V^ z5F(mYb|im^kp_*^0Ntw1QhJ7*g1vFc;Xn|ZG6N8yI?|CQBs4q&Do!RyRAyzt#ahEw znxuE*ML(%IxHZ0z+|dT}%tG{dO=M$?6QwzZU$bAe__28l2(gs)TYb3NAjE#hN4kpO zl|YGK1~qvin*i|s#Ac!e{S+(dcvTb+Kf<%>~g%8WAx!(Fr@Z@Is^&9f$+Rc<7 zxB}bn%5b&5q66S-@%*XEzk98Rj(zmxlKk4887}!LJ?4Qc{b!98fFMqMO3MR^Z%r%T zj}se>I`gwHhe+b<>hc2kt(cQ!T-yMU0Zv8{IG>MEj}I2A1E(O{{bmD*(uZDQpoJ{P z7C?PrX-ABFlp)zM6nIqrN^0d;rBh>ug=}|&dj3ecMr+eZWArk-m)ozOx{4xR#&662 z78|nKlS1J{fZH&@bRRs*$PRD=nbMrjwMnRr~sW>i7M2dX6_>ttZo-rlRt zIb^ntEK+)6beybjG&NvvnFS0gws|BKw3u8p@MsGhXmvCp*fDDsYCL88-HDFleMoAr z-cBIH1D-&<>RToLap8K~nEq_~<*|AOy7J;t!G9vnBKST-0jb(E@*$|77hQ3IUY{ z)i!WUHNrr@B3fTBmvuqT(UV8w+0*(qcLKXspEnxLZ;7!pD6A_r>l2b$YRk)nc}}g1 zT+rO#@k2cPIjr>wP?8{MdC-Vu8D`pKk&l5`?_#SdJ7+q*VS zZggK;UBtA3DXXhxHAWvcZR7i6C8lUCdBE zE5ar3#lUz$^vH90kbn$iFXF#xunWElWD0ML&kZO{s?y$&NIOcP^7BF*EHwHcbL#SN z0l$zxU=S1ut&kGUXtY<#e^?_xJkEDT7Iy^0*;HCY-DGZH!(p+SLioJ}#jQ?5U`Td> z#2}+Tsyzo^^!Ep_#M&NTHx*4odp*Dg^mxHH9c~T2A3Yd2#=aSburptKu#Hh+k@1(; zb_=EpSYOqcn45IOg*mn*wP|yAA5Vq%s?O*d?R_sA?QJi;4#zM8mli?C#?W&BlD9e} z6SE%nwwm~{+A^z(+^jAd_&|ZA(4P09{g_0TW;#@t!(=yw4g^Ng%mkI8;rhP<5RUUpH^DGw@>e~ z0LAM=Bc302ilwuy7z~;Sv(HyC(I-!(!ol?cO<$Ma+*e|2id_Abx^M1b#JH)ejQ1Fy zRs5eZ@O8gBs=YatbGz~9b;G*jz|q;8S!eZTxHFVdRI-Q@+hbU(JT1kG(p7cm%_2IQ zea!cx0f>xguBjB?j(XpY5l%O}nsGm+j6FAgX9}JfrQY5Ete@XL3F2G@lbk_0z75Ab z4aSM^U*$X?Y!OYb3QKLZ_Gm}*-J-5N(C-ZuVODZ4kGrh4pTsl1S|HNGm55W8kEwEn z0oD;eisy4k9g(N+{FtHo<}wY@q}{21?o1nDp*gz=BmIR~e$~TMDfWkDdz*D|{LaV% z=@x>n77pGEnsi%4Po|9}IR!Gnx=>xL@(V)byo_SQKw9Lv#;8uzHLeB_|I`BSuIPc$ zr^6`4u^s?1lbT&km+Ktg=Bs?YJB>F+qFHy1m8*oxeP926cw(2^0`YvL?KNWGDlAm1 zS0#d)=ZLyAo=TlWF&sR*p_Cn7@U0*BIq~PZr1*nT*;2Z=peOj}trdELTVHOWGm^{o z&GHa)H2tLQ#=Qmz>ysTMUx5T{e4?bj_M(gw{chV3rFGNz@RlQMXZCZ&;*~!%6V#Ga zef&O!O-=uIuH9g>cYLB_$&FScW%9%vtHupf*lqYL3sYPvu<|Zad>cM*QeSPGZrQqa z9oE>IV)@`xtu`T4-`Tn$7qnY@Tz8yFas5LO6ap;P1#Z|^n;Dng>U&XU1nR9k{Z9sI zt3sNHYvIF~Rd~lcscIN~kI8HKN-O!7Ud0L{YQGJ!4S!Qd) znh}B_`Hh6cK2EcQY(fOqa2b09>4=DV8UR0Q-==-%?$4)nS>UqPszCCAVwCd^%aM9k zJ+;Aei1&3I%76LYUAHNm72rtt#^rzNKThJaUNk`3aQ282K2#-JX@QLP7L`5-zD2TD z5??T-oN_nCA5B?v$@zM*xg&lIAk7vOg#!v9;iLlIxWa@L_?EJT1Y%8(2o?lCAYpwU zll(HBfl~YrBg@1H4_+mwMYnBA!^7l`5;PHQ)X}G>%`B6?pWNPYb^j3kBpCgs3^$&s z-|{Gz{>7s#3r-_vz}5gK>qoTS0#u=vR{!2x%9a!@o-a?~{Qe~IQaQ*;aGGDytxRjD zh`9{T+zRsnznZ;@fpH{%Z55}9q}nI|a?_27XTd-ijG!3T5#w*Jl`ostDhiGtG(csb z@ptsth{%6S#6&+p!tDg>wE8dRWJG#{O_)2gmj_Te$dfKrx#hu8mr0{fUhb) z!>t^YFgYm!WXQBeaAnP4LG1Jw8H+}f^G;5{EG4siHT2I76PkdpZf3R(xnB1Jmmu+Y zjLFEQt+}9Xa7jEaI5%QqOGRoRUF5-gHy zg)nHClFKVVxy>3*3XqAjZ2A-JG)!j44d-BSl( z$Frw*wop28!Hl;1eibQ`F=Y|`hJuvt9Q0*PXuEWoJNdiZJ-DXWi0+GCiRy_Vp5^}r#K5FlS2%Qj1dgT zN-vz0Uf>~6LQxQtj^qh2>(I}Utq+k2s9_tQzD%$nC!cw<9-p;nT3ha?XXbn7b38@z zXJK$MgkNQHz5;a_gB=drKbeUXrjGj*Tda_ofDkMB4PYMHY>XQQE zIA?R%>6g+Eg~L?r{!0FS>{#~=bb2w(1WC#TIWjR+@vyRb!0?8edjsQ7J-JR(^~lFe zATnVs4#<#nqc?LgF``~M$yqO8-)u$F%Np-2!sUL_?+Hefz$gc;~PH^}z@-XczW@Rv31@QhTKjk8Q4{e2O+|14`ma z!a~HF^lrM#Z>WM6u&_7^~(h0u>GDKyZ`gVuXSK(cP zHEZKqDw}a2hIs-6sROK2ah97L{ReHrwG_&RfK$*wa?aWy*j@OuwwM+Ley<(}2s>#5 z595k|SqJ5Hd|H`;JkT~1z#fQJiOZjoh{gE}TtJEv+TK5z`m!`6NTg)^yG@uDSiPCK zT9D)$-rpg|*PK@Ys+5h1>RGxIc`wj~==h@+KA)7&N05vco^U-$JGV-~VPRi=Vcm<` zVo;2T8{prA3Vb zw2MpMBz6j{;&G-C}+bnzPg@W$+#0jwLd`!vKN zE=Tq%&95qn9W@@Y_8lm8@#-wQ*#<%U;hR|?x{8o9R5B~^GAqT86>PNlW|f=TvO{fa zcLN=&Fl5m=NMqTta$KcE4K0UQXGXnlHOeY5<9{52_%qEaCu{v*jp$@)&>!(b* z;MJ!lSV)4MOU6i_rsPZvDt@@H;V1#^*%sJlXTUbMY&lA>d+_o3Re4(20S(7}OQhyt zf2ybV@xIu@k;u40@XsM8Dlo)!JQ_sYO_pb0tVOypF*#__PDKdRPZLt17DPbY!I-p% z&uApt|M29C6Rw)Xp^R@eW2N1DP%#f5EPGBXCc`-e2xkt;V!bNyt6e0GTik3cgB%DX{4T-V&hPo zdEisd+X87#wJL$)=Kx_*NraqS+{rA&^u?dOO=OyFhMfe(G6-fcxOP~6I{sJf5Sc!t zeJ+#rdUv())*{2p%NN7+B0dg|^#@MT@a`B4K~9nMKPAV!>um?C+X4tZe5BX-OV|Rk zjXm4JHB;(qZP}k(;>L4lHY)rjDCWUDrn#`|vVYk;r%aqsL?JAu1>_Ws^3Nx+A^f!F zfN()zC;~M&eNjq(y#XE@53qQ1a<}WDUy+DlxkW<&vItyPya1(I^xxy@Gz%?n`!n8 z*R3#fLsIT$&|@e{Dkq$73W~q@OvY37vDt*(X=xLP1ol zE~~18+ZnVVgweCy3i4X-8b!z=2!u#=VuADW3FM|=&q-IPAH~>Y+evn6dYBw!pdgV{ z&<&k~om-4j6e3;-HlTZNtq}7aaVLu~lIXygPM+v7q!wc3D~%Cjr+U+;Sei@nkGiU& zE!an-GQq|~LDa8({c__j4L^}M!wp(^tb=Sn%~xY4xl zHa&J2Y%0nL`wg`iH>eRBrUrdCjb=zdyA&^L13z)=$vd}RL&G;)Om|U4DdOhEI+%%BY#irU8h+WKd1fSUPB2>YX9?B^Y>Fr!^Ib zg0(-5#NDXkw6P-XC+bNb_mkO}gE#AyPG9dp-Qni6auanRQU_KNBrlbkb)t;M5OdN9 zJOs@*#xlg;i}kM%wmKZfR?hu`7Hx&|v<@AyS{4ZlR&aV!DM|fPdflWGWja`Jzsgum z^+tsZtSnaQkEm~C);yfZtO1=)ZB2coe_e{%7|b9}mKj+U$iSm{FTf@r4pa&Tsc+KA zqw_NGt~O_YNLljIDTAV9F`am%E75=Vj7R!6N;j7vV*cVxp42y&C+l;zm302(AiVjwRJp{ZR7NuHPy^)PqVoO{ScBqc`I$2&yib#$(P!(#w6#bwVCZ&;ST+CKm8E=8qctA4`CiugNfFDRrNLj{ zMG{Xdyih=bWd7D*lu6K?RM3{+0{5n@vFTTRqzS8z-+R4rDq-{~?rxI^qV%24nvR;x zmYoS5GSRustlIzI#@{BeASE;*;Kvy}tlWP{#EA?2Yflovs7thxQu({;7@{nfRcSNg zkrNN=>bA+wtd+<)K!E5)^nw63IY0`cWm2Gw6B67uVJLWk7iX$;xNHzkRSQH8liO&W zt9gKkQa%SMSiKiS#5-y61wXE;(3$DTAk5UD^1ln{-jAM#v=^*#YJn{E_A?m-c1H1# zGv#yvBXIEop(6$g!$N_i`0cOr+xr|&u#hY~fe>-e2c%g+m>Y=yl^yUx@O2KkL<|6a z&3Uw4DV?g2jnj_gUqE0Cata!fdH}xLsIz73+BzfAiF)${(Ygd#0PgcvG}{K}QiYdqIFh&kJUV9)=miP7N3#3`(Kz26AEv0k03`a9k2Bl^abK*0 z2;IRw0%ts#7{#qM;MOWROCs^33s)|klOS?j>Lw3{%_1ymtip~0bdW5`iR}#GCU|5( zEMvl`tQ?+LEW$b0B?t&9KFEI{%7BWr?R0b&TFCjRwzZu`5`O-+fgL|VM zc7iZIf(B_ZBy!k-q*6S)O)(m7A6_d}0&~OH^dO5c{~UpH0>FT_ z%j#7Eq`Fkr$59hPV+z3q=U}l@kc!tVNX5&9gYuHHKm4AFScQWiM?q77e!xkjF45Cz zQp*GQJ~cZ+D7hIu!;_h~E1~@HsSwy?yer*L4nC-N zsb7A*Ly*7Fn5x$LR~_@y?JtSH7(fb6V~E!rCXdI$PnqJ2KIg4KK^isDP$j*~UVHU^z2%$pLwaSvTrfv*97yMK>Q~IG4^U z#JKQ8Y+0J)MD$YqBM8H{{UlxvV^X9h0aWR9r`Vp}3%^1#LkYIz7UaSIvdL@k9qaCt z=)C6F5pR&xJe3JQ)Nhs;{Wr@h4}}PP_FtdEr@Tf;5acw|agZ$kaQ*T3ns%caAmi5D zz1I()#iapju2OcK<_~8SmJGK{gcEh23jY$ym!aD33$RrC&&ngVk5HAyen02Q#P&S* zFITVDg=1j9WaY%UtN_+b*IMA7Z>W#zbBEyUti~BbD4zmz5L;aP^V3qcJb-WT5SUXC zk2NL=I+)m3NMz1Twwte~<^0L$eJIPEl=Uv!`L((S*{#9hb$V}h!cVE}Q*1|ej8F@q zTW})Y=QHfSXfW*R4EV0JDNT!KXQ0;x2%7)#lqCPMTIAjJ8VqyuLhkn&Ui-ISKf$U`Z3{GyEqz>8nN5xRY4Dkp`otl4lP9K42vt(s zM+=f1Q$P1;P0Q%`E5-*UfS39GY}&`+$2Y!qsh;<4-oj%~IwO)fx^8xXyKFOObVShvoC;FFrT{_l^8+Bp5klna*z;j@wmh1D3l z2&`h!{a`&$G$s_zg$Vk|12~~fiPI~Il8JvOJ%6uE3{DUjS!R02A(mu{1Kr)1bDhNb z0Zs|g!h*Vg2NH^pEl2D_nS*5;b|zWpQGizyr&mSOGO!(8R-l;?AXo@M2F$|zVCl1a zI3CC$E50!=#t`SaiquG20W-R+o<5zm$XoHaOc zVm5d89syh~VidXtwxv;oq}0&)ClUFdHC-Mdps0L@nBp>#z_X6+7v=^A%X*(qqi~RD z!R4Dz?m>D4gpIlcXFWURy*9--J*hs zZQ_n@T5Mf9Qv2|9_veh@Fv!0-Ah3|H*n(Kdb^n|S42TP5auZXw<|8MY{pA?Be^Oo{ zNwjrf%F1UIs|F$Mt)SgOWKNk{pj^&`Aj1VncC%$m4HK8y7UW#HmHHZZ6z=mc=J7R7 zl8EOWIR_k0J0%SLf9<^qJk)FdH-66DIa<+5WjiNDB}|lkIjt&1Qc1QZMb^o_4JupN zrWIvNlB{E&FiiH!poqaR4ni8+m@H$q=lTwn7Nz_C-OvB||6b?J%PXg5zH=>~>vMh9 z_gnszO})Cr6M2kRH&cEZ7WjOmH0w*co-eh~JX8R19|R!$-`gEx)zl?ao%sC~{f5Dk zs&&Q7WhDx20`EX(1{OqB;NU2s)7pV;)5cj-D6oQ{ELG7~9eWJ}kf`G+?$C8>6 zM5?v0t-vN5lPeY`f3?0VWq_<~P{YI5`A~N^hh5dZ)ltS7YeSl-NdwK%h=$w`xt`ii z!07|^J01q;p-^`>==B#Jo@wvCkAx2`E!PUs9jS8wQDC7QCPM4 z3+bOC5F{{`1?S4)6j1-HoKNR_X2=16G4tWlZ0H*682EN~(AVXqoXEk?>WEo6lz(H; z9G)S7@NzL{^RYXTPH62Qf;Ys0_yybUr=6Vc5qdJi1O%FlIJUt&r&&84PvE#;AHT60 zmo{9OeQQlGY22)msG%wBYWnDN!s6+6qmv9G?grnX&%0}8>?F`3qN=ZV=cm=vx5o3M z6`*oWCp2ebBPSwomtlI4Q8-^);hVNy1sT@@P-N6_CjR3?)9!)i=Za zS2gyM15fd@=L3`tF9b|twJKCR3^Wr>PKvA34k`dHlh$c^Z%ItsN&r`j%4pD1_KUPF z*pd#E)Tzltbw--gmGi{`aJ;s6(O{YLMd-x#$~+(v?);G<0Ka1UwaRlM4>88 ziksNmFFyGOgnu*c7R{0Knl+ zz-P^qZC2B|H^RGDHg+*&m2eCdfHtxRVorS4&u{GdCvrSHHl&Vt4^~HAfBxkv zKL#)q0*)g2!YcD6+vvI6vaD0cq&we-DNkw8r+ zAPfK0O8~+0sk8tBqQ#%V-R#YejJ{d%CMQHpJ`1qm(SyKq* z9H6j2pqYxg0!n+-T9QA`B!l-~haHIve-(Qo&({m)3ZDcf*h!B!OQ*>NiGrgLgzcBvqd+8y&f*LhvOd3_tFx>hd^XSTECw?3%J1hfQhZfrqu-igi?iVfTB;({cRll z#qBM2k=IBd10~OB?_e4sAs#|N#pV1ts!jh#RGZqBy-wCdKpoY!y+-S~{Y)ux0mu<; zZ<&taM1_e-G!K^XdW1lE)?i`Pg1o%bpF2B{E~B+X&d)TMzEE7lmpBOQvyHDf^32RH zzb1(ZLED7-=H=%B*{Rx$w`t{#bRj;n%zV`^hnWQZy5lO54#fR?iTv=^@atO_aq42U za?hH)wGbUo3jl!{f2e5L0s)aw=1DURi`<<6>4$=t+zW3A$aulBNCE_8oZl-xQ`u6O z`D#*5sVMO4smwzyYx?Cg+W@+#tdzN5{$j((__p2_R;7ILicsK5Y{ugziiY=Xv1;xH z-H+-hlQS(kpF!<`iu3xLrEQ_Nt_@hnfMV~Obj*!0IcCV93qZW>3V+-L#bOvEr3IP1 zTe6zB0~EnrX{%fd!-4#!8mMc3A&(pyD8(`ur3x2)&yfvVRJ0-qduNX9Ls@yxy*5+t?La|LE@ zerj_ZngKutb(KHk0)8Z3nx|2jWnXgTg&2gp@u4#t3TYfIfSJ&A&Ub%qT!LQq?C**N zpZ1Phj;0Va(5ImBtR&axPy4Yu`(H3sWd~}u*iiE1W#_jE#_Qn4&V#KPpeTVLd}09z z(|}9%3sU2YpnHac!wa~~d?7R!Kxz!A68wQNq6pQ)sQ@4`J0Z|m^f9%vL~*$x?MS?Gci|lO&$9a!u=sSU@zvBAMo6y)8#?n zLIBF2I0Nht4!8_Jy|Z;@h8ZU&zfqMweA|E*;K%~JL4T0vSKW5XyE6|*g|Mju$G*k! zL}}iDcY4eTD*njubnB+|eSTpAKkNDKRh@1M0FF4%{jb*=5s}XzjF~b};VUO`wr`F= zPcwTLXaR@nc1_Fy+bbMEwnQ4?@(D>YLjAzdk$$8PFaB7@?kYHqZ!J%9H7x|RaF@#= zmWLRPi0Y$1;ikAAD{X7Kdw2i@IH1r0R3-@_mNv<`x5nVUiBiZuX%t}sVndWCYa>@> zI-N{CwF21N9L~oxOdNiqR!7#oyeuVuZ_W^IHh4Rro!eJ#lz;bkw!fIJ)2k>y1Im_FiIZ~*KAgE*NsM}PXT}<0GER$%&ukj$Bz@p60n39$yv$6=OoAiI71a+>i=I*K{r+Y>PUJw5G8J{dFRs zmaL-4PaRpYO8b0iP?he&U7(cRnnTk7`VmAl*l7K1G2xCciK2AyZt(^HCJ4kzw~%*t zw77bnW@Qu)*J?TY=Fi+(0m+Ws1_9|H%nqX83*4J7r#nqYnk3jG3+s1p*D*F3pUQDu zy+0!Hpgv*boG%SxZx{jHJ4L{9X>0i!MQF3b2NWSFt|WNF#N1&+Ug(jOvt0$=Y?jU` zHpp7)-hSdNI9L_{aTTZlJ3rFM#Jro3)cplPbZD0=$BL6Ux;FwM8UuANWC+m^LcmE= zwLBv_WOGPpRc}mc%Auc*DnIn40m#A=9yy)AG(Wo_3V5_PdwmI8SO)NuANtXt5@bm) zikVTlZScW%fMi_ZR-0YL3Q%Xjqw3E)kmVn-l$=t7I2Ave_v#~o+!2IrmQRVbLSTf> z8`RGSE^>&>>zyHs5?R|E#n4uv>}6ap+0P=f_dNY=3M%cHME>Lj2AHSW87x%mqjNM) zH`PiSWEVkMGENuSVkpC;8``|64~^`Ruyf45_6!vBZC~O*bq0U5$EmFY)K zL73N$$05?2IiojB6^uq0sUvW&G_YAP-74jY)=PdYENqS z4?>;~g}r#BN7_5zM$P4CCqI@D3)KNc{j0pUB9E4JWOBV+cwU-p{)J!bANLBf^eSe0O@5qg*NZx(}InlW@J4Cd#~{BZXt0T z4N*Z1qIZKN*gWh6FwSe2VQ4OpU|c`1#1jA?_zS=frCi3KEa#gan;xPo{qg*ATb!>r zygx$kUkH&qqkf6Q7wL26;q+-$>L)q)JlO4S_Or973Z;U7Y!|~(h$B^ZL_l%*#hl~Z z2$7U1A(5g-Hnbq^jul>GwJI34*|d9c*x5UKu8?w&#Jz)AU(_;$!WJF~<}O7Zgp6Fx z#t{%aSLHh~To9bY-^+5iw+7@l=L#&&O2L0veqc>zRs9QYtTG>?_ScmQ;Ktk_uXzsj zdnp!B(ft^d>BA0OcrLuu*Nrlt0P(^DpsRG}^t={PyMFAHPKz(q^6$a;O&;5p_g4Hk ztjpP><-LthK^S)Y)F1euA16L%$zPZs8MRBb$!XkfO_vkt?$3=-B7DWqj_{-u?h;Ho zip}i3%`uXGev9qb{qz?1$o%XU>p!tPXz&15r;@%KTdOSla}w2Kzs4_L{vB3!CO%GX zm@_AIXDR>9ufyX&J4C=H&KaEmL4oOGai@Cz;&UR3paeO+$^O9GPc_^h!4Jri=FIuk z2}omK&Mq*54&?`_{h6;_G%d9f;SyW$nzd{%>e!Dq_@t!afzzAC@Z{Oeev2F~l|L@n zJLVgoUr#_oyPxAwKuMd7o5A>v+&?KHMRiQswLQxvVGln~GBtC?PEO3bCx(#Nb zJ8<+@vf>d9(V6Q-Qa|7D2;A7Vb*Teeu_lm^xQQ3Ly#crnUwIO{ok`oDm52T4^5j4 zkkEfmZtgPcHEq7sx3hIk%t9}=JI6nm|G{hiLnr*BbqG|J&RBZ&vjsTzk)M1HSpM4N z^Z&;34`cUySpJlIIz{felIjkxb>PqOcXM$A?~XMA6i?t5=sfVkre=X~&CJablrB9e`jeh5_3QES@-`LLu|GBlSSao}2`yY6LBqa{w z>Bmd*JD$SD9M>y19}4)oiGG~B+=16UUy5bDaRj~2;v~q|e7nT5^8)3!O$X%{QTKnG zB=!mn{Ts(kdGO9Ce8o3!W`)x#yAIaZ4Coo#5%?FEsvMb-fwGP7JVd0?)*u{}wEp8W zZY=C$KazxsFy_=wp<$>F4-}NyacSaz&iH?4@yq(OZGIp(oZWK_go&tO!6ef|CtR%l zvyC*S36)}(aO_IX>HntRH?woNJrS6McekAY9`AyUl_|K$6(o})?3el@tF#TOrShC3 zomBcNYl=B>aA}VVy7*nX^vzV*M4pQi7H6ROGaBK4Mv9G@?f4PayEXpb6G zS7^hxKlp0H;VYe9eLZ-Yv#i(OcQh1EpOikm7rGym$w3dJVJ=^6Krmr>@11Gyc}{}_ zWX;4kA1t7?TcPvGLBGLc#Qqa?^23V*MA@{D-gE>dwhuoDAQYhbzCTp@s%!C~o3_h) zLykuS?1uT7u+!>>yA*pPS$F1|6w~2H8|$=yx~yY6IRTP=jfGO8GiA_oYdifS*XC^e{p;ly()TP z?#KO%7%kNA^wB;Exay`uaWlr&fs+v)AmcP=Fh$|C8tv}|An5|Cuzt8ZeR1BAP2ct3 zX4a#B8JvaSRecTK`}r_u+mqk+UB4lAXi>Zb2#5lm^4Ohl{d7B!AQJimcY1nAM-mrN14L}Uv`@rk zKei$^nYSed)3SHvspt26M!8))=-fCwkbR6Di7LL47GXe2Z| z-1I?|mF~{jop%Z_e@>S27cYm9&7dgd1>51iV>WQJI zk;T&q&;BZ)!d7MMRYtQ=>{lNI#MQg+gyyW$B5SmG`4`o6t4HFpa2!BI#oE0T~P#pbpIM};$JL^ zZ+OTt*YBURE*^zA;sJf@4(n{z*{~W+@tCBq+rICIXF+oJ3llOL|6pHG*C+1v$@=i( zHwe|!zriL%FuKeFE-j|fuC8p4pH`JX$E!4?jrMVbU805kYmBPZK&i$xs% zu3U|g$wp2o*1tEJN3y=OD?ge}o#@g>m>JFb?P9h6DU(^RX*y-->$c`o z7%liTtY}`BGX@;i$2!1a`P^|2=3Y5=>&s}^OnK>dZiKIbOS3(rZ|82mJ~f|tgJ2@@ z^O;CCDAqe$k*M{JD_u-SFO~W5e`t@U+B)*5yHsZfTIXxD;DPr5iWX)(n?>JDT~5aW z&4z;44NYwTU~8a&j1xtCyu{(ocM|&FFeQL|NB=O2@krN~_V(3R0syk4xwklh+;v4~ z_J2RtJu_l(N_t+*aZ1t+>6}7{gmb9*dEA`%A}6XbD&^QgyMsoZTWO;1N=g7mZB)(3w9| zv;i7*$IZluX}hz$aT=-)E)k%UzxBkDyx$O|U*_%vCCMk#H%hKv)k~V%@GVDo%SIi& zYvn|jpkoA(!gO=nZoy*^Am2INf&Qy1Wb;Gq+|wsR)}{Bbi{}kMxH)a>b3*e$m|=jb z4azjCxvhmrzF&I@kX7-8UHGno=mOxCKsiVcS02x|h7HA_&A=`;CeN{p?)7($OFJ5= zOvg*I9EMZA^CYn)4(6YY`}$+0IC7WU0Iw{kq1%{$sxO5?qRbHU=~bej~!M=imeP2kC*7@%AfF2HLF; z!c=Zn!Y(FoQnB1`^#P0mgq`q>Sk2*7w=3YIdyUp~4;JoABG(=wET-lPz2JfmAvCuG zYWk;5okyN^Ch5*qr0MF1({6?gY`)t~FrTkXPd84teK@akgh8t%&_mCUKorDAh zYjZyH%X=ukv3x!4J=iLazJItJlo-xyVW#)RVhx-H8WOqYC6xz`N56EUINpJow3mRY zkfy}--=F^M_}|f+k7FLEoW*)#KwXeIUc?Ntk@Uf2kC7q*V0xG5I#3N;N|E>oV3rpu zkvh^o2Eq5I9BDtgapsAeo!a&LW#Ft~A+vHxBtg30LI|!#FzQ&}0(*xI1mx^PN%0so#vZ!w6`W^5adAAgN2}w!51!TYQJwfs9n9)Hf__b3OQ9E)oU}*b!e|PXn z;cJJK_zI+Apv+R@N&sX(=Pokn_jZ0SXfV$m=w%MMd~SCA(d4+B07@0b_jNtD*PN#a zay}zFgvy2j@>qsPKvtZUx4{%;9JhYX89=skq}Gbw?#i#Pyqt~6;(f_$5gjXfYYu>O zmP_^+JdkRI@RTSgvLQl%c?#8q!5fc-f~FrOdC17+B&QB3`bI80(ezqrn|{a2OlI1J zpW2|-PFH*ACiV1uSTOXE6WjsK_gFvtt_bmUK%0M4PJlu&()>==Dh%5A)nMZxmn-Jb z>C+K<3gBj4{e@Czu!)7dur1XNA>H??S9%0h-ivswNZEL=yu6$bC0f{w{4p@T&)k@nMo-3U+;IyrwA^+yhFCGkjgDvEt_4aPaAJ9VymO+_AX{F z0qv1Y=W(-fVx{9CcW4-*w?;H=vs{EnxV(6ePri$%W);3EO zT1ZxEw8`u6=K0~b!b0T34DR`WlL_pGf+k=;ygjX9S}@L~5hM?iW@TrJ|FAJKuDZzO z@W=LLR=}R>?d$bcH3)QJK6t?p1Ls=`!A&8t^Hw6ZVRkI+@FfEi$T97540v29XC{0I zVC4CiAa}JE%nac6{^N)!s~`%=WvP!FRkp{ZF09K4_qc1!P$JC@hN%Ajg!rDHQ9FNV z3u#Oe#NE>p(yGa8YtQg(^oJi2cWh_e=IteoCHbZ|1kW|CYI$nkt&_JEB9y_(uJOrt z_;*)!EuR137vG)}R>JtbKud;n%GQFXcrjrY0j%Z%RcK8@`dbAAB}sn)E7^y3CCAB4 zsB9hnayblA6OplD0(hLov3CXIXiaqzy+f`mq$jNRZ*Va>run4re3=b)=2b*`QOT<= zZcu@NckldtVzk${MCHiLV{(SzAv-pK`5))$WmP|1UZ5pA|1oUlwqo;Lnv>XW zQw1Nz>k&;VsW%?^f%%MAs$`H96`bK*no`t!jBl=yv5t3gB zTR=(F4)OUT3j?uY)%by_r&BIX%WXs^dL)v zP{T&Ni|RYH1*ekB28ILs>&4=x?pMftEh2uf6%Lc87ZNK!Ef5tNkUEzG%c|D<8#8ee zjXE}Pd&gMS!JE#rC-cbml!PGrKqN2FgLi!L*)m(cdF%_|q(y`$@F8>J5d%d)wrfiu}$1N0kU32=*K$ns2nA13hWp3RZ-YuD!`I+U!Nuxr*isp=?8A zm!?;v(>j6d4`!B-Yhh0q<2qRHzOv9+3Zd0|IPzp5N7)P7R9{nPZg()VomRfubrCCg zeh+<7#4xH&|jyJeXT_B=*~fToc@KEAlaC8p}T#HD2GzW zclpiz);oXH3~Uf1Z2wh+WWOxWbJu-u@k6(T z4U^FW{$`Yyz4otZnj(vu7W+f&F8jQ<+rbr<*)dfu&9oMnna1u!8;S8nQ?cU;4;{^K znH+190|TwMATEv0D|%@`)TGh#2JQ$+q+40((0;$MbvV&ai)fseZ+a?1aiV7CnZHc` zcl7BQo|#|&`qf8q=GR|-U)K9{!wBGg2>{sZFbG$+LUVTnAjo(N05wj5QophSa=HM( zRMNqU`EtuO|FJEv`E0@;o=trR#iLh;0qC=gSNjG00P9SO>ybqeTsz?WbDv~Q;6!Y( zl*+Dz_id+7kf%zQN~gYUkU8`8l56`?Y3%Ym&|{hbQ0@JpUQ-COm16%et;wzx$s8lV zZyk}l<}GqK4Y%Ne&^s4PEV|PS0NGNW*j7zkUa*i)dY@INlTlhjx>2G3iIe)9tPA=d zL0y%S#(_=uTRqb(O~O;!&G$@UwX8ga(9YHxt(NVCQ8jNXPn3Vo335Se4|h8P`b%`W zcWhchff;Ne->-$DW(!A0mCpfqk|hv37=Xhxb_I~*r7k#n`v~Als3H&i1&5f03m5&Cj$Vw zUag|)nRxER(t0D|0Qxqxd+BM^l#w3!J!oZhm;}v%A|!zMe-Xg!2LPB+m{+`iQ%NEE z#30!|jc$FwAQxJLiO|6dMlXh~PS6=Pc&771G?r}N6E5$F6Y95o>*d6xTT3?X^ij;X z3ZRZ_iuRb9V8yj#1ib(Z%blT@=iW&^s0NdM+PGu5HM-B^7S}!PUE{A7GXph$B-f2#R0&fZh5Qm_n-hn z7aNwY+XwAGz$VsHsefJ^s{a1vo{GM=N=_us=3BL!%Q{A<`wv;UnN%Ig9j<#@;ItWs zZhYB?c*J5l7uX76>5Y|z*w#K}qr{XZ=DX7qb=0AIC4#5+VwKO0qs_;k`QJHtdJC&M zB2)VeU8i(s(<#x^yjIIN^ST(yXz;}I4ge%F`TmG}JE!k{QVu}G<9s2GE#pvR`v>+0 zZ3A_PI8-}QS4(kI@cNyBF~qB*>9U}6)Q<5AM*o*>WvGw<00F{ffZ0`v2!M9mvh|EB zT7>?Q(1!7lrrt<|Fw`Ip0pD$N>`P;HTwVso8>dx-?gS#?#3;;seN592kPY%nr|lv1 zCpYF2l9*R<+;$>flW^BJH#E9LTOepf*XTI1V@p*#M=Y|O`r6H_Upf^)XQDXN{GLoi zgVX7E9R$m_RD$aSv0urvaY)Z2oG^tBX4$@ntwJ(%yIu5$xgxyT z+9#DaAHKH(EK;kkw(1)197uIY6z8y?d-vWouT1Q4C#Q{6o3LaY-@g14AEhX3?2l|g zt!R;Ns8gXHMi#T8F#sAz5dg*9iy>Z`GBO_sqOH&n)Im!5Ld;%__lfEu>KiQ8tF{2~B# zSQBe-DaL>wO+E~;5GA}QSEH$UjNzxh^BW$ebTb{>-Op9^o3N({loi}PiU7(pNIG}q zgA9Hy1$Km`t zZ`=th7}(cF9Qp*AifIC;LCYkU-q4&K;mV3T_y0ubAQH`_|SCDnyt}3d&nh3;+p9*ENf?0kiE|xweaClkwu?27eD? zj{tVoV4Nfb?-8Qzb(Vcv4uFYuS;2Lb0l$tZX1rQ7D`rr`JJ=~_>Rn3Jf_%^Iu=j25 zjqh5UrG+w0w2ln{n5}E-r_FE|-U6s`Y2(uY=?y0a6^zmuwFZ@R`wlJXXD98+_Bs~pE+fIO&=Z{U0?^D%TM&sZq;FO>++{CeqM zTn-=XmL@{Kb07B;E8^9F2wFd$MeFhj0bzcCStwZ?$*;T^6-HC8V#)~l- zXbAAC5&!~c+y)3I@W&)%0OAKF0EJ0IK-2D(zMl%>46x>YgjP-ybac&j%NTNU#Tg?=!dcOS?uJHvDJ3=DA^tAjoH@n;t{&eb%( zLf}O<=Z|Vh;O_tzIY|DtIp>cs1K>FUN0ARiQ(X7BasGhbKmA7k(QPyDpV$`z(SC9a z?juWm6#uwVg0-ORr=0%y!$tAuJZE#=hsVu4=V;7_$3fpa{e|2;`m?_G^8xa^efT2Z z9g@p>FD>GtKB^F?u=?~K%QT*XO_@7Hn9HkK{wF zMz8t!vmCJ*T7XaMFz5Kef_*j7PXqM4G2^QM>1ZhZU%F9OA1&(*K;yiS(LpGM4Qk#4 zl>z}(!%sw!tmopLY2hY34bp|%25_yGPGyr_K>?ZOG3%sbCmQuSE5u`$skY{(tSwV_ zA1)f{4U+b64>!zmyqo{Pp|74Q!f#xOkCm6kQtG_@tqNUuJysi&APL=UEJ4~F)AP)U z5Q0&CA7OeZ+%4WU&Go~NkL#Xqi~1)C_?D=DwZ+3hDj(1GJw7gnzxFzCQ3*>I26`Z# z{5gxGh}_~;Q|}iSO6H#v#3SAk<&l*B#5lTbp`WLo{-$76a_VHhSIJOec;!U_ zd`*IQ%&7wWYY{wRotnyk?voIJ5iXA$Em_z}TD+M+|QP%5-HlXCBr z^F}grE@LNzJ$wl!0LGElV%~WdKtYPz=IB@~^QJu)50W|98-UM|uSw+DImmR!rjv(Q)0OtI4nErcKw-F<1s zn%h=rj8p-vrW|^$ODRcHa!tVKDzm$4P18wbKuK5WL_WFwIsx_H zo9T|e6}@QH2}70k7a^danTKA&d#G$uQF&mw$xxJ#OX^xYdbnNLxVSD*B8-c=9k|Q+ z!`M~(W9|0Gb5Y0D*>1?YnxOtyt)t%sx0DUoR3|Tt>!Vcplo0vnEtaX;8U^ua;1#g+Lr*!>OftNxr34mIDSkWy zGz*`F0Rf1Dq#gd=Cnsf>sZ+`WFJrxU483TR=7L79L^*$#sUGQWYLQF(PBmQJN=;v7 zfD?oumjU{0%o?>Y4*Q$V*?yq`w5}k{aQ&$qD}F@xn0|I?8>WM&iv3o@Zc&E=rJ_vUue&<{QM|5ria~|Z zUuo<~tdX;Ne}=?Fc?Z``0IbNr*fTs@+}_ zYx~Tu%Fh@ai&;vCMPwfC@SkV{PTT8NtAKcdzIbt)Rh^o__ArBF?p||5p$(E`Ji%0S=pu&> zzTP63HTvSew0tklc;UU7ddO&Dk0JenZ31O329`+*lcXINjy8K#tmzibMF^`rISa#3 z!_^%+JQKFJaZ$-0V}aVlNoGkT!e8FRJ*oGM+9S>INpl5OqB^%vsEUl5=VSpnEWOU3 zq8UgKDlFkjsNR;#Mcox3B8;}eQ7V^m_xc1O>ZGXt6wBw8l*OtZl?|EA`PJFg{z4ws z$k^<@01QF|(S04z8eUk7iyN7uhzNw8deAj$4HId|G_5#8ate~{qVjp%twt$J;Q`t)XC*&1TGsDHh-z{nbysL?TjP2ttd#E9iuPJlHAVxB zVo5#=t8}x1LEvz*FSDf0-@Z_iUJ@T>8uI=5~){H{SM!W)j1T^%3n7Oh?=guIAN_v~bzgPAP8H@i*jzCrk^36f<{O%|GKaih)(}IIV$j=zgkns$D z{vaKNT(R$6=`)M|eV2>AL3_qO^u7MbuS9Tp$r)14M_U}S$^UEi_-{UL4Uj?k@rS#M zo8xnSvSepm&rcrNjLY}~>H11RF6%uKBp*l!{P^=`>+isM*DPBLyKg21RPDWd;G`3yn5P8y*qhi`IhBp8ULed5Rgzm8K z(c!ztZY1d@o;(MFQ)}+3dAjd21C%Z|KqAp^qu|5KfGy@jB>^We_$&p)+wc3e94&6n zRDRu~P#wzM=PIo%8MSKt-Bm8OhOLA;DK9O{&4o=pZ}#`z-d5OHo79-)abC;noYJZB z3kpI-IR*;R>u;%+olTUNiLTBjlq$xncn}hTZl#BLZgnto8&9j&*D4sqT&%6lVqb~s ze$%#quhvbUClycYQG6`b9&LDWq_kfrX3x9&hJ)xm{941?0wfQJi1P~%C8B$-zIZQD zcf+ZF_}o*SrF{=Z1&zXkqL-*lWYlYonEra*-w(V~H81KwZ>QQy60JT09dLAq!rbTo!)=rn#9)rdjfS0lus^WRXw42$uu&dj1DD z()7`X8XZo(j|L~9AeoxR-COO_rd(_y-f_{b=mu7$uqnZMwaG-3Xct+?q5XPbwP|rr z39_AvN-a#I>|w^KfIuGfItcsD7}1(m0(iYa=ZkCU&y3(h{IPx$YD@(~XSO8#pg>ZP z5A7BjCx{T09YRc$??Tp4QHxB4^JS5fw8YMCX?0!;l)-_4yT$QvXeS*N#hnJwma^#fO+@$xa`KP>wYJ! zZ#=$;x~5QQH5X&-(MY^;RX}c`$eLcfr?erv+;e)n9=@7$zfSG(p^YXEtTRa`1XDVn zdl#)$V^3AXx=044I(pp89Mq7~$dMND&T_JUOh&^ybJa(&n}yz0S_?SY81qb+L0kG&BB~^+OUVwGjj_7wLDN0unqZn^|C}UYA3>W@rVPRyyNM{4OcoC{dNy1t&!@**0N2+(g z#lEF}L}r$2VOecZID4q8p=?0~!Ogx_6P{RI7|ul<^mkmUU1W&(I3@+0%D0zKbfa=H-2=h|21`7cjge)^qIq zWbI<*fari2el*eSuf7Z~jA*IWp1KfI+WtNvA!+q<_)8gw5(vN; z?e4QfZj`$jhY8FV=_#raY`eV^lZ;xu_rY}t*;Ip5xCsh8v6Q;Tl%p|x+#RFmtK zBU~b2Dr#){uhHF9qKW;<4BgBqd**oxZKsmR+NOT@1IX93Yy@__(hxclZp{8Q8JIt!aB|#AWR~Wce8nyRUIi% zVRR2FcINVSa96J}4k*DY+=T8=Oy`^z;{Z_*FF*K7EeB_N3b~qA5>KzHmRFc~?7E(h zuEKVT)$KZ99Agc`=%%H%y0J6ro~co23-(V)susC*@Ytzf{!|60S(!dE@;p2?z)FN^ zb&B?$S<1IS3x$#cTS0wxvuP&>8*vgm%-Pi8tha}gvkDi8Wbvap<*GmuSr( zKS)2f;QX|4j16t7u(dTvp>*XDJ(&(v=s z(XlXos=OMr-f_R{n>+knbVX{2Ua769N2Nw2_$Y6Y*~=@$0*^!OHX&$wLac#F{mwS_ zu@;+lmAsM?EIqBen|?kX>!~8!q1^W}qyJJvX>cElFThpVW$Iy~@G`3w(Prh`rID-C z3)4n2^ImnN$4=qn;YGq#$A$2NwRPV9OSLOR>;yV`ubX=NEVU>#sUQRNYoB z0HyYlQS~60aL0!hM=(03^n3O0e#4lq1GQ(M7pZqnqc1~+i)vcM%`@yhWjDDGeXF!y zd{}sV{VR!>j>7gH)i#F+J#L@;*nJ8Su{+$}l!65HkF4Nrs1oE|-SI`HB3MgE5B?ET;p>`1XURJgcC7mcO#H?6UC(XPfia)3xTGJj8z<@y}X(>OuHtE&f@H zfAmG}bgbte-3c9rf7XK2r1sC93f&FU4SWBr#XoEDkKJiR=A>9=3}{gX#^aY?R(T)X zyX*LLfd3yE`A0@Rmyv(u0;D8=;BXq_EA7FXg#K}Cf!jV?!TcjUWQB+Y2NwRQK%o3T zuQB-l!z0`?yV$>Oyt1I^lU#saps(`KXBA$4-Xg?-5ZljkTC* z&ibO){6qWJYS79u^ZVS5>HoZWcANhHy4AR^UkvJ(p!WGSu?CI<&P_%x?OhH^e2w(> zR+6pohX%h(azl-JCfuNN^Az5`T9V(n&8})>sBoAMZBwiv;<;l0ORcTw;}a?rqGwAl z2@rO_&~JK9AHd0%k?xy)8#~=*URgKihcdSOInGR3zC=VP(rn><;@)O8+ zM9;#W;xvrGV7JkrY1>hCY3#`EQx*w#O3QfF4YB7yNzC+){UzYia74ahS2Gd-_;&(` zdmiT07|3V{><<-OSF6|;)#VTr+FlD0IwNggK?PrB8St{eI!V~s@~ami8gVd4e{~iG z1!qiBDy;a{!p{8F42ab=Mf%9;h3T#}r4Sc+UW-{I1fXB3aUKVjwG-kI#^~0PhNX-O zR>#uoia@6zyl^m2LTzHOsD0|=$PH6sQR*xO<2(q)p-!ERb?pa5MAN;MVCg|?H8-I0 z<_4tYybv}5(YDYgLgxG-Y_0GedZIdWi&|-m@R}&qtrM?xwYm5BFI$XbjiI~a>(Nl> zISq7}0wz~0Xtao6_{@L9+k8jc2aW}ToLo>xQI z?HuyA5xXiOev``Pr}@Lh^h%;4=#4KO_L?Z1+-&8+gxCZ`*ppRuzPUuG?hHHhI6gG6 zEGcPB?KZC1?QhVW607b2;0OY!waVy8!$qL|@$qE#2?x-b?tg8SIA3gvDTeMN!uW$H zzfz6IJl4}0Sy1dkaua7M7K3Knm!LB<|xdt8Bm; z&?W#H*OiP}phusBU{Txw_}iTX%R?q840;D!IPA1#QoZO~o4;(|5pAqv8%egh?#a@0 zSNU;MLlVmK@L)IG+n5e&(LP{uHGeMvIcE+q1f8yONjW~XfXg~p+<2tMI*|{fYMzALA0&X zN`WIJJRZ938Qw!93(#d*@APni+MxTCK(P>r2nk_FB8uIR9hRBlm_KRRb!rmE$NKV! zwo4ZZIUc3tFW2}R@VKvzO*uzsp`T4Wlc`}!{Dm>ujjAFSIFb3-v6&M@*5$u*3C2so za+{w5&+V>ahT|CLksBG{Ft65d2}&BLUN3zQB-J|-Y*+bSQ$t+r zPjd zS2QSMy!iCjh2_;U&T9S8dQ#Y89xYRdZqP!_yI>(tur~3!ReWlu1~V*nxK&HU z)HJz>1p#}o+r$c^!QvI|_$Bf*v^L@NS17O5Yy`?|2sGj&TbtE4HpgSFXm4(5cd7r? z>{dX|o%Y&w3UQi9WRZVY;$MGE1o67X&^I4Z$o1LsuGxrNlgs93uoa-o5jrRk6Iop=gb4B z(cCtL_BfMlJYHvnBsjm|rdI?)bSacg{8(!yCKKFQcZBy@i>5{^w}FXIba=BT8+J>iX6$Z8 zfF_kE*4@sPBm{lozdUI4p+e~x98s%X#`5)J*T7ZuCoS>M21h4I9_V*f4Yq8ct1TD- zT*?S{-40t*dg{1yWUFp2$|V^F36oJh3^l7@!O$LY!{Wo$YKyOPk(8Zby z(AkUO>qB`D?HGKzth zxzpm?z&Y=$-y%DJY>u?fIw0BM|eZ3~-Rp+B7`cc+YkM*{W z3-KXawHBO3CD+yl#blbCvq&7ta5x*zE z)h4Hey(T*+?J_Yoi8YxT{seW^prVdwC8xl|_)L>Pi^T2Qoh@&t20?fe@Lv2~%BZD? zHn}#&7~I&0)Qw)=#t@s;Qi|Fiy+2Ow9`p>hDneGWR-7&4mfxnPC-f07Y1{7cpzYOl zg&~fhZ+?2Mo^BWg*IKzox;aWtqxHjq{N_E literal 0 HcmV?d00001 diff --git a/plugin/Packages/msgpack-luau/assets/decode-encode-benchmark.png b/plugin/Packages/msgpack-luau/assets/decode-encode-benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..4dcbe8e9f636166ebda045942af35726488aa266 GIT binary patch literal 83775 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 literal 0 HcmV?d00001 diff --git a/plugin/Packages/msgpack-luau/assets/encode-benchmark.png b/plugin/Packages/msgpack-luau/assets/encode-benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..178c7d3fc70911e45f162d7f20dc1c072eed65a0 GIT binary patch literal 66559 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 F{tv7ijtKw& literal 0 HcmV?d00001 diff --git a/plugin/Packages/msgpack-luau/benchmark.project.json b/plugin/Packages/msgpack-luau/benchmark.project.json new file mode 100644 index 00000000..83f19f01 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark.project.json @@ -0,0 +1,17 @@ +{ + "name": "msgpack-luau", + "globIgnorePaths": ["**/*.spec.lua"], + "tree": { + "$className": "DataModel", + + "ReplicatedStorage": { + "$className": "ReplicatedStorage", + "$path": "src" + }, + + "ServerStorage": { + "$className": "ServerStorage", + "$path": "benchmark" + } + } +} diff --git a/plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua b/plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua new file mode 100644 index 00000000..32373e37 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua @@ -0,0 +1 @@ +return [======[{"sessionId":"474a8385-5a42-4d96-aa34-2d43fc917440","messageCursor":0,"instances":{"d539d2b3547c9166dae5ffd367a37cb3":{"Id":"d539d2b3547c9166dae5ffd367a37cb3","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Types","ClassName":"ModuleScript","Properties":{"Source":{"String":"local IContext: (obj: any) -> boolean = require(script.IContext)\nlocal ISubscription: (obj: any) -> boolean = require(script.ISubscription)\nlocal IWormhole: (obj: any) -> boolean = require(script.IWormhole)\nlocal ContextBlock: (obj: any) -> boolean = require(script.ContextBlock)\nlocal IPackage: (obj: any) -> boolean = require(script.IPackage)\n\nexport type IContext = IContext.IContext\nexport type ISubscription = ISubscription.ISubscription\nexport type IWormhole = IWormhole.IWormhole\nexport type ContextBlock = ContextBlock.ContextBlock\nexport type IPackage = IPackage.IPackage\n\nlocal Checks: { [string]: (obj: any) -> boolean } = {\n\t[\"isContext\"] = IContext,\n\t[\"isSubscription\"] = ISubscription,\n\t[\"isWormhole\"] = IWormhole,\n\t[\"isContextBlock\"] = ContextBlock,\n\t[\"isPackage\"] = IPackage,\n}\n\nreturn Checks\n"}},"Children":["133a9b005fbea6beac1d059ddc9fef0e","46bcc92ca5dc93da75ba685ae7cb4991","9c8522e307357cb958492ee98fd93042","6978a188358d64bfb2103712202a9922","c7c89a6fc94431da37e9bff85b81ab47"],"Metadata":{"ignoreUnknownInstances":false}},"6957f7983ac08acabf224266f365d3f7":{"Id":"6957f7983ac08acabf224266f365d3f7","Parent":"9cd69536a0dc973cffeed65b16a569e0","Name":"init.spec","ClassName":"ModuleScript","Properties":{"Source":{"String":"return function()\r\n\tlocal Promise = require(script.Parent)\r\n\tPromise.TEST = true\r\n\r\n\tlocal timeEvent = Instance.new(\"BindableEvent\")\r\n\tPromise._timeEvent = timeEvent.Event\r\n\r\n\tlocal advanceTime do\r\n\t\tlocal injectedPromiseTime = 0\r\n\r\n\t\tPromise._getTime = function()\r\n\t\t\treturn injectedPromiseTime\r\n\t\tend\r\n\r\n\t\tfunction advanceTime(delta)\r\n\t\t\tdelta = delta or (1/60)\r\n\r\n\t\t\tinjectedPromiseTime = injectedPromiseTime + delta\r\n\t\t\ttimeEvent:Fire(delta)\r\n\t\tend\r\n\tend\r\n\r\n\tlocal function pack(...)\r\n\t\tlocal len = select(\"#\", ...)\r\n\r\n\t\treturn len, { ... }\r\n\tend\r\n\r\n\tdescribe(\"Promise.Status\", function()\r\n\t\tit(\"should error if indexing nil value\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tlocal _ = Promise.Status.wrong\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.new\", function()\r\n\t\tit(\"should instantiate with a callback\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should invoke the given callback with resolve and reject\", function()\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal resolveArg\r\n\t\t\tlocal rejectArg\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve, reject)\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tresolveArg = resolve\r\n\t\t\t\trejectArg = reject\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(resolveArg).to.be.a(\"function\")\r\n\t\t\texpect(rejectArg).to.be.a(\"function\")\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\r\n\t\tit(\"should resolve promises on resolve()\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tresolve()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject promises on reject()\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve, reject)\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\treject()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject on error in callback\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\terror(\"hahah\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"hahah\")).to.be.ok()\r\n\r\n\t\t\t-- Loosely check for the pieces of the stack trace we expect\r\n\t\t\texpect(tostring(promise._values[1]):find(\"init.spec\")).to.be.ok()\r\n\t\t\texpect(tostring(promise._values[1]):find(\"runExecutor\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should work with C functions\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.new(tick):andThen(tick)\r\n\t\t\tend).to.never.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should have a nice tostring\", function()\r\n\t\t\texpect(tostring(Promise.resolve()):gmatch(\"Promise(Resolved)\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should allow yielding\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\tresolve(5)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\t\tend)\r\n\r\n\t\tit(\"should preserve stack traces of resolve-chained promises\", function()\r\n\t\t\tlocal function nestedCall(text)\r\n\t\t\t\terror(text)\r\n\t\t\tend\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tresolve(Promise.new(function()\r\n\t\t\t\t\tnestedCall(\"sample text\")\r\n\t\t\t\tend))\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\tlocal trace = tostring(promise._values[1])\r\n\t\t\texpect(trace:find(\"sample text\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"nestedCall\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"runExecutor\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"runPlanNode\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"...Rejected because it was chained to the following Promise, which encountered an error:\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should report errors from Promises with _error (< v2)\", function()\r\n\t\t\tlocal oldPromise = Promise.reject()\r\n\t\t\toldPromise._error = \"Sample error\"\r\n\r\n\t\t\tlocal newPromise = Promise.resolve():andThenReturn(oldPromise)\r\n\r\n\t\t\texpect(newPromise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\tlocal trace = tostring(newPromise._values[1])\r\n\t\t\texpect(trace:find(\"Sample error\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"...Rejected because it was chained to the following Promise, which encountered an error:\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"%[No stack trace available\")).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.defer\", function()\r\n\t\tit(\"should execute after the time event\", function()\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal promise = Promise.defer(function(resolve, reject, onCancel, nothing)\r\n\t\t\t\texpect(type(resolve)).to.equal(\"function\")\r\n\t\t\t\texpect(type(reject)).to.equal(\"function\")\r\n\t\t\t\texpect(type(onCancel)).to.equal(\"function\")\r\n\t\t\t\texpect(type(nothing)).to.equal(\"nil\")\r\n\r\n\t\t\t\tcallCount = callCount + 1\r\n\r\n\t\t\t\tresolve(\"foo\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.delay\", function()\r\n\t\tit(\"should schedule promise resolution\", function()\r\n\t\t\tlocal promise = Promise.delay(1)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tadvanceTime(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should allow for delays to be cancelled\", function()\r\n\t\t\tlocal promise = Promise.delay(2)\r\n\r\n\t\t\tPromise.delay(1):andThen(function()\r\n\t\t\t promise:cancel()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tadvanceTime(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\tadvanceTime(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.resolve\", function()\r\n\t\tit(\"should immediately resolve with a value\", function()\r\n\t\t\tlocal promise = Promise.resolve(5, 6)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\t\t\texpect(promise._values[2]).to.equal(6)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto passed promises\", function()\r\n\t\t\tlocal promise = Promise.resolve(Promise.new(function(_, reject)\r\n\t\t\t\treject(7)\r\n\t\t\tend))\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(7)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.reject\", function()\r\n\t\tit(\"should immediately reject with a value\", function()\r\n\t\t\tlocal promise = Promise.reject(6, 7)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(6)\r\n\t\t\texpect(promise._values[2]).to.equal(7)\r\n\t\tend)\r\n\r\n\t\tit(\"should pass a promise as-is as an error\", function()\r\n\t\t\tlocal innerPromise = Promise.new(function(resolve)\r\n\t\t\t\tresolve(6)\r\n\t\t\tend)\r\n\r\n\t\t\tlocal promise = Promise.reject(innerPromise)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(innerPromise)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:andThen\", function()\r\n\t\tit(\"should allow yielding\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal promise = Promise.resolve():andThen(function()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\treturn 5\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\t\tend)\r\n\r\n\t\tit(\"should run andThens on a new thread\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\r\n\t\t\tlocal resolve\r\n\t\t\tlocal parentPromise = Promise.new(function(_resolve)\r\n\t\t\t\tresolve = _resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal deadlockedPromise = parentPromise:andThen(function()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\treturn 5\r\n\t\t\tend)\r\n\r\n\t\t\tlocal successfulPromise = parentPromise:andThen(function()\r\n\t\t\t\treturn \"foo\"\r\n\t\t\tend)\r\n\r\n\t\t\texpect(parentPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tresolve()\r\n\t\t\texpect(successfulPromise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(successfulPromise._values[1]).to.equal(\"foo\")\r\n\t\t\texpect(deadlockedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto resolved promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal promise = Promise.resolve(5)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targsLength, args = pack(...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction()\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(5)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto rejected promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal promise = Promise.reject(5)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targsLength, args = pack(...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(5)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject on error in callback\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.resolve(1):andThen(function()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\terror(\"hahah\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"hahah\")).to.be.ok()\r\n\r\n\t\t\t-- Loosely check for the pieces of the stack trace we expect\r\n\t\t\texpect(tostring(promise._values[1]):find(\"init.spec\")).to.be.ok()\r\n\t\t\texpect(tostring(promise._values[1]):find(\"runExecutor\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto asynchronously resolved promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal startResolution\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tstartResolution = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targs = {...}\r\n\t\t\t\t\targsLength = select(\"#\", ...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction()\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\tstartResolution(6)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(6)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(6)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto asynchronously rejected promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal startResolution\r\n\t\t\tlocal promise = Promise.new(function(_, reject)\r\n\t\t\t\tstartResolution = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction()\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targs = {...}\r\n\t\t\t\t\targsLength = select(\"#\", ...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\tstartResolution(6)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(6)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(6)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should propagate errors through multiple levels\", function()\r\n\t\t\tlocal x, y, z\r\n\t\t\tPromise.new(function(resolve, reject)\r\n\t\t\t\treject(1, 2, 3)\r\n\t\t\tend)\r\n\t\t\t:andThen(function() end)\r\n\t\t\t:catch(function(a, b, c)\r\n\t\t\t\tx, y, z = a, b, c\r\n\t\t\tend)\r\n\r\n\t\t\texpect(x).to.equal(1)\r\n\t\t\texpect(y).to.equal(2)\r\n\t\t\texpect(z).to.equal(3)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:cancel\", function()\r\n\t\tit(\"should mark promises as cancelled and not resolve or reject them\", function()\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal finallyCallCount = 0\r\n\t\t\tlocal promise = Promise.new(function() end):andThen(function()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\tend):finally(function()\r\n\t\t\t\tfinallyCallCount = finallyCallCount + 1\r\n\t\t\tend)\r\n\r\n\t\t\tpromise:cancel()\r\n\t\t\tpromise:cancel() -- Twice to check call counts\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(finallyCallCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should call the cancellation hook once\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve, reject, onCancel)\r\n\t\t\t\tonCancel(function()\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend)\r\n\t\t\tend)\r\n\r\n\t\t\tpromise:cancel()\r\n\t\t\tpromise:cancel() -- Twice to check call count\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\tend)\r\n\r\n\t\tit(\"should propagate cancellations\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\r\n\t\t\tlocal consumer1 = promise:andThen()\r\n\t\t\tlocal consumer2 = promise:andThen()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(consumer1:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(consumer2:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tconsumer1:cancel()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(consumer1:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(consumer2:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tconsumer2:cancel()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(consumer1:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(consumer2:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should affect downstream promises\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\t\t\tlocal consumer = promise:andThen()\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(consumer:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should track consumers\", function()\r\n\t\t\tlocal pending = Promise.new(function() end)\r\n\t\t\tlocal p0 = Promise.resolve()\r\n\t\t\tlocal p1 = p0:finally(function() return pending end)\r\n\t\t\tlocal p2 = Promise.new(function(resolve)\r\n\t\t\t\tresolve(p1)\r\n\t\t\tend)\r\n\t\t\tlocal p3 = p2:andThen(function() end)\r\n\r\n\t\t\texpect(p1._parent).to.never.equal(p0)\r\n\t\t\texpect(p2._parent).to.never.equal(p1)\r\n\t\t\texpect(p2._consumers[p3]).to.be.ok()\r\n\t\t\texpect(p3._parent).to.equal(p2)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel resolved pending promises\", function()\r\n\t\t\tlocal p1 = Promise.new(function() end)\r\n\r\n\t\t\tlocal p2 = Promise.new(function(resolve)\r\n\t\t\t\tresolve(p1)\r\n\t\t\tend):finally(function() end)\r\n\r\n\t\t\tp2:cancel()\r\n\r\n\t\t\texpect(p1._status).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(p2._status).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:finally\", function()\r\n\t\tit(\"should be called upon resolve, reject, or cancel\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal function finally()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\tend\r\n\r\n\t\t\t-- Resolved promise\r\n\t\t\tPromise.new(function(resolve, reject)\r\n\t\t\t\tresolve()\r\n\t\t\tend):finally(finally)\r\n\r\n\t\t\t-- Chained promise\r\n\t\t\tPromise.resolve():andThen(function()\r\n\r\n\t\t\tend):finally(finally):finally(finally)\r\n\r\n\t\t\t-- Rejected promise\r\n\t\t\tPromise.reject():finally(finally)\r\n\r\n\t\t\tlocal cancelledPromise = Promise.new(function() end):finally(finally)\r\n\t\t\tcancelledPromise:cancel()\r\n\r\n\t\t\texpect(callCount).to.equal(5)\r\n\t\tend)\r\n\r\n\t\tit(\"should be a child of the parent Promise\", function()\r\n\t\t\tlocal p1 = Promise.new(function() end)\r\n\t\t\tlocal p2 = p1:finally(function() end)\r\n\r\n\t\t\texpect(p2._parent).to.equal(p1)\r\n\t\t\texpect(p1._consumers[p2]).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should forward return values\", function()\r\n\t\t\tlocal value\r\n\r\n\t\t\tPromise.resolve():finally(function()\r\n\t\t\t\treturn 1\r\n\t\t\tend):andThen(function(v)\r\n\t\t\t\tvalue = v\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value).to.equal(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.all\", function()\r\n\t\tit(\"should error if given something other than a table\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.all(1)\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should resolve instantly with an empty table if given no promises\", function()\r\n\t\t\tlocal promise = Promise.all({})\r\n\t\t\tlocal success, value = promise:_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(value).to.be.a(\"table\")\r\n\t\t\texpect(next(value)).to.equal(nil)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if given non-promise values\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.all({{}, {}, {}})\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should wait for all promises to be resolved and return their values\", function()\r\n\t\t\tlocal resolveFunctions = {}\r\n\r\n\t\t\tlocal testValuesLength, testValues = pack(1, \"A string\", nil, false)\r\n\r\n\t\t\tlocal promises = {}\r\n\r\n\t\t\tfor i = 1, testValuesLength do\r\n\t\t\t\tpromises[i] = Promise.new(function(resolve)\r\n\t\t\t\t\tresolveFunctions[i] = {resolve, testValues[i]}\r\n\t\t\t\tend)\r\n\t\t\tend\r\n\r\n\t\t\tlocal combinedPromise = Promise.all(promises)\r\n\r\n\t\t\tfor _, resolve in ipairs(resolveFunctions) do\r\n\t\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\t\tresolve[1](resolve[2])\r\n\t\t\tend\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, resolved = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(2)\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(resolved).to.be.a(\"table\")\r\n\t\t\texpect(#resolved).to.equal(#promises)\r\n\r\n\t\t\tfor i = 1, testValuesLength do\r\n\t\t\t\texpect(resolved[i]).to.equal(testValues[i])\r\n\t\t\tend\r\n\t\tend)\r\n\r\n\t\tit(\"should reject if any individual promise rejected\", function()\r\n\t\t\tlocal rejectA\r\n\t\t\tlocal resolveB\r\n\r\n\t\t\tlocal a = Promise.new(function(_, reject)\r\n\t\t\t\trejectA = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal b = Promise.new(function(resolve)\r\n\t\t\t\tresolveB = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal combinedPromise = Promise.all({a, b})\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\trejectA(\"baz\", \"qux\")\r\n\t\t\tresolveB(\"foo\", \"bar\")\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, first, second = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(3)\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(first).to.equal(\"baz\")\r\n\t\t\texpect(second).to.equal(\"qux\")\r\n\t\t\texpect(b:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should not resolve if resolved after rejecting\", function()\r\n\t\t\tlocal rejectA\r\n\t\t\tlocal resolveB\r\n\r\n\t\t\tlocal a = Promise.new(function(_, reject)\r\n\t\t\t\trejectA = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal b = Promise.new(function(resolve)\r\n\t\t\t\tresolveB = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal combinedPromise = Promise.all({a, b})\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\trejectA(\"baz\", \"qux\")\r\n\t\t\tresolveB(\"foo\", \"bar\")\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, first, second = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(3)\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(first).to.equal(\"baz\")\r\n\t\t\texpect(second).to.equal(\"qux\")\r\n\t\tend)\r\n\r\n\t\tit(\"should only reject once\", function()\r\n\t\t\tlocal rejectA\r\n\t\t\tlocal rejectB\r\n\r\n\t\t\tlocal a = Promise.new(function(_, reject)\r\n\t\t\t\trejectA = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal b = Promise.new(function(_, reject)\r\n\t\t\t\trejectB = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal combinedPromise = Promise.all({a, b})\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\trejectA(\"foo\", \"bar\")\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\trejectB(\"baz\", \"qux\")\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, first, second = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(3)\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(first).to.equal(\"foo\")\r\n\t\t\texpect(second).to.equal(\"bar\")\r\n\t\tend)\r\n\r\n\t\tit(\"should error if a non-array table is passed in\", function()\r\n\t\t\tlocal ok, err = pcall(function()\r\n\t\t\t\tPromise.all(Promise.new(function() end))\r\n\t\t\tend)\r\n\r\n\t\t\texpect(ok).to.be.ok()\r\n\t\t\texpect(err:find(\"Non%-promise\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel pending promises if one rejects\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\texpect(Promise.all({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tp\r\n\t\t\t}):getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.all(promises):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.fold\", function()\r\n\t\tit(\"should return the initial value in a promise when the list is empty\", function()\r\n\t\t\tlocal initialValue = {}\r\n\t\t\tlocal result = Promise.fold({}, function()\r\n\t\t\t\terror(\"should not be called\")\r\n\t\t\tend, initialValue)\r\n\r\n\t\t\texpect(Promise.is(result)).to.equal(true)\r\n\t\t\texpect(result:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(result:expect()).to.equal(initialValue)\r\n\t\tend)\r\n\r\n\t\tit(\"should accept promises in the list\", function()\r\n\t\t\tlocal sum = Promise.fold({Promise.resolve(1), 2, 3}, function(sum, element)\r\n\t\t\t\treturn sum + element\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(sum:expect()).to.equal(6)\r\n\t\tend)\r\n\r\n\t\tit(\"should always return a promise even if the list or reducer don't use them\", function()\r\n\t\t\tlocal sum = Promise.fold({1, 2, 3}, function(sum, element, index)\r\n\t\t\t\tif index == 2 then\r\n\t\t\t\t\treturn Promise.delay(1):andThenReturn(sum + element)\r\n\t\t\t\telse\r\n\t\t\t\t\treturn sum + element\r\n\t\t\t\tend\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tadvanceTime(2)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(sum:expect()).to.equal(6)\r\n\t\tend)\r\n\r\n\t\tit(\"should return the first rejected promise\", function()\r\n\t\t\tlocal errorMessage = \"foo\"\r\n\t\t\tlocal sum = Promise.fold({1, 2, 3}, function(sum, element, index)\r\n\t\t\t\tif index == 2 then\r\n\t\t\t\t\treturn Promise.reject(errorMessage)\r\n\t\t\t\telse\r\n\t\t\t\t\treturn sum + element\r\n\t\t\t\tend\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\tlocal status, rejection = sum:awaitStatus()\r\n\t\t\texpect(status).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(rejection).to.equal(errorMessage)\r\n\t\tend)\r\n\r\n\t\tit(\"should return the first canceled promise\", function()\r\n\t\t\tlocal secondPromise\r\n\t\t\tlocal sum = Promise.fold({1, 2, 3}, function(sum, element, index)\r\n\t\t\t\tif index == 1 then\r\n\t\t\t\t\treturn sum + element\r\n\t\t\t\telseif index == 2 then\r\n\t\t\t\t\tsecondPromise = Promise.delay(1):andThenReturn(sum + element)\r\n\t\t\t\t\treturn secondPromise\r\n\t\t\t\telse\r\n\t\t\t\t\terror('this should not run if the promise is cancelled')\r\n\t\t\t\tend\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tsecondPromise:cancel()\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.race\", function()\r\n\t\tit(\"should resolve with the first settled value\", function()\r\n\t\t\tlocal promise = Promise.race({\r\n\t\t\t\tPromise.resolve(1),\r\n\t\t\t\tPromise.resolve(2)\r\n\t\t\t}):andThen(function(value)\r\n\t\t\t\texpect(value).to.equal(1)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel other promises\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\t\t\tpromise:andThen(function() end)\r\n\t\t\tlocal promises = {\r\n\t\t\t\tpromise,\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function(resolve)\r\n\t\t\t\t\tresolve(2)\r\n\t\t\t\tend)\r\n\t\t\t}\r\n\r\n\t\t\tlocal promise = Promise.race(promises)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(2)\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Resolved)\r\n\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\texpect(Promise.race({\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tp\r\n\t\t\t}):getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if a non-array table is passed in\", function()\r\n\t\t\tlocal ok, err = pcall(function()\r\n\t\t\t\tPromise.race(Promise.new(function() end))\r\n\t\t\tend)\r\n\r\n\t\t\texpect(ok).to.be.ok()\r\n\t\t\texpect(err:find(\"Non%-promise\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.race(promises):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.promisify\", function()\r\n\t\tit(\"should wrap functions\", function()\r\n\t\t\tlocal function test(n)\r\n\t\t\t\treturn n + 1\r\n\t\t\tend\r\n\r\n\t\t\tlocal promisified = Promise.promisify(test)\r\n\t\t\tlocal promise = promisified(1)\r\n\t\t\tlocal success, result = promise:_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(result).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should catch errors after a yield\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal test = Promise.promisify(function ()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\terror('errortext')\r\n\t\t\tend)\r\n\r\n\t\t\tlocal promise = test()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"errortext\")).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.tap\", function()\r\n\t\tit(\"should thread through values\", function()\r\n\t\t\tlocal first, second\r\n\r\n\t\t\tPromise.resolve(1)\r\n\t\t\t\t:andThen(function(v)\r\n\t\t\t\t\treturn v + 1\r\n\t\t\t\tend)\r\n\t\t\t\t:tap(function(v)\r\n\t\t\t\t\tfirst = v\r\n\t\t\t\t\treturn v + 1\r\n\t\t\t\tend)\r\n\t\t\t\t:andThen(function(v)\r\n\t\t\t\t\tsecond = v\r\n\t\t\t\tend)\r\n\r\n\t\t\texpect(first).to.equal(2)\r\n\t\t\texpect(second).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto promises\", function()\r\n\t\t\tlocal resolveInner, finalValue\r\n\r\n\t\t\tlocal promise = Promise.resolve(1)\r\n\t\t\t\t:tap(function()\r\n\t\t\t\t\treturn Promise.new(function(resolve)\r\n\t\t\t\t\t\tresolveInner = resolve\r\n\t\t\t\t\tend)\r\n\t\t\t\tend)\r\n\t\t\t\t:andThen(function(v)\r\n\t\t\t\t\tfinalValue = v\r\n\t\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(finalValue).to.never.be.ok()\r\n\r\n\t\t\tresolveInner(1)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(finalValue).to.equal(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.try\", function()\r\n\t\tit(\"should catch synchronous errors\", function()\r\n\t\t\tlocal errorText\r\n\t\t\tPromise.try(function()\r\n\t\t\t\terror('errortext')\r\n\t\t\tend):catch(function(e)\r\n\t\t\t\terrorText = tostring(e)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(errorText:find(\"errortext\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with error objects\", function()\r\n\t\t\tlocal object = {}\r\n\t\t\tlocal success, value = Promise.try(function()\r\n\t\t\t\terror(object)\r\n\t\t\tend):_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(value).to.equal(object)\r\n\t\tend)\r\n\r\n\t\tit(\"should catch asynchronous errors\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal promise = Promise.try(function()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\terror('errortext')\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"errortext\")).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:andThenReturn\", function()\r\n\t\tit(\"should return the given values\", function()\r\n\t\t\tlocal value1, value2\r\n\r\n\t\t\tPromise.resolve():andThenReturn(1, 2):andThen(function(one, two)\r\n\t\t\t\tvalue1 = one\r\n\t\t\t\tvalue2 = two\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value1).to.equal(1)\r\n\t\t\texpect(value2).to.equal(2)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:doneReturn\", function()\r\n\t\tit(\"should return the given values\", function()\r\n\t\t\tlocal value1, value2\r\n\r\n\t\t\tPromise.resolve():doneReturn(1, 2):andThen(function(one, two)\r\n\t\t\t\tvalue1 = one\r\n\t\t\t\tvalue2 = two\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value1).to.equal(1)\r\n\t\t\texpect(value2).to.equal(2)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:andThenCall\", function()\r\n\t\tit(\"should call the given function with arguments\", function()\r\n\t\t\tlocal value1, value2\r\n\t\t\tPromise.resolve():andThenCall(function(a, b)\r\n\t\t\t\tvalue1 = a\r\n\t\t\t\tvalue2 = b\r\n\t\t\tend, 3, 4)\r\n\r\n\t\t\texpect(value1).to.equal(3)\r\n\t\t\texpect(value2).to.equal(4)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:doneCall\", function()\r\n\t\tit(\"should call the given function with arguments\", function()\r\n\t\t\tlocal value1, value2\r\n\t\t\tPromise.resolve():doneCall(function(a, b)\r\n\t\t\t\tvalue1 = a\r\n\t\t\t\tvalue2 = b\r\n\t\t\tend, 3, 4)\r\n\r\n\t\t\texpect(value1).to.equal(3)\r\n\t\t\texpect(value2).to.equal(4)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:done\", function()\r\n\t\tit(\"should trigger on resolve or cancel\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\t\t\tlocal value\r\n\r\n\t\t\tlocal p = promise:done(function()\r\n\t\t\t\tvalue = true\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value).to.never.be.ok()\r\n\t\t\tpromise:cancel()\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(value).to.equal(true)\r\n\r\n\t\t\tlocal never, always\r\n\t\t\tPromise.reject():done(function()\r\n\t\t\t\tnever = true\r\n\t\t\tend):finally(function()\r\n\t\t\t\talways = true\r\n\t\t\tend)\r\n\r\n\t\t\texpect(never).to.never.be.ok()\r\n\t\t\texpect(always).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.some\", function()\r\n\t\tit(\"should resolve once the goal is reached\", function()\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(1),\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tPromise.resolve(2)\r\n\t\t\t}, 2)\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][1]).to.equal(1)\r\n\t\t\texpect(p._values[1][2]).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if the goal can't be reached\", function()\r\n\t\t\texpect(Promise.some({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.reject()\r\n\t\t\t}, 2):getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\tlocal reject\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.new(function(_, r) reject = r end)\r\n\t\t\t}, 2)\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\treject(\"foo\")\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p._values[1]).to.equal(\"foo\")\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel pending Promises once the goal is reached\", function()\r\n\t\t\tlocal resolve\r\n\t\t\tlocal pending1 = Promise.new(function() end)\r\n\t\t\tlocal pending2 = Promise.new(function(r) resolve = r end)\r\n\r\n\t\t\tlocal some = Promise.some({\r\n\t\t\t\tpending1,\r\n\t\t\t\tpending2,\r\n\t\t\t\tPromise.resolve()\r\n\t\t\t}, 2)\r\n\r\n\t\t\texpect(some:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(pending1:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(pending2:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tresolve()\r\n\r\n\t\t\texpect(some:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(pending1:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(pending2:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if passed a non-number\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.some({}, \"non-number\")\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should return an empty array if amount is 0\", function()\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(2)\r\n\t\t\t}, 0)\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#p._values[1]).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should not return extra values\", function()\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(1),\r\n\t\t\t\tPromise.resolve(2),\r\n\t\t\t\tPromise.resolve(3),\r\n\t\t\t\tPromise.resolve(4),\r\n\t\t\t}, 2)\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#p._values[1]).to.equal(2)\r\n\t\t\texpect(p._values[1][1]).to.equal(1)\r\n\t\t\texpect(p._values[1][2]).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.some(promises, 3):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\r\n\t\tdescribe(\"Promise.any\", function()\r\n\t\t\tit(\"should return the value directly\", function()\r\n\t\t\t\tlocal p = Promise.any({\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.resolve(1)\r\n\t\t\t\t})\r\n\r\n\t\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\t\texpect(p._values[1]).to.equal(1)\r\n\t\t\tend)\r\n\r\n\t\t\tit(\"should error if all are rejected\", function()\r\n\t\t\t\texpect(Promise.any({\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t}):getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\tend)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.allSettled\", function()\r\n\t\tit(\"should resolve with an array of PromiseStatuses\", function()\r\n\t\t\tlocal reject\r\n\t\t\tlocal p = Promise.allSettled({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.new(function(_, r) reject = r end)\r\n\t\t\t})\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\treject()\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][1]).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][2]).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p._values[1][3]).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][4]).to.equal(Promise.Status.Rejected)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.allSettled(promises):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:await\", function()\r\n\t\tit(\"should return the correct values\", function()\r\n\t\t\tlocal promise = Promise.resolve(5, 6, nil, 7)\r\n\r\n\t\t\tlocal a, b, c, d, e = promise:await()\r\n\r\n\t\t\texpect(a).to.equal(true)\r\n\t\t\texpect(b).to.equal(5)\r\n\t\t\texpect(c).to.equal(6)\r\n\t\t\texpect(d).to.equal(nil)\r\n\t\t\texpect(e).to.equal(7)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:expect\", function()\r\n\t\tit(\"should throw the correct values\", function()\r\n\t\t\tlocal rejectionValue = {}\r\n\t\t\tlocal promise = Promise.reject(rejectionValue)\r\n\r\n\t\t\tlocal success, value = pcall(function()\r\n\t\t\t\tpromise:expect()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(value).to.equal(rejectionValue)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:now\", function()\r\n\t\tit(\"should resolve if the Promise is resolved\", function()\r\n\t\t\tlocal success, value = Promise.resolve(\"foo\"):now():_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(value).to.equal(\"foo\")\r\n\t\tend)\r\n\r\n\t\tit(\"should reject if the Promise is not resolved\", function()\r\n\t\t\tlocal success, value = Promise.new(function() end):now():_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(Promise.Error.isKind(value, \"NotResolvedInTime\")).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with a custom rejection value\", function()\r\n\t\t\tlocal success, value = Promise.new(function() end):now(\"foo\"):_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(value).to.equal(\"foo\")\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.each\", function()\r\n\t\tit(\"should iterate\", function()\r\n\t\t\tlocal ok, result = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\", \"qux\"\r\n\t\t\t}, function(...)\r\n\t\t\t\treturn {...}\r\n\t\t\tend):_unwrap()\r\n\r\n\t\t\texpect(ok).to.equal(true)\r\n\t\t\texpect(result[1][1]).to.equal(\"foo\")\r\n\t\t\texpect(result[1][2]).to.equal(1)\r\n\t\t\texpect(result[2][1]).to.equal(\"bar\")\r\n\t\t\texpect(result[2][2]).to.equal(2)\r\n\t\t\texpect(result[3][1]).to.equal(\"baz\")\r\n\t\t\texpect(result[3][2]).to.equal(3)\r\n\t\t\texpect(result[4][1]).to.equal(\"qux\")\r\n\t\t\texpect(result[4][2]).to.equal(4)\r\n\t\tend)\r\n\r\n\t\tit(\"should iterate serially\", function()\r\n\t\t\tlocal resolves = {}\r\n\t\t\tlocal callCounts = {}\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\"\r\n\t\t\t}, function(value, index)\r\n\t\t\t\tcallCounts[index] = (callCounts[index] or 0) + 1\r\n\r\n\t\t\t\treturn Promise.new(function(resolve)\r\n\t\t\t\t\ttable.insert(resolves, function()\r\n\t\t\t\t\t\tresolve(value:upper())\r\n\t\t\t\t\tend)\r\n\t\t\t\tend)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(#resolves).to.equal(1)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.never.be.ok()\r\n\r\n\t\t\ttable.remove(resolves, 1)()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(#resolves).to.equal(1)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.equal(1)\r\n\t\t\texpect(callCounts[3]).to.never.be.ok()\r\n\r\n\t\t\ttable.remove(resolves, 1)()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.equal(1)\r\n\t\t\texpect(callCounts[3]).to.equal(1)\r\n\r\n\t\t\ttable.remove(resolves, 1)()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(type(promise._values[1])).to.equal(\"table\")\r\n\t\t\texpect(type(promise._values[2])).to.equal(\"nil\")\r\n\r\n\t\t\tlocal result = promise._values[1]\r\n\r\n\t\t\texpect(result[1]).to.equal(\"FOO\")\r\n\t\t\texpect(result[2]).to.equal(\"BAR\")\r\n\t\t\texpect(result[3]).to.equal(\"BAZ\")\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with the value if the predicate promise rejects\", function()\r\n\t\t\tlocal promise = Promise.each({1, 2, 3}, function()\r\n\t\t\t\treturn Promise.reject(\"foobar\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foobar\")\r\n\t\tend)\r\n\r\n\t\tit(\"should allow Promises to be in the list and wait when it gets to them\", function()\r\n\t\t\tlocal innerResolve\r\n\t\t\tlocal innerPromise = Promise.new(function(resolve)\r\n\t\t\t\tinnerResolve = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\tinnerPromise\r\n\t\t\t}, function(value)\r\n\t\t\t\treturn value * 2\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tinnerResolve(2)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1][1]).to.equal(4)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with the value if a Promise from the list rejects\", function()\r\n\t\t\tlocal called = false\r\n\t\t\tlocal promise = Promise.each({1, 2, Promise.reject(\"foobar\")}, function(value)\r\n\t\t\t\tcalled = true\r\n\t\t\t\treturn \"never\"\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foobar\")\r\n\t\t\texpect(called).to.equal(false)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject immediately if there's a cancelled Promise in the list initially\", function()\r\n\t\t\tlocal cancelled = Promise.new(function() end)\r\n\t\t\tcancelled:cancel()\r\n\r\n\t\t\tlocal called = false\r\n\t\t\tlocal promise = Promise.each({1, 2, cancelled}, function()\r\n\t\t\t\tcalled = true\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(called).to.equal(false)\r\n\t\t\texpect(promise._values[1].kind).to.equal(Promise.Error.Kind.AlreadyCancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should stop iteration if Promise.each is cancelled\", function()\r\n\t\t\tlocal callCounts = {}\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\"\r\n\t\t\t}, function(value, index)\r\n\t\t\t\tcallCounts[index] = (callCounts[index] or 0) + 1\r\n\r\n\t\t\t\treturn Promise.new(function()\r\n\r\n\t\t\t\tend)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.never.be.ok()\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.never.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel the Promise returned from the predicate if Promise.each is cancelled\", function()\r\n\t\t\tlocal innerPromise\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\"\r\n\t\t\t}, function(value, index)\r\n\t\t\t\tinnerPromise = Promise.new(function()\r\n\t\t\t\tend)\r\n\t\t\t\treturn innerPromise\r\n\t\t\tend)\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(innerPromise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel Promises in the list if Promise.each is cancelled\", function()\r\n\t\t\tlocal innerPromise = Promise.new(function() end)\r\n\r\n\t\t\tlocal promise = Promise.each({innerPromise}, function() end)\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(innerPromise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.retry\", function()\r\n\t\tit(\"should retry N times\", function()\r\n\t\t\tlocal counter = 0\r\n\r\n\t\t\tlocal promise = Promise.retry(function(parameter)\r\n\t\t\t\texpect(parameter).to.equal(\"foo\")\r\n\r\n\t\t\t\tcounter = counter + 1\r\n\r\n\t\t\t\tif counter == 5 then\r\n\t\t\t\t\treturn Promise.resolve(\"ok\")\r\n\t\t\t\tend\r\n\r\n\t\t\t\treturn Promise.reject(\"fail\")\r\n\t\t\tend, 5, \"foo\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(\"ok\")\r\n\t\tend)\r\n\r\n\t\tit(\"should reject if threshold is exceeded\", function()\r\n\t\t\tlocal promise = Promise.retry(function()\r\n\t\t\t\treturn Promise.reject(\"fail\")\r\n\t\t\tend, 5)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(\"fail\")\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.fromEvent\", function()\r\n\t\tit(\"should convert a Promise into an event\", function()\r\n\t\t\tlocal event = Instance.new(\"BindableEvent\")\r\n\r\n\t\t\tlocal promise = Promise.fromEvent(event.Event)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tevent:Fire(\"foo\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foo\")\r\n\t\tend)\r\n\r\n\t\tit(\"should convert a Promise into an event with the predicate\", function()\r\n\t\t\tlocal event = Instance.new(\"BindableEvent\")\r\n\r\n\t\t\tlocal promise = Promise.fromEvent(event.Event, function(param)\r\n\t\t\t\treturn param == \"foo\"\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tevent:Fire(\"bar\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tevent:Fire(\"foo\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foo\")\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.is\", function()\r\n\t\tit(\"should work with current version\", function()\r\n\t\t\tlocal promise = Promise.resolve(1)\r\n\r\n\t\t\texpect(Promise.is(promise)).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should work with any object with an andThen\", function()\r\n\t\t\tlocal obj = {\r\n\t\t\t\tandThen = function()\r\n\t\t\t\t\treturn 1\r\n\t\t\t\tend\r\n\t\t\t}\r\n\r\n\t\t\texpect(Promise.is(obj)).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should work with older promises\", function()\r\n\t\t\tlocal OldPromise = {}\r\n\t\t\tOldPromise.prototype = {}\r\n\t\t\tOldPromise.__index = OldPromise.prototype\r\n\r\n\t\t\tfunction OldPromise.prototype:andThen()\r\n\r\n\t\t\tend\r\n\r\n\t\t\tlocal oldPromise = setmetatable({}, OldPromise)\r\n\r\n\t\t\texpect(Promise.is(oldPromise)).to.equal(true)\r\n\t\tend)\r\n\tend)\r\nend\r\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"8d7217c7f2aaf98a45b764cd6f5e70a3":{"Id":"8d7217c7f2aaf98a45b764cd6f5e70a3","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"Promise","ClassName":"ModuleScript","Properties":{"Source":{"String":"return require(script.Parent._Index[\"evaera_promise@3.1.0\"][\"promise\"])\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"5d73467a1d588843ea200ceeebce3eb5":{"Id":"5d73467a1d588843ea200ceeebce3eb5","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"Workspace","ClassName":"Workspace","Properties":{"FilteringEnabled":{"Bool":true}},"Children":["1a31bb8458eefe0db2d00eab15f6b14f"],"Metadata":{"ignoreUnknownInstances":true}},"3b4376cbee89fe33103b0e674597c0ea":{"Id":"3b4376cbee89fe33103b0e674597c0ea","Parent":"aa5772ae3a91cb8b93b724d7c5a15190","Name":"promiseAwaitValue","ClassName":"ModuleScript","Properties":{"Source":{"String":"local ReplicatedStorage: ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\n\nlocal Packages: Folder = ReplicatedStorage:WaitForChild(\"Packages\") :: Folder\nlocal Promise = require(Packages:WaitForChild(\"Promise\"))\n\nlocal function promiseAwaitForValue(value: string, list: { [string]: any }): any\n\tlocal conn: RBXScriptConnection\n\tlocal promise = Promise.new(function(resolve, _, onCancel)\n\t\tconn = RunService.Heartbeat:Connect(function()\n\t\t\tlocal _context = list[value]\n\t\t\tif _context then\n\t\t\t\tresolve(_context)\n\t\t\tend\n\t\tend)\n\t\tonCancel(function()\n\t\t\tconn:Disconnect()\n\t\tend)\n\tend):finally(function()\n\t\tconn:Disconnect()\n\tend)\n\n\treturn promise\nend\n\nreturn promiseAwaitForValue\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"b006666de7a034699290c8f7a42446bf":{"Id":"b006666de7a034699290c8f7a42446bf","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Subscription","ClassName":"ModuleScript","Properties":{"Source":{"String":"local types = require(script.Parent.Types)\r\nlocal t = require(script.Parent.Parent.t)\r\n\r\nexport type ISubscription = types.ISubscription\r\n\r\nlocal Subscription: ISubscription\r\nSubscription.__index = Subscription\r\n\r\nfunction Subscription.new(context: string, action: string, callback: () -> ()?): ISubscription\r\n\r\n\tlocal self: ISubscription\r\n\tself.Context = context,\r\n\tself.Action = action,\r\n\tself.Callback = callback\r\n\r\n\treturn setmetatable(self, Subscription) :: ISubscription\r\nend\r\n\r\nfunction Subscription.is(obj: any): boolean\r\n\treturn types.isSubscription(obj)\r\nend\r\n\r\nfunction Subscription:Subscribe(callback: () -> nil): ISubscription\r\n\treturn self\r\nend\r\n\r\nreturn Subscription"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"c7c89a6fc94431da37e9bff85b81ab47":{"Id":"c7c89a6fc94431da37e9bff85b81ab47","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"IWormhole","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\r\n\r\nlocal ContextBlock: (obj: any) -> boolean = require(script.Parent.ContextBlock)\r\nlocal ISubscription: (obj: any) -> boolean = require(script.Parent.ISubscription)\r\nlocal IContext: (obj: any) -> boolean = require(script.Parent.IContext)\r\n\r\ntype ContextBlock = ContextBlock.ContextBlock\r\ntype ISubscription = ISubscription.ISubscription\r\ntype IContext = IContext.IContext\r\n\r\nlocal isWormhole: (obj: any) -> boolean = t.interface({\r\n\t_Storage = t.instanceIsA(\"Folder\"),\r\n\t_Contexts = t.map(t.string, t.any)\r\n})\r\n\r\nexport type IWormhole = {\r\n\t_Storage: Folder,\r\n\t_Contexts: {[string]: ContextBlock},\r\n\r\n\t__index: IWormhole,\r\n\r\n\tnew: (wormhole: IWormhole) -> IWormhole,\r\n\tis: (obj: any) -> boolean,\r\n\r\n\tawaitContext: (wormhole: IWormhole, context: string, timeout: number?) -> ContextBlock,\r\n\taddContext: (wormhole: IWormhole, context: string) -> ContextBlock,\r\n\tmakeSubscription: (wormhole: IWormhole, context: string, action: string) ->ISubscription,\r\n\tdoSubscribe: (wormhole: IWormhole, subscription: ISubscription, callback: () -> nil?) -> ()\r\n}\r\n\r\nreturn function(obj)\r\n\treturn isWormhole(obj) :: boolean\r\nend"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"aa5772ae3a91cb8b93b724d7c5a15190":{"Id":"aa5772ae3a91cb8b93b724d7c5a15190","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Promises","ClassName":"Folder","Properties":{},"Children":["3b4376cbee89fe33103b0e674597c0ea"],"Metadata":{"ignoreUnknownInstances":false}},"9c8522e307357cb958492ee98fd93042":{"Id":"9c8522e307357cb958492ee98fd93042","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"IPackage","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\n\nlocal function isDateTime(value: any): (boolean, string?)\n\tlocal valueType = typeof(value)\n\tif valueType == \"DateTime\" then\n\t\treturn true\n\telse\n\t\treturn false, string.format(\"DateTime expected, got %s\", valueType)\n\tend\nend\n\nlocal isPackage: (obj: any) -> boolean = t.interface({\n\tContext = t.string,\n\tAction = t.string,\n\tDateTime = isDateTime,\n\tPayload = t.map(t.string, t.any),\n})\n\nexport type IPackage = {\n\tContext: string,\n\tAction: string,\n\tTimestamp: DateTime,\n\tPayload: { [string]: any },\n}\n\nreturn function(obj: any): boolean\n\treturn isPackage(obj)\nend\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"2d5696ee5bdf4c8a0a542bf58f63b738":{"Id":"2d5696ee5bdf4c8a0a542bf58f63b738","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Context","ClassName":"ModuleScript","Properties":{"Source":{"String":"local types = require(script.Parent.Types)\nlocal t = require(script.Parent.Parent.t)\n\nexport type IContext = types.IContext\n\ntype IWormhole = types.IWormhole\n\nlocal Context: IContext\nContext.__index = Context\n\nfunction Context.new(context: string, wormhole: IWormhole): IContext\n\tlocal check = t.strict(t.string)\n\tcheck(context)\n\n\tlocal self: IContext\n\tself.Name = context\n\tself.Subscriptions = {}\n\n\treturn setmetatable(self, Context) :: IContext\nend\n\nfunction Context.is(obj: any): boolean\n\treturn types.isContext(obj)\nend\n\nfunction Context:Publish(action: string, data: any) end\n\nfunction Context:Subscribe(action: string, callback: () -> ()) end\n\nfunction Context:Destroy() end\n\nreturn Context\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"bc7710f6aad3249798ac01ac70c608b3":{"Id":"bc7710f6aad3249798ac01ac70c608b3","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"Lighting","ClassName":"Lighting","Properties":{"Brightness":{"Float32":2.0},"Ambient":{"Color3":[0.0,0.0,0.0]},"GlobalShadows":{"Bool":true},"Outlines":{"Bool":false},"Technology":{"Enum":1}},"Children":[],"Metadata":{"ignoreUnknownInstances":true}},"d22adc3a9bd7195dae4e3c4ea2612c09":{"Id":"d22adc3a9bd7195dae4e3c4ea2612c09","Parent":"c39e26776de082e6222fc839fa8b1b48","Name":"init.spec","ClassName":"ModuleScript","Properties":{"Source":{"String":"return function()\r\n\tlocal t = require(script.Parent)\r\n\r\n\tit(\"should support basic types\", function()\r\n\t\tassert(t.any(\"\"))\r\n\t\tassert(t.boolean(true))\r\n\t\tassert(t.none(nil))\r\n\t\tassert(t.number(1))\r\n\t\tassert(t.string(\"foo\"))\r\n\t\tassert(t.table({}))\r\n\r\n\t\tassert(not (t.any(nil)))\r\n\t\tassert(not (t.boolean(\"true\")))\r\n\t\tassert(not (t.none(1)))\r\n\t\tassert(not (t.number(true)))\r\n\t\tassert(not (t.string(true)))\r\n\t\tassert(not (t.table(82)))\r\n\tend)\r\n\r\n\tit(\"should support special number types\", function()\r\n\t\tlocal maxTen = t.numberMax(10)\r\n\t\tlocal minTwo = t.numberMin(2)\r\n\t\tlocal maxTenEx = t.numberMaxExclusive(10)\r\n\t\tlocal minTwoEx = t.numberMinExclusive(2)\r\n\t\tlocal constrainedEightToEleven = t.numberConstrained(8, 11)\r\n\t\tlocal constrainedEightToElevenEx = t.numberConstrainedExclusive(8, 11)\r\n\r\n\t\tassert(maxTen(5))\r\n\t\tassert(maxTen(10))\r\n\t\tassert(not (maxTen(11)))\r\n\t\tassert(not (maxTen()))\r\n\r\n\t\tassert(minTwo(5))\r\n\t\tassert(minTwo(2))\r\n\t\tassert(not (minTwo(1)))\r\n\t\tassert(not (minTwo()))\r\n\r\n\t\tassert(maxTenEx(5))\r\n\t\tassert(maxTenEx(9))\r\n\t\tassert(not (maxTenEx(10)))\r\n\t\tassert(not (maxTenEx()))\r\n\r\n\t\tassert(minTwoEx(5))\r\n\t\tassert(minTwoEx(3))\r\n\t\tassert(not (minTwoEx(2)))\r\n\t\tassert(not (minTwoEx()))\r\n\r\n\t\tassert(not (constrainedEightToEleven(7)))\r\n\t\tassert(constrainedEightToEleven(8))\r\n\t\tassert(constrainedEightToEleven(9))\r\n\t\tassert(constrainedEightToEleven(11))\r\n\t\tassert(not (constrainedEightToEleven(12)))\r\n\t\tassert(not (constrainedEightToEleven()))\r\n\r\n\t\tassert(not (constrainedEightToElevenEx(7)))\r\n\t\tassert(not (constrainedEightToElevenEx(8)))\r\n\t\tassert(constrainedEightToElevenEx(9))\r\n\t\tassert(not (constrainedEightToElevenEx(11)))\r\n\t\tassert(not (constrainedEightToElevenEx(12)))\r\n\t\tassert(not (constrainedEightToElevenEx()))\r\n\tend)\r\n\r\n\tit(\"should support optional types\", function()\r\n\t\tlocal check = t.optional(t.string)\r\n\t\tassert(check(\"\"))\r\n\t\tassert(check())\r\n\t\tassert(not (check(1)))\r\n\tend)\r\n\r\n\tit(\"should support tuple types\", function()\r\n\t\tlocal myTupleCheck = t.tuple(t.number, t.string, t.optional(t.number))\r\n\t\tassert(myTupleCheck(1, \"2\", 3))\r\n\t\tassert(myTupleCheck(1, \"2\"))\r\n\t\tassert(not (myTupleCheck(1, \"2\", \"3\")))\r\n\tend)\r\n\r\n\tit(\"should support union types\", function()\r\n\t\tlocal numberOrString = t.union(t.number, t.string)\r\n\t\tassert(numberOrString(1))\r\n\t\tassert(numberOrString(\"1\"))\r\n\t\tassert(not (numberOrString(nil)))\r\n\tend)\r\n\r\n\tit(\"should support literal types\", function()\r\n\t\tlocal checkSingle = t.literal(\"foo\")\r\n\t\tlocal checkUnion = t.union(t.literal(\"foo\"), t.literal(\"bar\"), t.literal(\"oof\"))\r\n\r\n\t\tassert(checkSingle(\"foo\"))\r\n\t\tassert(checkUnion(\"foo\"))\r\n\t\tassert(checkUnion(\"bar\"))\r\n\t\tassert(checkUnion(\"oof\"))\r\n\r\n\t\tassert(not (checkSingle(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"BAR\")))\r\n\t\tassert(not (checkUnion(\"OOF\")))\r\n\tend)\r\n\r\n\tit(\"should support multiple literal types\", function()\r\n\t\tlocal checkSingle = t.literal(\"foo\")\r\n\t\tlocal checkUnion = t.literal(\"foo\", \"bar\", \"oof\")\r\n\r\n\t\tassert(checkSingle(\"foo\"))\r\n\t\tassert(checkUnion(\"foo\"))\r\n\t\tassert(checkUnion(\"bar\"))\r\n\t\tassert(checkUnion(\"oof\"))\r\n\r\n\t\tassert(not (checkSingle(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"BAR\")))\r\n\t\tassert(not (checkUnion(\"OOF\")))\r\n\tend)\r\n\r\n\tit(\"should support intersection types\", function()\r\n\t\tlocal integerMax5000 = t.intersection(t.integer, t.numberMax(5000))\r\n\t\tassert(integerMax5000(1))\r\n\t\tassert(not (integerMax5000(5001)))\r\n\t\tassert(not (integerMax5000(1.1)))\r\n\t\tassert(not (integerMax5000(\"1\")))\r\n\tend)\r\n\r\n\tdescribe(\"array\", function()\r\n\t\tit(\"should support array types\", function()\r\n\t\t\tlocal stringArray = t.array(t.string)\r\n\t\t\tlocal anyArray = t.array(t.any)\r\n\t\t\tlocal stringValues = t.values(t.string)\r\n\t\t\tassert(not (anyArray(\"foo\")))\r\n\t\t\tassert(anyArray({1, \"2\", 3}))\r\n\t\t\tassert(not (stringArray({1, \"2\", 3})))\r\n\t\t\tassert(not (stringArray()))\r\n\t\t\tassert(not (stringValues()))\r\n\t\t\tassert(anyArray({\"1\", \"2\", \"3\"}, t.string))\r\n\t\t\tassert(not (anyArray({\r\n\t\t\t\tfoo = \"bar\"\r\n\t\t\t})))\r\n\t\t\tassert(not (anyArray({\r\n\t\t\t\t[1] = \"non\",\r\n\t\t\t\t[5] = \"sequential\"\r\n\t\t\t})))\r\n\t\tend)\r\n\r\n\t\tit(\"should not be fooled by sparse arrays\", function()\r\n\t\t\tlocal anyArray = t.array(t.any)\r\n\r\n\t\t\tassert(not (anyArray({\r\n\t\t\t\t[1] = 1,\r\n\t\t\t\t[2] = 2,\r\n\t\t\t\t[4] = 4,\r\n\t\t\t})))\r\n\t\tend)\r\n\tend)\r\n\r\n\tit(\"should support map types\", function()\r\n\t\tlocal stringNumberMap = t.map(t.string, t.number)\r\n\t\tassert(stringNumberMap({}))\r\n\t\tassert(stringNumberMap({a = 1}))\r\n\t\tassert(not (stringNumberMap({[1] = \"a\"})))\r\n\t\tassert(not (stringNumberMap({a = \"a\"})))\r\n\t\tassert(not (stringNumberMap()))\r\n\tend)\r\n\r\n\tit(\"should support set types\", function()\r\n\t\tlocal stringSet = t.set(t.string)\r\n\t\tassert(stringSet({}))\r\n\t\tassert(stringSet({a = true}))\r\n\t\tassert(not (stringSet({[1] = \"a\"})))\r\n\t\tassert(not (stringSet({a = \"a\"})))\r\n\t\tassert(not (stringSet({a = false})))\r\n\t\tassert(not (stringSet()))\r\n\tend)\r\n\r\n\tit(\"should support interface types\", function()\r\n\t\tlocal IVector3 = t.interface({\r\n\t\t\tx = t.number,\r\n\t\t\ty = t.number,\r\n\t\t\tz = t.number,\r\n\t\t})\r\n\r\n\t\tassert(IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t\tz = 3,\r\n\t\t}))\r\n\r\n\t\tassert(not (IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t})))\r\n\tend)\r\n\r\n\tit(\"should support strict interface types\", function()\r\n\t\tlocal IVector3 = t.strictInterface({\r\n\t\t\tx = t.number,\r\n\t\t\ty = t.number,\r\n\t\t\tz = t.number,\r\n\t\t})\r\n\r\n\t\tassert(not (IVector3(0)))\r\n\r\n\t\tassert(not (IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t\tz = 3,\r\n\t\t})))\r\n\r\n\t\tassert(not (IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t})))\r\n\r\n\t\tassert(IVector3({\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t\tz = 3,\r\n\t\t}))\r\n\tend)\r\n\r\n\tit(\"should support deep interface types\", function()\r\n\t\tlocal IPlayer = t.interface({\r\n\t\t\tname = t.string,\r\n\t\t\tinventory = t.interface({\r\n\t\t\t\tsize = t.number\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tassert(IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t\tsize = 1\r\n\t\t\t}\r\n\t\t}))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tinventory = {\r\n\t\t\t\tsize = 1\r\n\t\t\t}\r\n\t\t})))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t}\r\n\t\t})))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t})))\r\n\tend)\r\n\r\n\tit(\"should support deep optional interface types\", function()\r\n\t\tlocal IPlayer = t.interface({\r\n\t\t\tname = t.string,\r\n\t\t\tinventory = t.optional(t.interface({\r\n\t\t\t\tsize = t.number\r\n\t\t\t}))\r\n\t\t})\r\n\r\n\t\tassert(IPlayer({\r\n\t\t\tname = \"TestPlayer\"\r\n\t\t}))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t}\r\n\t\t})))\r\n\r\n\t\tassert(IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t\tsize = 1\r\n\t\t\t}\r\n\t\t}))\r\n\tend)\r\n\r\n\tit(\"should support Roblox Instance types\", function()\r\n\t\tlocal stringValueCheck = t.instanceOf(\"StringValue\")\r\n\t\tlocal stringValue = Instance.new(\"StringValue\")\r\n\t\tlocal boolValue = Instance.new(\"BoolValue\")\r\n\r\n\t\tassert(stringValueCheck(stringValue))\r\n\t\tassert(not (stringValueCheck(boolValue)))\r\n\t\tassert(not (stringValueCheck()))\r\n\tend)\r\n\r\n\tit(\"should support Roblox Instance types inheritance\", function()\r\n\t\tlocal guiObjectCheck = t.instanceIsA(\"GuiObject\")\r\n\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\tlocal textLabel = Instance.new(\"TextLabel\")\r\n\t\tlocal stringValue = Instance.new(\"StringValue\")\r\n\r\n\t\tassert(guiObjectCheck(frame))\r\n\t\tassert(guiObjectCheck(textLabel))\r\n\t\tassert(not (guiObjectCheck(stringValue)))\r\n\t\tassert(not (guiObjectCheck()))\r\n\tend)\r\n\r\n\tit(\"should support Roblox Enum types\", function()\r\n\t\tlocal sortOrderEnumCheck = t.enum(Enum.SortOrder)\r\n\t\tassert(t.Enum(Enum.SortOrder))\r\n\t\tassert(not (t.Enum(\"Enum.SortOrder\")))\r\n\r\n\t\tassert(t.EnumItem(Enum.SortOrder.Name))\r\n\t\tassert(not (t.EnumItem(\"Enum.SortOrder.Name\")))\r\n\r\n\t\tassert(sortOrderEnumCheck(Enum.SortOrder.Name))\r\n\t\tassert(sortOrderEnumCheck(Enum.SortOrder.Custom))\r\n\t\tassert(not (sortOrderEnumCheck(Enum.EasingStyle.Linear)))\r\n\t\tassert(not (sortOrderEnumCheck()))\r\n\tend)\r\n\r\n\tit(\"should support Roblox RBXScriptSignal\", function()\r\n\t\tassert(t.RBXScriptSignal(game.ChildAdded))\r\n\t\tassert(not (t.RBXScriptSignal(nil)))\r\n\t\tassert(not (t.RBXScriptSignal(Vector3.new())))\r\n\tend)\r\n\r\n\t-- TODO: Add this back when Lemur supports it\r\n\t-- it(\"should support Roblox RBXScriptConnection\", function()\r\n\t-- \tlocal conn = game.ChildAdded:Connect(function() end)\r\n\t-- \tassert(t.RBXScriptConnection(conn))\r\n\t-- \tassert(not (t.RBXScriptConnection(nil)))\r\n\t-- \tassert(not (t.RBXScriptConnection(Vector3.new())))\r\n\t-- end)\r\n\r\n\tit(\"should support wrapping function types\", function()\r\n\t\tlocal checkFoo = t.tuple(t.string, t.number, t.optional(t.string))\r\n\t\tlocal foo = t.wrap(function(a, b, c)\r\n\t\t\tlocal result = string.format(\"%s %d\", a, b)\r\n\t\t\tif c then\r\n\t\t\t\tresult = result .. \" \" .. c\r\n\t\t\tend\r\n\t\t\treturn result\r\n\t\tend, checkFoo)\r\n\r\n\t\tassert(not (pcall(foo)))\r\n\t\tassert(not (pcall(foo, \"a\")))\r\n\t\tassert(not (pcall(foo, 2)))\r\n\t\tassert(pcall(foo, \"a\", 1))\r\n\t\tassert(pcall(foo, \"a\", 1, \"b\"))\r\n\tend)\r\n\r\n\tit(\"should support strict types\", function()\r\n\t\tlocal myType = t.strict(t.tuple(t.string, t.number))\r\n\t\tassert(not (pcall(function()\r\n\t\t\tmyType(\"a\", \"b\")\r\n\t\tend)))\r\n\t\tassert(pcall(function()\r\n\t\t\tmyType(\"a\", 1)\r\n\t\tend))\r\n\tend)\r\n\r\n\tit(\"should support common OOP types\", function()\r\n\t\tlocal MyClass = {}\r\n\t\tMyClass.__index = MyClass\r\n\r\n\t\tfunction MyClass.new()\r\n\t\t\tlocal self = setmetatable({}, MyClass)\r\n\t\t\treturn self\r\n\t\tend\r\n\r\n\t\tlocal function instanceOfClass(class)\r\n\t\t\treturn function(value)\r\n\t\t\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\t\t\tif not tableSuccess then\r\n\t\t\t\t\treturn false, tableErrMsg or \"\"\r\n\t\t\t\tend\r\n\r\n\t\t\t\tlocal mt = getmetatable(value)\r\n\t\t\t\tif not mt or mt.__index ~= class then\r\n\t\t\t\t\treturn false, \"bad member of class\"\r\n\t\t\t\tend\r\n\r\n\t\t\t\treturn true\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tlocal instanceOfMyClass = instanceOfClass(MyClass)\r\n\r\n\t\tlocal myObject = MyClass.new()\r\n\t\tassert(instanceOfMyClass(myObject))\r\n\t\tassert(not (instanceOfMyClass({})))\r\n\t\tassert(not (instanceOfMyClass()))\r\n\tend)\r\n\r\n\tit(\"should not treat NaN as numbers\", function()\r\n\t\tassert(t.number(1))\r\n\t\tassert(not (t.number(0/0)))\r\n\t\tassert(not (t.number(\"1\")))\r\n\tend)\r\n\r\n\tit(\"should not treat numbers as NaN\", function()\r\n\t\tassert(not (t.nan(1)))\r\n\t\tassert(t.nan(0/0))\r\n\t\tassert(not (t.nan(\"1\")))\r\n\tend)\r\n\r\n\tit(\"should allow union of number and NaN\", function()\r\n\t\tlocal numberOrNaN = t.union(t.number, t.nan)\r\n\t\tassert(numberOrNaN(1))\r\n\t\tassert(numberOrNaN(0/0))\r\n\t\tassert(not (numberOrNaN(\"1\")))\r\n\tend)\r\n\r\n\tit(\"should support non-string keys for interfaces\", function()\r\n\t\tlocal key = {}\r\n\t\tlocal myInterface = t.interface({ [key] = t.number })\r\n\t\tassert(myInterface({ [key] = 1 }))\r\n\t\tassert(not (myInterface({ [key] = \"1\" })))\r\n\tend)\r\n\r\n\tit(\"should support failing on non-string keys for strict interfaces\", function()\r\n\t\tlocal myInterface = t.strictInterface({ a = t.number })\r\n\t\tassert(not (myInterface({ a = 1, [{}] = 2 })))\r\n\tend)\r\n\r\n\tit(\"should support children\", function()\r\n\t\tlocal myInterface = t.interface({\r\n\t\t\tbuttonInFrame = t.intersection(t.instanceOf(\"Frame\"), t.children({\r\n\t\t\t\tMyButton = t.instanceOf(\"ImageButton\")\r\n\t\t\t}))\r\n\t\t})\r\n\r\n\t\tassert(not (t.children({})(5)))\r\n\t\tassert(not (myInterface({ buttonInFrame = Instance.new(\"Frame\") })))\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(myInterface({ buttonInFrame = frame }))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"NotMyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"TextButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button1 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton1.Name = \"MyButton\"\r\n\t\t\tlocal button2 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton2.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\tend)\r\n\r\n\tit(\"should support t.instanceOf shorthand\", function()\r\n\t\tlocal myInterface = t.interface({\r\n\t\t\tbuttonInFrame = t.instanceOf(\"Frame\", {\r\n\t\t\t\tMyButton = t.instanceOf(\"ImageButton\")\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tassert(not (t.children({})(5)))\r\n\t\tassert(not (myInterface({ buttonInFrame = Instance.new(\"Frame\") })))\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(myInterface({ buttonInFrame = frame }))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"NotMyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"TextButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button1 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton1.Name = \"MyButton\"\r\n\t\t\tlocal button2 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton2.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\tend)\r\n\r\n\tit(\"should support t.instanceIsA shorthand\", function()\r\n\t\tlocal myInterface = t.interface({\r\n\t\t\tbuttonInFrame = t.instanceIsA(\"Frame\", {\r\n\t\t\t\tMyButton = t.instanceIsA(\"ImageButton\")\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tassert(not (t.children({})(5)))\r\n\t\tassert(not (myInterface({ buttonInFrame = Instance.new(\"Frame\") })))\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(myInterface({ buttonInFrame = frame }))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"NotMyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"TextButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button1 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton1.Name = \"MyButton\"\r\n\t\t\tlocal button2 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton2.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\tend)\r\n\r\n\tit(\"should support t.match\", function()\r\n\t\tlocal check = t.match(\"%d+\")\r\n\t\tassert(check(\"123\"))\r\n\t\tassert(not (check(\"abc\")))\r\n\t\tassert(not (check()))\r\n\tend)\r\n\r\n\tit(\"should support t.keyOf\", function()\r\n\t\tlocal myNewEnum = {\r\n\t\t\tOptionA = {},\r\n\t\t\tOptionB = {},\r\n\t\t}\r\n\t\tlocal check = t.keyOf(myNewEnum)\r\n\t\tassert(check(\"OptionA\"))\r\n\t\tassert(not (check(\"OptionC\")))\r\n\tend)\r\n\r\n\tit(\"should support t.valueOf\", function()\r\n\t\tlocal myNewEnum = {\r\n\t\t\tOptionA = {},\r\n\t\t\tOptionB = {},\r\n\t\t}\r\n\t\tlocal check = t.valueOf(myNewEnum)\r\n\t\tassert(check(myNewEnum.OptionA))\r\n\t\tassert(not (check(1010)))\r\n\tend)\r\n\r\n\tit(\"should support t.strictArray\", function()\r\n\t\tlocal fixedArrayCheck = t.strictArray(t.number, t.number)\r\n\r\n\t\tassert(fixedArrayCheck({1, 2}))\r\n\t\tassert(not fixedArrayCheck({1, 2, 3}))\r\n\t\tassert(not fixedArrayCheck({10}))\r\n\t\tassert(not fixedArrayCheck({\"Hello\", 10}))\r\n\t\tassert(not fixedArrayCheck({ Foo = \"Bar\" }))\r\n\r\n\t\tlocal fixedArrayCheck2 = t.strictArray(t.number, t.number, t.optional(t.string))\r\n\r\n\t\tassert(fixedArrayCheck2({10, 20}))\r\n\t\tassert(fixedArrayCheck2({10, 20, \"Hello\"}))\r\n\t\tassert(not fixedArrayCheck2({10, 20, 30}))\r\n\tend)\r\nend"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"1a31bb8458eefe0db2d00eab15f6b14f":{"Id":"1a31bb8458eefe0db2d00eab15f6b14f","Parent":"5d73467a1d588843ea200ceeebce3eb5","Name":"Baseplate","ClassName":"Part","Properties":{"Locked":{"Bool":true},"Position":{"Vector3":[0.0,-10.0,0.0]},"Size":{"Vector3":[512.0,20.0,512.0]},"Color":{"Color3":[0.38823,0.37254,0.38823]},"Anchored":{"Bool":true}},"Children":[],"Metadata":{"ignoreUnknownInstances":true}},"89734f1df997de85fd2bdd427ddf34fb":{"Id":"89734f1df997de85fd2bdd427ddf34fb","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Wormhole","ClassName":"ModuleScript","Properties":{"Source":{"String":"local ReplicatedStorage: ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\r\nlocal RunService: RunService = game:GetService(\"RunService\")\r\n\r\nlocal t = require(script.Parent.Parent.t)\r\nlocal Promise = require(script.Parent.Parent.Promise)\r\n\r\nlocal types = require(script.Parent.Types)\r\nlocal AwaitForValue = require(script.Parent.Promises.promiseAwaitValue)\r\n\r\nlocal Context = require(script.Parent.Context)\r\nlocal Subscription = require(script.Parent.Subscription)\r\n\r\ntype IContext = types.IContext\r\ntype ISubscription = types.ISubscription\r\ntype IWormhole = types.IWormhole\r\ntype ContextBlock = types.ContextBlock\r\ntype IPackage = types.IPackage\r\n\r\nlocal RemoteFolderName= \"Portal\"\r\nlocal Storage: Folder = ReplicatedStorage:FindFirstChild(RemoteFolderName) :: Folder\r\n\r\nif not Storage then\r\n\tif RunService:IsServer() then\r\n\t\tStorage = Instance.new(\"Folder\")\r\n\t\tStorage.Name = RemoteFolderName\r\n\t\tStorage.Parent = ReplicatedStorage\r\n\telse\r\n\t\tStorage = ReplicatedStorage:WaitForChild(RemoteFolderName) :: Folder\r\n\tend\r\nend\r\n\r\nlocal function createPackage(context: string, action: string, data: any): IPackage\r\n\treturn {\r\n\t\tContext = context,\r\n\t\tAction = action,\r\n\t\tTimestamp = DateTime.now(),\r\n\t\tPayload = data\r\n\t} :: IPackage\r\nend\r\n\r\nlocal Wormhole: IWormhole\r\nWormhole._Storage = Storage\r\nWormhole._Contexts = {}\r\nWormhole.__index = Wormhole\r\n\r\nfunction Wormhole.new(): IWormhole\r\n\tlocal self = setmetatable({}, Wormhole)\r\n\treturn self :: IWormhole\r\nend\r\n\r\nfunction Wormhole.is(wormhole: IWormhole): boolean\r\n\treturn types.isWormhole(wormhole)\r\nend\r\n\r\nfunction Wormhole.awaitContext(wormhole: IWormhole, context: string, timeout: number?): ContextBlock\r\n\tlocal check = t.strict(t.tuple(t.string, t.optional(t.number)))\r\n\tcheck(context, timeout)\r\n\r\n\tlocal contextPromise = AwaitForValue(context, wormhole._Contexts)\r\n\tif timeout then \r\n\t\tcontextPromise:timeout(timeout)\r\n\tend\r\n\tcontextPromise:catch(function(e)\r\n\t\twarn(\"Uh oh! Something went wrong awaiting context\\n\", e)\r\n\r\n\t\tif not wormhole._Contexts[context] then\r\n\t\t\twormhole._Contexts[context] = Wormhole.addContext(wormhole, context)\r\n\t\tend\r\n\t\treturn wormhole._Contexts[context]\r\n\tend)\r\n\r\n\treturn contextPromise:expect() :: ContextBlock\r\nend\r\n\r\nfunction Wormhole.addContext(wormhole: IWormhole, context: string): ContextBlock\r\n\tlocal new: ContextBlock = {\r\n\t\tRemote = Instance.new(\"RemoteEvent\"),\r\n\t\tContext = Context.new(context, wormhole),\r\n\t\tActions = {}\r\n\t}\r\n\twormhole._Contexts[context] = new\r\n\r\n\treturn wormhole._Contexts[context]\r\nend\r\n\r\nfunction Wormhole.makeSubscription(wormhole: IWormhole, context: string, action: string): ISubscription\r\n\tlocal subscription: ISubscription\r\n\tsubscription = Subscription.new(context, action)\r\n\treturn subscription\r\nend\r\n\r\nfunction Wormhole.doSubscribe(wormhole: IWormhole, subscription: ISubscription, callback: ()->()?): ()\r\n\t\r\n\tlocal eventConnection: RBXScriptConnection\r\n\tlocal context: ContextBlock = wormhole.awaitContext(subscription.Context)\r\n\tif RunService:IsServer() then\r\n\t\teventConnection = context.Remote.OnServerEvent:Connect(\r\n\t\t\tfunction(listener: Player, package: IPackage)\r\n\t\t\t\tlocal check = t.strict(t.instanceIsA(\"Player\"))\r\n\t\t\t\tcheck(listener)\r\n\t\t\tend\r\n\t\t)\r\n\telse\r\n\t\teventConnection = context.Remote.OnClientEvent:Connect(\r\n\t\t\tfunction(listener: Player, package: IPackage)\r\n\t\t\t\tlocal check = t.strict(t.instanceIsA(\"Player\"))\r\n\t\t\t\tcheck(listener)\r\n\t\t\tend\r\n\t\t)\r\n\tend\r\n\r\n\treturn function()\r\n\t\teventConnection:Disconnect()\r\n\tend\r\nend\r\n\r\nreturn Wormhole"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"ee222f38fa8be78c47f18fd875ac7854":{"Id":"ee222f38fa8be78c47f18fd875ac7854","Parent":"7fbc840dac8c567469e92bc32ba7f9df","Name":"Packages","ClassName":"Folder","Properties":{},"Children":["8d7217c7f2aaf98a45b764cd6f5e70a3","2e2d4268ad91d40d489844d149b7c87e","3860334f5903be77d1957718f152993f","e412d57eace8911b86fabef6e8521d77"],"Metadata":{"ignoreUnknownInstances":false}},"a143059ecae834aee41b94f5ac29f512":{"Id":"a143059ecae834aee41b94f5ac29f512","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"SoundService","ClassName":"SoundService","Properties":{"RespectFilteringEnabled":{"Bool":true}},"Children":[],"Metadata":{"ignoreUnknownInstances":true}},"13407f4c65e57105e82422a6a09fcfa8":{"Id":"13407f4c65e57105e82422a6a09fcfa8","Parent":"2e2d4268ad91d40d489844d149b7c87e","Name":"evaera_promise@3.1.0","ClassName":"Folder","Properties":{},"Children":["9cd69536a0dc973cffeed65b16a569e0"],"Metadata":{"ignoreUnknownInstances":false}},"46bcc92ca5dc93da75ba685ae7cb4991":{"Id":"46bcc92ca5dc93da75ba685ae7cb4991","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"IContext","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\r\n\r\nlocal IsContext = t.interface({\r\n\tName = t.string,\r\n\tSubscriptions = t.map(t.string, t.callback)\r\n})\r\n\r\nexport type IContext = {\r\n\tName: string,\r\n\tSubscriptions: {[string]: ()->nil},\r\n\t\r\n\t__index: IContext,\r\n\tnew: (context: string, provider: any) -> IContext,\r\n\tis: (obj: any) -> boolean,\r\n\r\n\tPublish: (self: IContext, action: string, data: any) -> (),\r\n\tSubscribe: (self: IContext, action: string, callback: () -> ()) -> (),\r\n\tDestroy: (self: IContext) -> nil\r\n}\r\n\r\nreturn function(obj)\r\n\treturn IsContext(obj) :: boolean\r\nend"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"2e2d4268ad91d40d489844d149b7c87e":{"Id":"2e2d4268ad91d40d489844d149b7c87e","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"_Index","ClassName":"Folder","Properties":{},"Children":["13407f4c65e57105e82422a6a09fcfa8","9ee814837a27b11857e89563135cd306"],"Metadata":{"ignoreUnknownInstances":false}},"3860334f5903be77d1957718f152993f":{"Id":"3860334f5903be77d1957718f152993f","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"t","ClassName":"ModuleScript","Properties":{"Source":{"String":"return require(script.Parent._Index[\"shanebutt_t@1.3.1\"][\"t\"])\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"6978a188358d64bfb2103712202a9922":{"Id":"6978a188358d64bfb2103712202a9922","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"ISubscription","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\n\nlocal IsSUbscription = t.interface({\n\tContext = t.string,\n\tAction = t.string,\n\tCallback = t.optional(t.callback()),\n})\n\nexport type ISubscription = {\n\tContext: string,\n\tAction: string,\n\tCallback: () -> nil,\n\n\t__index: ISubscription,\n\n\tnew: (context: string, action: string, callback: () -> ()?) -> ISubscription,\n\tis: (obj: any) -> boolean,\n\n\tSubscribe: (self: ISubscription, callback: () -> nil) -> ISubscription,\n}\n\nreturn function(obj)\n\treturn IsSubscription(obj) :: boolean\nend\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"372383b65caa3b15b65ef42feec874b8":{"Id":"372383b65caa3b15b65ef42feec874b8","Parent":"00000000000000000000000000000000","Name":"portal","ClassName":"DataModel","Properties":{},"Children":["bc7710f6aad3249798ac01ac70c608b3","7fbc840dac8c567469e92bc32ba7f9df","a143059ecae834aee41b94f5ac29f512","5d73467a1d588843ea200ceeebce3eb5"],"Metadata":{"ignoreUnknownInstances":true}},"7fbc840dac8c567469e92bc32ba7f9df":{"Id":"7fbc840dac8c567469e92bc32ba7f9df","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"ReplicatedStorage","ClassName":"ReplicatedStorage","Properties":{},"Children":["ee222f38fa8be78c47f18fd875ac7854"],"Metadata":{"ignoreUnknownInstances":true}},"9cd69536a0dc973cffeed65b16a569e0":{"Id":"9cd69536a0dc973cffeed65b16a569e0","Parent":"13407f4c65e57105e82422a6a09fcfa8","Name":"promise","ClassName":"ModuleScript","Properties":{"Source":{"String":"--[[\r\n\tAn implementation of Promises similar to Promise/A+.\r\n]]\r\n\r\nlocal ERROR_NON_PROMISE_IN_LIST = \"Non-promise value passed into %s at index %s\"\r\nlocal ERROR_NON_LIST = \"Please pass a list of promises to %s\"\r\nlocal ERROR_NON_FUNCTION = \"Please pass a handler function to %s!\"\r\nlocal MODE_KEY_METATABLE = {__mode = \"k\"}\r\n\r\n--[[\r\n\tCreates an enum dictionary with some metamethods to prevent common mistakes.\r\n]]\r\nlocal function makeEnum(enumName, members)\r\n\tlocal enum = {}\r\n\r\n\tfor _, memberName in ipairs(members) do\r\n\t\tenum[memberName] = memberName\r\n\tend\r\n\r\n\treturn setmetatable(enum, {\r\n\t\t__index = function(_, k)\r\n\t\t\terror(string.format(\"%s is not in %s!\", k, enumName), 2)\r\n\t\tend,\r\n\t\t__newindex = function()\r\n\t\t\terror(string.format(\"Creating new members in %s is not allowed!\", enumName), 2)\r\n\t\tend,\r\n\t})\r\nend\r\n\r\n--[=[\r\n\tAn object to represent runtime errors that occur during execution.\r\n\tPromises that experience an error like this will be rejected with\r\n\tan instance of this object.\r\n\r\n\t@class Error\r\n]=]\r\nlocal Error do\r\n\tError = {\r\n\t\tKind = makeEnum(\"Promise.Error.Kind\", {\r\n\t\t\t\"ExecutionError\",\r\n\t\t\t\"AlreadyCancelled\",\r\n\t\t\t\"NotResolvedInTime\",\r\n\t\t\t\"TimedOut\",\r\n\t\t}),\r\n\t}\r\n\tError.__index = Error\r\n\r\n\tfunction Error.new(options, parent)\r\n\t\toptions = options or {}\r\n\t\treturn setmetatable({\r\n\t\t\terror = tostring(options.error) or \"[This error has no error text.]\",\r\n\t\t\ttrace = options.trace,\r\n\t\t\tcontext = options.context,\r\n\t\t\tkind = options.kind,\r\n\t\t\tparent = parent,\r\n\t\t\tcreatedTick = os.clock(),\r\n\t\t\tcreatedTrace = debug.traceback(),\r\n\t\t}, Error)\r\n\tend\r\n\r\n\tfunction Error.is(anything)\r\n\t\tif type(anything) == \"table\" then\r\n\t\t\tlocal metatable = getmetatable(anything)\r\n\r\n\t\t\tif type(metatable) == \"table\" then\r\n\t\t\t\treturn rawget(anything, \"error\") ~= nil and type(rawget(metatable, \"extend\")) == \"function\"\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn false\r\n\tend\r\n\r\n\tfunction Error.isKind(anything, kind)\r\n\t\tassert(kind ~= nil, \"Argument #2 to Promise.Error.isKind must not be nil\")\r\n\r\n\t\treturn Error.is(anything) and anything.kind == kind\r\n\tend\r\n\r\n\tfunction Error:extend(options)\r\n\t\toptions = options or {}\r\n\r\n\t\toptions.kind = options.kind or self.kind\r\n\r\n\t\treturn Error.new(options, self)\r\n\tend\r\n\r\n\tfunction Error:getErrorChain()\r\n\t\tlocal runtimeErrors = { self }\r\n\r\n\t\twhile runtimeErrors[#runtimeErrors].parent do\r\n\t\t\ttable.insert(runtimeErrors, runtimeErrors[#runtimeErrors].parent)\r\n\t\tend\r\n\r\n\t\treturn runtimeErrors\r\n\tend\r\n\r\n\tfunction Error:__tostring()\r\n\t\tlocal errorStrings = {\r\n\t\t\tstring.format(\"-- Promise.Error(%s) --\", self.kind or \"?\"),\r\n\t\t}\r\n\r\n\t\tfor _, runtimeError in ipairs(self:getErrorChain()) do\r\n\t\t\ttable.insert(errorStrings, table.concat({\r\n\t\t\t\truntimeError.trace or runtimeError.error,\r\n\t\t\t\truntimeError.context,\r\n\t\t\t}, \"\\n\"))\r\n\t\tend\r\n\r\n\t\treturn table.concat(errorStrings, \"\\n\")\r\n\tend\r\nend\r\n\r\n--[[\r\n\tPacks a number of arguments into a table and returns its length.\r\n\r\n\tUsed to cajole varargs without dropping sparse values.\r\n]]\r\nlocal function pack(...)\r\n\treturn select(\"#\", ...), { ... }\r\nend\r\n\r\n--[[\r\n\tReturns first value (success), and packs all following values.\r\n]]\r\nlocal function packResult(success, ...)\r\n\treturn success, select(\"#\", ...), { ... }\r\nend\r\n\r\nlocal function makeErrorHandler(traceback)\r\n\tassert(traceback ~= nil)\r\n\r\n\treturn function(err)\r\n\t\t-- If the error object is already a table, forward it directly.\r\n\t\t-- Should we extend the error here and add our own trace?\r\n\r\n\t\tif type(err) == \"table\" then\r\n\t\t\treturn err\r\n\t\tend\r\n\r\n\t\treturn Error.new({\r\n\t\t\terror = err,\r\n\t\t\tkind = Error.Kind.ExecutionError,\r\n\t\t\ttrace = debug.traceback(tostring(err), 2),\r\n\t\t\tcontext = \"Promise created at:\\n\\n\" .. traceback,\r\n\t\t})\r\n\tend\r\nend\r\n\r\n--[[\r\n\tCalls a Promise executor with error handling.\r\n]]\r\nlocal function runExecutor(traceback, callback, ...)\r\n\treturn packResult(xpcall(callback, makeErrorHandler(traceback), ...))\r\nend\r\n\r\n--[[\r\n\tCreates a function that invokes a callback with correct error handling and\r\n\tresolution mechanisms.\r\n]]\r\nlocal function createAdvancer(traceback, callback, resolve, reject)\r\n\treturn function(...)\r\n\t\tlocal ok, resultLength, result = runExecutor(traceback, callback, ...)\r\n\r\n\t\tif ok then\r\n\t\t\tresolve(unpack(result, 1, resultLength))\r\n\t\telse\r\n\t\t\treject(result[1])\r\n\t\tend\r\n\tend\r\nend\r\n\r\nlocal function isEmpty(t)\r\n\treturn next(t) == nil\r\nend\r\n\r\n--[=[\r\n\tAn enum value used to represent the Promise's status.\r\n\t@interface Status\r\n\t@tag enum\r\n\t@within Promise\r\n\t.Started \"Started\" -- The Promise is executing, and not settled yet.\r\n\t.Resolved \"Resolved\" -- The Promise finished successfully.\r\n\t.Rejected \"Rejected\" -- The Promise was rejected.\r\n\t.Cancelled \"Cancelled\" -- The Promise was cancelled before it finished.\r\n]=]\r\n--[=[\r\n\t@prop Status Status\r\n\t@within Promise\r\n\t@readonly\r\n\t@tag enums\r\n\tA table containing all members of the `Status` enum, e.g., `Promise.Status.Resolved`.\r\n]=]\r\n--[=[\r\n\tA Promise is an object that represents a value that will exist in the future, but doesn't right now.\r\n\tPromises allow you to then attach callbacks that can run once the value becomes available (known as *resolving*),\r\n\tor if an error has occurred (known as *rejecting*).\r\n\r\n\t@class Promise\r\n\t@__index prototype\r\n]=]\r\nlocal Promise = {\r\n\tError = Error,\r\n\tStatus = makeEnum(\"Promise.Status\", {\"Started\", \"Resolved\", \"Rejected\", \"Cancelled\"}),\r\n\t_getTime = os.clock,\r\n\t_timeEvent = game:GetService(\"RunService\").Heartbeat,\r\n}\r\nPromise.prototype = {}\r\nPromise.__index = Promise.prototype\r\n\r\nfunction Promise._new(traceback, callback, parent)\r\n\tif parent ~= nil and not Promise.is(parent) then\r\n\t\terror(\"Argument #2 to Promise.new must be a promise or nil\", 2)\r\n\tend\r\n\r\n\tlocal self = {\r\n\t\t-- Used to locate where a promise was created\r\n\t\t_source = traceback,\r\n\r\n\t\t_status = Promise.Status.Started,\r\n\r\n\t\t-- A table containing a list of all results, whether success or failure.\r\n\t\t-- Only valid if _status is set to something besides Started\r\n\t\t_values = nil,\r\n\r\n\t\t-- Lua doesn't like sparse arrays very much, so we explicitly store the\r\n\t\t-- length of _values to handle middle nils.\r\n\t\t_valuesLength = -1,\r\n\r\n\t\t-- Tracks if this Promise has no error observers..\r\n\t\t_unhandledRejection = true,\r\n\r\n\t\t-- Queues representing functions we should invoke when we update!\r\n\t\t_queuedResolve = {},\r\n\t\t_queuedReject = {},\r\n\t\t_queuedFinally = {},\r\n\r\n\t\t-- The function to run when/if this promise is cancelled.\r\n\t\t_cancellationHook = nil,\r\n\r\n\t\t-- The \"parent\" of this promise in a promise chain. Required for\r\n\t\t-- cancellation propagation upstream.\r\n\t\t_parent = parent,\r\n\r\n\t\t-- Consumers are Promises that have chained onto this one.\r\n\t\t-- We track them for cancellation propagation downstream.\r\n\t\t_consumers = setmetatable({}, MODE_KEY_METATABLE),\r\n\t}\r\n\r\n\tif parent and parent._status == Promise.Status.Started then\r\n\t\tparent._consumers[self] = true\r\n\tend\r\n\r\n\tsetmetatable(self, Promise)\r\n\r\n\tlocal function resolve(...)\r\n\t\tself:_resolve(...)\r\n\tend\r\n\r\n\tlocal function reject(...)\r\n\t\tself:_reject(...)\r\n\tend\r\n\r\n\tlocal function onCancel(cancellationHook)\r\n\t\tif cancellationHook then\r\n\t\t\tif self._status == Promise.Status.Cancelled then\r\n\t\t\t\tcancellationHook()\r\n\t\t\telse\r\n\t\t\t\tself._cancellationHook = cancellationHook\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn self._status == Promise.Status.Cancelled\r\n\tend\r\n\r\n\tcoroutine.wrap(function()\r\n\t\tlocal ok, _, result = runExecutor(\r\n\t\t\tself._source,\r\n\t\t\tcallback,\r\n\t\t\tresolve,\r\n\t\t\treject,\r\n\t\t\tonCancel\r\n\t\t)\r\n\r\n\t\tif not ok then\r\n\t\t\treject(result[1])\r\n\t\tend\r\n\tend)()\r\n\r\n\treturn self\r\nend\r\n\r\n--[=[\r\n\tConstruct a new Promise that will be resolved or rejected with the given callbacks.\r\n\r\n\tIf you `resolve` with a Promise, it will be chained onto.\r\n\r\n\tYou can safely yield within the executor function and it will not block the creating thread.\r\n\r\n\t```lua\r\n\tlocal myFunction()\r\n\t\treturn Promise.new(function(resolve, reject, onCancel)\r\n\t\t\twait(1)\r\n\t\t\tresolve(\"Hello world!\")\r\n\t\tend)\r\n\tend\r\n\r\n\tmyFunction():andThen(print)\r\n\t```\r\n\r\n\tYou do not need to use `pcall` within a Promise. Errors that occur during execution will be caught and turned into a rejection automatically. If `error()` is called with a table, that table will be the rejection value. Otherwise, string errors will be converted into `Promise.Error(Promise.Error.Kind.ExecutionError)` objects for tracking debug information.\r\n\r\n\tYou may register an optional cancellation hook by using the `onCancel` argument:\r\n\r\n\t* This should be used to abort any ongoing operations leading up to the promise being settled.\r\n\t* Call the `onCancel` function with a function callback as its only argument to set a hook which will in turn be called when/if the promise is cancelled.\r\n\t* `onCancel` returns `true` if the Promise was already cancelled when you called `onCancel`.\r\n\t* Calling `onCancel` with no argument will not override a previously set cancellation hook, but it will still return `true` if the Promise is currently cancelled.\r\n\t* You can set the cancellation hook at any time before resolving.\r\n\t* When a promise is cancelled, calls to `resolve` or `reject` will be ignored, regardless of if you set a cancellation hook or not.\r\n\r\n\t@param executor (resolve: (...: any) -> (), reject: (...: any) -> (), onCancel: (abortHandler: () -> boolean)) -> ()\r\n\t@return Promise\r\n]=]\r\nfunction Promise.new(executor)\r\n\treturn Promise._new(debug.traceback(nil, 2), executor)\r\nend\r\n\r\nfunction Promise:__tostring()\r\n\treturn string.format(\"Promise(%s)\", self._status)\r\nend\r\n\r\n--[=[\r\n\tThe same as [Promise.new](/api/Promise#new), except execution begins after the next `Heartbeat` event.\r\n\r\n\tThis is a spiritual replacement for `spawn`, but it does not suffer from the same [issues](https://eryn.io/gist/3db84579866c099cdd5bb2ff37947cec) as `spawn`.\r\n\r\n\t```lua\r\n\tlocal function waitForChild(instance, childName, timeout)\r\n\t return Promise.defer(function(resolve, reject)\r\n\t\tlocal child = instance:WaitForChild(childName, timeout)\r\n\r\n\t\t;(child and resolve or reject)(child)\r\n\t end)\r\n\tend\r\n\t```\r\n\r\n\t@param executor (resolve: (...: any) -> (), reject: (...: any) -> (), onCancel: (abortHandler: () -> boolean)) -> ()\r\n\t@return Promise\r\n]=]\r\nfunction Promise.defer(callback)\r\n\tlocal traceback = debug.traceback(nil, 2)\r\n\tlocal promise\r\n\tpromise = Promise._new(traceback, function(resolve, reject, onCancel)\r\n\t\tlocal connection\r\n\t\tconnection = Promise._timeEvent:Connect(function()\r\n\t\t\tconnection:Disconnect()\r\n\t\t\tlocal ok, _, result = runExecutor(traceback, callback, resolve, reject, onCancel)\r\n\r\n\t\t\tif not ok then\r\n\t\t\t\treject(result[1])\r\n\t\t\tend\r\n\t\tend)\r\n\tend)\r\n\r\n\treturn promise\r\nend\r\n\r\n-- Backwards compatibility\r\nPromise.async = Promise.defer\r\n\r\n--[=[\r\n\tCreates an immediately resolved Promise with the given value.\r\n\r\n\t@param ... any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.resolve(...)\r\n\tlocal length, values = pack(...)\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve)\r\n\t\tresolve(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tCreates an immediately rejected Promise with the given value.\r\n\r\n\t:::caution\r\n\tSomething needs to consume this rejection (i.e. `:catch()` it), otherwise it will emit an unhandled Promise rejection warning on the next frame. Thus, you should not create and store rejected Promises for later use. Only create them on-demand as needed.\r\n\t:::\r\n\r\n\t```lua\r\n\t-- Example using Promise.resolve to deliver cached values:\r\n\tfunction getSomething(name)\r\n\t\tif cache[name] then\r\n\t\t\treturn Promise.resolve(cache[name])\r\n\t\telse\r\n\t\t\treturn Promise.new(function(resolve, reject)\r\n\t\t\t\tlocal thing = getTheThing()\r\n\t\t\t\tcache[name] = thing\r\n\r\n\t\t\t\tresolve(thing)\r\n\t\t\tend)\r\n\t\tend\r\n\tend\r\n\t```\r\n\r\n\t@param ... any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.reject(...)\r\n\tlocal length, values = pack(...)\r\n\treturn Promise._new(debug.traceback(nil, 2), function(_, reject)\r\n\t\treject(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[[\r\n\tRuns a non-promise-returning function as a Promise with the\r\n given arguments.\r\n]]\r\nfunction Promise._try(traceback, callback, ...)\r\n\tlocal valuesLength, values = pack(...)\r\n\r\n\treturn Promise._new(traceback, function(resolve)\r\n\t\tresolve(callback(unpack(values, 1, valuesLength)))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tBegins a Promise chain, calling a function and returning a Promise resolving with its return value. If the function errors, the returned Promise will be rejected with the error. You can safely yield within the Promise.try callback.\r\n\r\n\t:::info\r\n\t`Promise.try` is similar to [Promise.promisify](#promisify), except the callback is invoked immediately instead of returning a new function.\r\n\t:::\r\n\r\n\t```lua\r\n\tPromise.try(function()\r\n\t\treturn math.random(1, 2) == 1 and \"ok\" or error(\"Oh an error!\")\r\n\tend)\r\n\t\t:andThen(function(text)\r\n\t\t\tprint(text)\r\n\t\tend)\r\n\t\t:catch(function(err)\r\n\t\t\twarn(\"Something went wrong\")\r\n\t\tend)\r\n\t```\r\n\r\n\t@param callback (...: any) -> ...any\r\n\t@return Promise\r\n]=]\r\nfunction Promise.try(...)\r\n\treturn Promise._try(debug.traceback(nil, 2), ...)\r\nend\r\n\r\n--[[\r\n\tReturns a new promise that:\r\n\t\t* is resolved when all input promises resolve\r\n\t\t* is rejected if ANY input promises reject\r\n]]\r\nfunction Promise._all(traceback, promises, amount)\r\n\tif type(promises) ~= \"table\" then\r\n\t\terror(string.format(ERROR_NON_LIST, \"Promise.all\"), 3)\r\n\tend\r\n\r\n\t-- We need to check that each value is a promise here so that we can produce\r\n\t-- a proper error rather than a rejected promise with our error.\r\n\tfor i, promise in pairs(promises) do\r\n\t\tif not Promise.is(promise) then\r\n\t\t\terror(string.format(ERROR_NON_PROMISE_IN_LIST, \"Promise.all\", tostring(i)), 3)\r\n\t\tend\r\n\tend\r\n\r\n\t-- If there are no values then return an already resolved promise.\r\n\tif #promises == 0 or amount == 0 then\r\n\t\treturn Promise.resolve({})\r\n\tend\r\n\r\n\treturn Promise._new(traceback, function(resolve, reject, onCancel)\r\n\t\t-- An array to contain our resolved values from the given promises.\r\n\t\tlocal resolvedValues = {}\r\n\t\tlocal newPromises = {}\r\n\r\n\t\t-- Keep a count of resolved promises because just checking the resolved\r\n\t\t-- values length wouldn't account for promises that resolve with nil.\r\n\t\tlocal resolvedCount = 0\r\n\t\tlocal rejectedCount = 0\r\n\t\tlocal done = false\r\n\r\n\t\tlocal function cancel()\r\n\t\t\tfor _, promise in ipairs(newPromises) do\r\n\t\t\t\tpromise:cancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\t-- Called when a single value is resolved and resolves if all are done.\r\n\t\tlocal function resolveOne(i, ...)\r\n\t\t\tif done then\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\tresolvedCount = resolvedCount + 1\r\n\r\n\t\t\tif amount == nil then\r\n\t\t\t\tresolvedValues[i] = ...\r\n\t\t\telse\r\n\t\t\t\tresolvedValues[resolvedCount] = ...\r\n\t\t\tend\r\n\r\n\t\t\tif resolvedCount >= (amount or #promises) then\r\n\t\t\t\tdone = true\r\n\t\t\t\tresolve(resolvedValues)\r\n\t\t\t\tcancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tonCancel(cancel)\r\n\r\n\t\t-- We can assume the values inside `promises` are all promises since we\r\n\t\t-- checked above.\r\n\t\tfor i, promise in ipairs(promises) do\r\n\t\t\tnewPromises[i] = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\tresolveOne(i, ...)\r\n\t\t\t\tend,\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\trejectedCount = rejectedCount + 1\r\n\r\n\t\t\t\t\tif amount == nil or #promises - rejectedCount < amount then\r\n\t\t\t\t\t\tcancel()\r\n\t\t\t\t\t\tdone = true\r\n\r\n\t\t\t\t\t\treject(...)\r\n\t\t\t\t\tend\r\n\t\t\t\tend\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tif done then\r\n\t\t\tcancel()\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a new promise that:\r\n\t* is resolved after all input promises resolve.\r\n\t* is rejected if *any* input promises reject.\r\n\r\n\t:::info\r\n\tOnly the first return value from each promise will be present in the resulting array.\r\n\t:::\r\n\r\n\tAfter any input Promise rejects, all other input Promises that are still pending will be cancelled if they have no other consumers.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.all(promises)\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@return Promise<{T}>\r\n]=]\r\nfunction Promise.all(promises)\r\n\treturn Promise._all(debug.traceback(nil, 2), promises)\r\nend\r\n\r\n--[=[\r\n\tFolds an array of values or promises into a single value. The array is traversed sequentially.\r\n\r\n\tThe reducer function can return a promise or value directly. Each iteration receives the resolved value from the previous, and the first receives your defined initial value.\r\n\r\n\tThe folding will stop at the first rejection encountered.\r\n\t```lua\r\n\tlocal basket = {\"blueberry\", \"melon\", \"pear\", \"melon\"}\r\n\tPromise.fold(basket, function(cost, fruit)\r\n\t\tif fruit == \"blueberry\" then\r\n\t\t\treturn cost -- blueberries are free!\r\n\t\telse\r\n\t\t\t-- call a function that returns a promise with the fruit price\r\n\t\t\treturn fetchPrice(fruit):andThen(function(fruitCost)\r\n\t\t\t\treturn cost + fruitCost\r\n\t\t\tend)\r\n\t\tend\r\n\tend, 0)\r\n\t```\r\n\r\n\t@since v3.1.0\r\n\t@param list {T | Promise}\r\n\t@param reducer (accumulator: U, value: T, index: number) -> U | Promise\r\n\t@param initialValue U\r\n]=]\r\nfunction Promise.fold(list, callback, initialValue)\r\n\tassert(type(list) == \"table\", \"Bad argument #1 to Promise.fold: must be a table\")\r\n\tassert(type(callback) == \"function\", \"Bad argument #2 to Promise.fold: must be a function\")\r\n\r\n\tlocal accumulator = Promise.resolve(initialValue)\r\n\treturn Promise.each(list, function(resolvedElement, i)\r\n\t\taccumulator = accumulator:andThen(function(previousValueResolved)\r\n\t\t\treturn callback(previousValueResolved, resolvedElement, i)\r\n\t\tend)\r\n\tend):andThenReturn(accumulator)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a Promise that is resolved as soon as `count` Promises are resolved from the input array. The resolved array values are in the order that the Promises resolved in. When this Promise resolves, all other pending Promises are cancelled if they have no other consumers.\r\n\r\n\t`count` 0 results in an empty array. The resultant array will never have more than `count` elements.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.some(promises, 2) -- Only resolves with first 2 promises to resolve\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@param count number\r\n\t@return Promise<{T}>\r\n]=]\r\nfunction Promise.some(promises, amount)\r\n\tassert(type(amount) == \"number\", \"Bad argument #2 to Promise.some: must be a number\")\r\n\r\n\treturn Promise._all(debug.traceback(nil, 2), promises, amount)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a Promise that is resolved as soon as *any* of the input Promises resolves. It will reject only if *all* input Promises reject. As soon as one Promises resolves, all other pending Promises are cancelled if they have no other consumers.\r\n\r\n\tResolves directly with the value of the first resolved Promise. This is essentially [[Promise.some]] with `1` count, except the Promise resolves with the value directly instead of an array with one element.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.any(promises) -- Resolves with first value to resolve (only rejects if all 3 rejected)\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@return Promise\r\n]=]\r\nfunction Promise.any(promises)\r\n\treturn Promise._all(debug.traceback(nil, 2), promises, 1):andThen(function(values)\r\n\t\treturn values[1]\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a new Promise that resolves with an array of in-place Statuses when all input Promises have settled. This is equivalent to mapping `promise:finally` over the array of Promises.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.allSettled(promises)\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@return Promise<{Status}>\r\n]=]\r\nfunction Promise.allSettled(promises)\r\n\tif type(promises) ~= \"table\" then\r\n\t\terror(string.format(ERROR_NON_LIST, \"Promise.allSettled\"), 2)\r\n\tend\r\n\r\n\t-- We need to check that each value is a promise here so that we can produce\r\n\t-- a proper error rather than a rejected promise with our error.\r\n\tfor i, promise in pairs(promises) do\r\n\t\tif not Promise.is(promise) then\r\n\t\t\terror(string.format(ERROR_NON_PROMISE_IN_LIST, \"Promise.allSettled\", tostring(i)), 2)\r\n\t\tend\r\n\tend\r\n\r\n\t-- If there are no values then return an already resolved promise.\r\n\tif #promises == 0 then\r\n\t\treturn Promise.resolve({})\r\n\tend\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, _, onCancel)\r\n\t\t-- An array to contain our resolved values from the given promises.\r\n\t\tlocal fates = {}\r\n\t\tlocal newPromises = {}\r\n\r\n\t\t-- Keep a count of resolved promises because just checking the resolved\r\n\t\t-- values length wouldn't account for promises that resolve with nil.\r\n\t\tlocal finishedCount = 0\r\n\r\n\t\t-- Called when a single value is resolved and resolves if all are done.\r\n\t\tlocal function resolveOne(i, ...)\r\n\t\t\tfinishedCount = finishedCount + 1\r\n\r\n\t\t\tfates[i] = ...\r\n\r\n\t\t\tif finishedCount >= #promises then\r\n\t\t\t\tresolve(fates)\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tonCancel(function()\r\n\t\t\tfor _, promise in ipairs(newPromises) do\r\n\t\t\t\tpromise:cancel()\r\n\t\t\tend\r\n\t\tend)\r\n\r\n\t\t-- We can assume the values inside `promises` are all promises since we\r\n\t\t-- checked above.\r\n\t\tfor i, promise in ipairs(promises) do\r\n\t\t\tnewPromises[i] = promise:finally(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\tresolveOne(i, ...)\r\n\t\t\t\tend\r\n\t\t\t)\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a new promise that is resolved or rejected as soon as any Promise in the array resolves or rejects.\r\n\r\n\t:::warning\r\n\tIf the first Promise to settle from the array settles with a rejection, the resulting Promise from `race` will reject.\r\n\r\n\tIf you instead want to tolerate rejections, and only care about at least one Promise resolving, you should use [Promise.any](#any) or [Promise.some](#some) instead.\r\n\t:::\r\n\r\n\tAll other Promises that don't win the race will be cancelled if they have no other consumers.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.race(promises) -- Only returns 1st value to resolve or reject\r\n\t```\r\n\r\n\t@param promises: {Promise}\r\n\t@return Promise\r\n]=]\r\nfunction Promise.race(promises)\r\n\tassert(type(promises) == \"table\", string.format(ERROR_NON_LIST, \"Promise.race\"))\r\n\r\n\tfor i, promise in pairs(promises) do\r\n\t\tassert(Promise.is(promise), string.format(ERROR_NON_PROMISE_IN_LIST, \"Promise.race\", tostring(i)))\r\n\tend\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, reject, onCancel)\r\n\t\tlocal newPromises = {}\r\n\t\tlocal finished = false\r\n\r\n\t\tlocal function cancel()\r\n\t\t\tfor _, promise in ipairs(newPromises) do\r\n\t\t\t\tpromise:cancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tlocal function finalize(callback)\r\n\t\t\treturn function (...)\r\n\t\t\t\tcancel()\r\n\t\t\t\tfinished = true\r\n\t\t\t\treturn callback(...)\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tif onCancel(finalize(reject)) then\r\n\t\t\treturn\r\n\t\tend\r\n\r\n\t\tfor i, promise in ipairs(promises) do\r\n\t\t\tnewPromises[i] = promise:andThen(finalize(resolve), finalize(reject))\r\n\t\tend\r\n\r\n\t\tif finished then\r\n\t\t\tcancel()\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tIterates serially over the given an array of values, calling the predicate callback on each value before continuing.\r\n\r\n\tIf the predicate returns a Promise, we wait for that Promise to resolve before moving on to the next item\r\n\tin the array.\r\n\r\n\t:::info\r\n\t`Promise.each` is similar to `Promise.all`, except the Promises are ran in order instead of all at once.\r\n\r\n\tBut because Promises are eager, by the time they are created, they're already running. Thus, we need a way to defer creation of each Promise until a later time.\r\n\r\n\tThe predicate function exists as a way for us to operate on our data instead of creating a new closure for each Promise. If you would prefer, you can pass in an array of functions, and in the predicate, call the function and return its return value.\r\n\t:::\r\n\r\n\t```lua\r\n\tPromise.each({\r\n\t\t\"foo\",\r\n\t\t\"bar\",\r\n\t\t\"baz\",\r\n\t\t\"qux\"\r\n\t}, function(value, index)\r\n\t\treturn Promise.delay(1):andThen(function()\r\n\t\tprint((\"%d) Got %s!\"):format(index, value))\r\n\t\tend)\r\n\tend)\r\n\r\n\t--[[\r\n\t\t(1 second passes)\r\n\t\t> 1) Got foo!\r\n\t\t(1 second passes)\r\n\t\t> 2) Got bar!\r\n\t\t(1 second passes)\r\n\t\t> 3) Got baz!\r\n\t\t(1 second passes)\r\n\t\t> 4) Got qux!\r\n\t]]\r\n\t```\r\n\r\n\tIf the Promise a predicate returns rejects, the Promise from `Promise.each` is also rejected with the same value.\r\n\r\n\tIf the array of values contains a Promise, when we get to that point in the list, we wait for the Promise to resolve before calling the predicate with the value.\r\n\r\n\tIf a Promise in the array of values is already Rejected when `Promise.each` is called, `Promise.each` rejects with that value immediately (the predicate callback will never be called even once). If a Promise in the list is already Cancelled when `Promise.each` is called, `Promise.each` rejects with `Promise.Error(Promise.Error.Kind.AlreadyCancelled`). If a Promise in the array of values is Started at first, but later rejects, `Promise.each` will reject with that value and iteration will not continue once iteration encounters that value.\r\n\r\n\tReturns a Promise containing an array of the returned/resolved values from the predicate for each item in the array of values.\r\n\r\n\tIf this Promise returned from `Promise.each` rejects or is cancelled for any reason, the following are true:\r\n\t- Iteration will not continue.\r\n\t- Any Promises within the array of values will now be cancelled if they have no other consumers.\r\n\t- The Promise returned from the currently active predicate will be cancelled if it hasn't resolved yet.\r\n\r\n\t@since 3.0.0\r\n\t@param list {T | Promise}\r\n\t@param predicate (value: T, index: number) -> U | Promise\r\n\t@return Promise<{U}>\r\n]=]\r\nfunction Promise.each(list, predicate)\r\n\tassert(type(list) == \"table\", string.format(ERROR_NON_LIST, \"Promise.each\"))\r\n\tassert(type(predicate) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise.each\"))\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, reject, onCancel)\r\n\t\tlocal results = {}\r\n\t\tlocal promisesToCancel = {}\r\n\r\n\t\tlocal cancelled = false\r\n\r\n\t\tlocal function cancel()\r\n\t\t\tfor _, promiseToCancel in ipairs(promisesToCancel) do\r\n\t\t\t\tpromiseToCancel:cancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tonCancel(function()\r\n\t\t\tcancelled = true\r\n\r\n\t\t\tcancel()\r\n\t\tend)\r\n\r\n\t\t-- We need to preprocess the list of values and look for Promises.\r\n\t\t-- If we find some, we must register our andThen calls now, so that those Promises have a consumer\r\n\t\t-- from us registered. If we don't do this, those Promises might get cancelled by something else\r\n\t\t-- before we get to them in the series because it's not possible to tell that we plan to use it\r\n\t\t-- unless we indicate it here.\r\n\r\n\t\tlocal preprocessedList = {}\r\n\r\n\t\tfor index, value in ipairs(list) do\r\n\t\t\tif Promise.is(value) then\r\n\t\t\t\tif value:getStatus() == Promise.Status.Cancelled then\r\n\t\t\t\t\tcancel()\r\n\t\t\t\t\treturn reject(Error.new({\r\n\t\t\t\t\t\terror = \"Promise is cancelled\",\r\n\t\t\t\t\t\tkind = Error.Kind.AlreadyCancelled,\r\n\t\t\t\t\t\tcontext = string.format(\r\n\t\t\t\t\t\t\t\"The Promise that was part of the array at index %d passed into Promise.each was already cancelled when Promise.each began.\\n\\nThat Promise was created at:\\n\\n%s\",\r\n\t\t\t\t\t\t\tindex,\r\n\t\t\t\t\t\t\tvalue._source\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t}))\r\n\t\t\t\telseif value:getStatus() == Promise.Status.Rejected then\r\n\t\t\t\t\tcancel()\r\n\t\t\t\t\treturn reject(select(2, value:await()))\r\n\t\t\t\tend\r\n\r\n\t\t\t\t-- Chain a new Promise from this one so we only cancel ours\r\n\t\t\t\tlocal ourPromise = value:andThen(function(...)\r\n\t\t\t\t\treturn ...\r\n\t\t\t\tend)\r\n\r\n\t\t\t\ttable.insert(promisesToCancel, ourPromise)\r\n\t\t\t\tpreprocessedList[index] = ourPromise\r\n\t\t\telse\r\n\t\t\t\tpreprocessedList[index] = value\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tfor index, value in ipairs(preprocessedList) do\r\n\t\t\tif Promise.is(value) then\r\n\t\t\t\tlocal success\r\n\t\t\t\tsuccess, value = value:await()\r\n\r\n\t\t\t\tif not success then\r\n\t\t\t\t\tcancel()\r\n\t\t\t\t\treturn reject(value)\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tif cancelled then\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\tlocal predicatePromise = Promise.resolve(predicate(value, index))\r\n\r\n\t\t\ttable.insert(promisesToCancel, predicatePromise)\r\n\r\n\t\t\tlocal success, result = predicatePromise:await()\r\n\r\n\t\t\tif not success then\r\n\t\t\t\tcancel()\r\n\t\t\t\treturn reject(result)\r\n\t\t\tend\r\n\r\n\t\t\tresults[index] = result\r\n\t\tend\r\n\r\n\t\tresolve(results)\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tChecks whether the given object is a Promise via duck typing. This only checks if the object is a table and has an `andThen` method.\r\n\r\n\t@param object any\r\n\t@return boolean -- `true` if the given `object` is a Promise.\r\n]=]\r\nfunction Promise.is(object)\r\n\tif type(object) ~= \"table\" then\r\n\t\treturn false\r\n\tend\r\n\r\n\tlocal objectMetatable = getmetatable(object)\r\n\r\n\tif objectMetatable == Promise then\r\n\t\t-- The Promise came from this library.\r\n\t\treturn true\r\n\telseif objectMetatable == nil then\r\n\t\t-- No metatable, but we should still chain onto tables with andThen methods\r\n\t\treturn type(object.andThen) == \"function\"\r\n\telseif\r\n\t\ttype(objectMetatable) == \"table\"\r\n\t\tand type(rawget(objectMetatable, \"__index\")) == \"table\"\r\n\t\tand type(rawget(rawget(objectMetatable, \"__index\"), \"andThen\")) == \"function\"\r\n\tthen\r\n\t\t-- Maybe this came from a different or older Promise library.\r\n\t\treturn true\r\n\tend\r\n\r\n\treturn false\r\nend\r\n\r\n--[=[\r\n\tWraps a function that yields into one that returns a Promise.\r\n\r\n\tAny errors that occur while executing the function will be turned into rejections.\r\n\r\n\t:::info\r\n\t`Promise.promisify` is similar to [Promise.try](#try), except the callback is returned as a callable function instead of being invoked immediately.\r\n\t:::\r\n\r\n\t```lua\r\n\tlocal sleep = Promise.promisify(wait)\r\n\r\n\tsleep(1):andThen(print)\r\n\t```\r\n\r\n\t```lua\r\n\tlocal isPlayerInGroup = Promise.promisify(function(player, groupId)\r\n\t\treturn player:IsInGroup(groupId)\r\n\tend)\r\n\t```\r\n\r\n\t@param callback (...: any) -> ...any\r\n\t@return (...: any) -> Promise\r\n]=]\r\nfunction Promise.promisify(callback)\r\n\treturn function(...)\r\n\t\treturn Promise._try(debug.traceback(nil, 2), callback, ...)\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tReturns a Promise that resolves after `seconds` seconds have passed. The Promise resolves with the actual amount of time that was waited.\r\n\r\n\tThis function is **not** a wrapper around `wait`. `Promise.delay` uses a custom scheduler which provides more accurate timing. As an optimization, cancelling this Promise instantly removes the task from the scheduler.\r\n\r\n\t:::warning\r\n\tPassing `NaN`, infinity, or a number less than 1/60 is equivalent to passing 1/60.\r\n\t:::\r\n\r\n\t```lua\r\n\t\tPromise.delay(5):andThenCall(print, \"This prints after 5 seconds\")\r\n\t```\r\n\r\n\t@function delay\r\n\t@within Promise\r\n\t@param seconds number\r\n\t@return Promise\r\n]=]\r\ndo\r\n\t-- uses a sorted doubly linked list (queue) to achieve O(1) remove operations and O(n) for insert\r\n\r\n\t-- the initial node in the linked list\r\n\tlocal first\r\n\tlocal connection\r\n\r\n\tfunction Promise.delay(seconds)\r\n\t\tassert(type(seconds) == \"number\", \"Bad argument #1 to Promise.delay, must be a number.\")\r\n\t\t-- If seconds is -INF, INF, NaN, or less than 1 / 60, assume seconds is 1 / 60.\r\n\t\t-- This mirrors the behavior of wait()\r\n\t\tif not (seconds >= 1 / 60) or seconds == math.huge then\r\n\t\t\tseconds = 1 / 60\r\n\t\tend\r\n\r\n\t\treturn Promise._new(debug.traceback(nil, 2), function(resolve, _, onCancel)\r\n\t\t\tlocal startTime = Promise._getTime()\r\n\t\t\tlocal endTime = startTime + seconds\r\n\r\n\t\t\tlocal node = {\r\n\t\t\t\tresolve = resolve,\r\n\t\t\t\tstartTime = startTime,\r\n\t\t\t\tendTime = endTime,\r\n\t\t\t}\r\n\r\n\t\t\tif connection == nil then -- first is nil when connection is nil\r\n\t\t\t\tfirst = node\r\n\t\t\t\tconnection = Promise._timeEvent:Connect(function()\r\n\t\t\t\t\tlocal threadStart = Promise._getTime()\r\n\r\n\t\t\t\t\twhile first ~= nil and first.endTime < threadStart do\r\n\t\t\t\t\t\tlocal current = first\r\n\t\t\t\t\t\tfirst = current.next\r\n\r\n\t\t\t\t\t\tif first == nil then\r\n\t\t\t\t\t\t\tconnection:Disconnect()\r\n\t\t\t\t\t\t\tconnection = nil\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tfirst.previous = nil\r\n\t\t\t\t\t\tend\r\n\r\n\t\t\t\t\t\tcurrent.resolve(Promise._getTime() - current.startTime)\r\n\t\t\t\t\tend\r\n\t\t\t\tend)\r\n\t\t\telse -- first is non-nil\r\n\t\t\t\tif first.endTime < endTime then -- if `node` should be placed after `first`\r\n\t\t\t\t\t-- we will insert `node` between `current` and `next`\r\n\t\t\t\t\t-- (i.e. after `current` if `next` is nil)\r\n\t\t\t\t\tlocal current = first\r\n\t\t\t\t\tlocal next = current.next\r\n\r\n\t\t\t\t\twhile next ~= nil and next.endTime < endTime do\r\n\t\t\t\t\t\tcurrent = next\r\n\t\t\t\t\t\tnext = current.next\r\n\t\t\t\t\tend\r\n\r\n\t\t\t\t\t-- `current` must be non-nil, but `next` could be `nil` (i.e. last item in list)\r\n\t\t\t\t\tcurrent.next = node\r\n\t\t\t\t\tnode.previous = current\r\n\r\n\t\t\t\t\tif next ~= nil then\r\n\t\t\t\t\t\tnode.next = next\r\n\t\t\t\t\t\tnext.previous = node\r\n\t\t\t\t\tend\r\n\t\t\t\telse\r\n\t\t\t\t\t-- set `node` to `first`\r\n\t\t\t\t\tnode.next = first\r\n\t\t\t\t\tfirst.previous = node\r\n\t\t\t\t\tfirst = node\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tonCancel(function()\r\n\t\t\t\t-- remove node from queue\r\n\t\t\t\tlocal next = node.next\r\n\r\n\t\t\t\tif first == node then\r\n\t\t\t\t\tif next == nil then -- if `node` is the first and last\r\n\t\t\t\t\t\tconnection:Disconnect()\r\n\t\t\t\t\t\tconnection = nil\r\n\t\t\t\t\telse -- if `node` is `first` and not the last\r\n\t\t\t\t\t\tnext.previous = nil\r\n\t\t\t\t\tend\r\n\t\t\t\t\tfirst = next\r\n\t\t\t\telse\r\n\t\t\t\t\tlocal previous = node.previous\r\n\t\t\t\t\t-- since `node` is not `first`, then we know `previous` is non-nil\r\n\t\t\t\t\tprevious.next = next\r\n\r\n\t\t\t\t\tif next ~= nil then\r\n\t\t\t\t\t\tnext.previous = previous\r\n\t\t\t\t\tend\r\n\t\t\t\tend\r\n\t\t\tend)\r\n\t\tend)\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tReturns a new Promise that resolves if the chained Promise resolves within `seconds` seconds, or rejects if execution time exceeds `seconds`. The chained Promise will be cancelled if the timeout is reached.\r\n\r\n\tRejects with `rejectionValue` if it is non-nil. If a `rejectionValue` is not given, it will reject with a `Promise.Error(Promise.Error.Kind.TimedOut)`. This can be checked with [[Error.isKind]].\r\n\r\n\t```lua\r\n\tgetSomething():timeout(5):andThen(function(something)\r\n\t\t-- got something and it only took at max 5 seconds\r\n\tend):catch(function(e)\r\n\t\t-- Either getting something failed or the time was exceeded.\r\n\r\n\t\tif Promise.Error.isKind(e, Promise.Error.Kind.TimedOut) then\r\n\t\t\twarn(\"Operation timed out!\")\r\n\t\telse\r\n\t\t\twarn(\"Operation encountered an error!\")\r\n\t\tend\r\n\tend)\r\n\t```\r\n\r\n\tSugar for:\r\n\r\n\t```lua\r\n\tPromise.race({\r\n\t\tPromise.delay(seconds):andThen(function()\r\n\t\t\treturn Promise.reject(\r\n\t\t\t\trejectionValue == nil\r\n\t\t\t\tand Promise.Error.new({ kind = Promise.Error.Kind.TimedOut })\r\n\t\t\t\tor rejectionValue\r\n\t\t\t)\r\n\t\tend),\r\n\t\tpromise\r\n\t})\r\n\t```\r\n\r\n\t@param seconds number\r\n\t@param rejectionValue? any -- The value to reject with if the timeout is reached\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:timeout(seconds, rejectionValue)\r\n\tlocal traceback = debug.traceback(nil, 2)\r\n\r\n\treturn Promise.race({\r\n\t\tPromise.delay(seconds):andThen(function()\r\n\t\t\treturn Promise.reject(rejectionValue == nil and Error.new({\r\n\t\t\t\tkind = Error.Kind.TimedOut,\r\n\t\t\t\terror = \"Timed out\",\r\n\t\t\t\tcontext = string.format(\r\n\t\t\t\t\t\"Timeout of %d seconds exceeded.\\n:timeout() called at:\\n\\n%s\",\r\n\t\t\t\t\tseconds,\r\n\t\t\t\t\ttraceback\r\n\t\t\t\t),\r\n\t\t\t}) or rejectionValue)\r\n\t\tend),\r\n\t\tself,\r\n\t})\r\nend\r\n\r\n--[=[\r\n\tReturns the current Promise status.\r\n\r\n\t@return Status\r\n]=]\r\nfunction Promise.prototype:getStatus()\r\n\treturn self._status\r\nend\r\n\r\n--[[\r\n\tCreates a new promise that receives the result of this promise.\r\n\r\n\tThe given callbacks are invoked depending on that result.\r\n]]\r\nfunction Promise.prototype:_andThen(traceback, successHandler, failureHandler)\r\n\tself._unhandledRejection = false\r\n\r\n\t-- Create a new promise to follow this part of the chain\r\n\treturn Promise._new(traceback, function(resolve, reject)\r\n\t\t-- Our default callbacks just pass values onto the next promise.\r\n\t\t-- This lets success and failure cascade correctly!\r\n\r\n\t\tlocal successCallback = resolve\r\n\t\tif successHandler then\r\n\t\t\tsuccessCallback = createAdvancer(\r\n\t\t\t\ttraceback,\r\n\t\t\t\tsuccessHandler,\r\n\t\t\t\tresolve,\r\n\t\t\t\treject\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tlocal failureCallback = reject\r\n\t\tif failureHandler then\r\n\t\t\tfailureCallback = createAdvancer(\r\n\t\t\t\ttraceback,\r\n\t\t\t\tfailureHandler,\r\n\t\t\t\tresolve,\r\n\t\t\t\treject\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tif self._status == Promise.Status.Started then\r\n\t\t\t-- If we haven't resolved yet, put ourselves into the queue\r\n\t\t\ttable.insert(self._queuedResolve, successCallback)\r\n\t\t\ttable.insert(self._queuedReject, failureCallback)\r\n\t\telseif self._status == Promise.Status.Resolved then\r\n\t\t\t-- This promise has already resolved! Trigger success immediately.\r\n\t\t\tsuccessCallback(unpack(self._values, 1, self._valuesLength))\r\n\t\telseif self._status == Promise.Status.Rejected then\r\n\t\t\t-- This promise died a terrible death! Trigger failure immediately.\r\n\t\t\tfailureCallback(unpack(self._values, 1, self._valuesLength))\r\n\t\telseif self._status == Promise.Status.Cancelled then\r\n\t\t\t-- We don't want to call the success handler or the failure handler,\r\n\t\t\t-- we just reject this promise outright.\r\n\t\t\treject(Error.new({\r\n\t\t\t\terror = \"Promise is cancelled\",\r\n\t\t\t\tkind = Error.Kind.AlreadyCancelled,\r\n\t\t\t\tcontext = \"Promise created at\\n\\n\" .. traceback,\r\n\t\t\t}))\r\n\t\tend\r\n\tend, self)\r\nend\r\n\r\n--[=[\r\n\tChains onto an existing Promise and returns a new Promise.\r\n\r\n\t:::warning\r\n\tWithin the failure handler, you should never assume that the rejection value is a string. Some rejections within the Promise library are represented by [[Error]] objects. If you want to treat it as a string for debugging, you should call `tostring` on it first.\r\n\t:::\r\n\r\n\tReturn a Promise from the success or failure handler and it will be chained onto.\r\n\r\n\t@param successHandler (...: any) -> ...any\r\n\t@param failureHandler? (...: any) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:andThen(successHandler, failureHandler)\r\n\tassert(\r\n\t\tsuccessHandler == nil or type(successHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:andThen\")\r\n\t)\r\n\tassert(\r\n\t\tfailureHandler == nil or type(failureHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:andThen\")\r\n\t)\r\n\r\n\treturn self:_andThen(debug.traceback(nil, 2), successHandler, failureHandler)\r\nend\r\n\r\n--[=[\r\n\tShorthand for `Promise:andThen(nil, failureHandler)`.\r\n\r\n\tReturns a Promise that resolves if the `failureHandler` worked without encountering an additional error.\r\n\r\n\t:::warning\r\n\tWithin the failure handler, you should never assume that the rejection value is a string. Some rejections within the Promise library are represented by [[Error]] objects. If you want to treat it as a string for debugging, you should call `tostring` on it first.\r\n\t:::\r\n\r\n\r\n\t@param failureHandler (...: any) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:catch(failureCallback)\r\n\tassert(\r\n\t\tfailureCallback == nil or type(failureCallback) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:catch\")\r\n\t)\r\n\treturn self:_andThen(debug.traceback(nil, 2), nil, failureCallback)\r\nend\r\n\r\n--[=[\r\n\tSimilar to [Promise.andThen](#andThen), except the return value is the same as the value passed to the handler. In other words, you can insert a `:tap` into a Promise chain without affecting the value that downstream Promises receive.\r\n\r\n\t```lua\r\n\t\tgetTheValue()\r\n\t\t:tap(print)\r\n\t\t:andThen(function(theValue)\r\n\t\t\tprint(\"Got\", theValue, \"even though print returns nil!\")\r\n\t\tend)\r\n\t```\r\n\r\n\tIf you return a Promise from the tap handler callback, its value will be discarded but `tap` will still wait until it resolves before passing the original value through.\r\n\r\n\t@param tapHandler (...: any) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:tap(tapCallback)\r\n\tassert(type(tapCallback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:tap\"))\r\n\treturn self:_andThen(debug.traceback(nil, 2), function(...)\r\n\t\tlocal callbackReturn = tapCallback(...)\r\n\r\n\t\tif Promise.is(callbackReturn) then\r\n\t\t\tlocal length, values = pack(...)\r\n\t\t\treturn callbackReturn:andThen(function()\r\n\t\t\t\treturn unpack(values, 1, length)\r\n\t\t\tend)\r\n\t\tend\r\n\r\n\t\treturn ...\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAttaches an `andThen` handler to this Promise that calls the given callback with the predefined arguments. The resolved value is discarded.\r\n\r\n\t```lua\r\n\t\tpromise:andThenCall(someFunction, \"some\", \"arguments\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:andThen(function()\r\n\t\treturn someFunction(\"some\", \"arguments\")\r\n\t\tend)\r\n\t```\r\n\r\n\t@param callback (...: any) -> any\r\n\t@param ...? any -- Additional arguments which will be passed to `callback`\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:andThenCall(callback, ...)\r\n\tassert(type(callback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:andThenCall\"))\r\n\tlocal length, values = pack(...)\r\n\treturn self:_andThen(debug.traceback(nil, 2), function()\r\n\t\treturn callback(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAttaches an `andThen` handler to this Promise that discards the resolved value and returns the given value from it.\r\n\r\n\t```lua\r\n\t\tpromise:andThenReturn(\"some\", \"values\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:andThen(function()\r\n\t\t\treturn \"some\", \"values\"\r\n\t\tend)\r\n\t```\r\n\r\n\t:::caution\r\n\tPromises are eager, so if you pass a Promise to `andThenReturn`, it will begin executing before `andThenReturn` is reached in the chain. Likewise, if you pass a Promise created from [[Promise.reject]] into `andThenReturn`, it's possible that this will trigger the unhandled rejection warning. If you need to return a Promise, it's usually best practice to use [[Promise.andThen]].\r\n\t:::\r\n\r\n\t@param ... any -- Values to return from the function\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:andThenReturn(...)\r\n\tlocal length, values = pack(...)\r\n\treturn self:_andThen(debug.traceback(nil, 2), function()\r\n\t\treturn unpack(values, 1, length)\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tCancels this promise, preventing the promise from resolving or rejecting. Does not do anything if the promise is already settled.\r\n\r\n\tCancellations will propagate upwards and downwards through chained promises.\r\n\r\n\tPromises will only be cancelled if all of their consumers are also cancelled. This is to say that if you call `andThen` twice on the same promise, and you cancel only one of the child promises, it will not cancel the parent promise until the other child promise is also cancelled.\r\n\r\n\t```lua\r\n\t\tpromise:cancel()\r\n\t```\r\n]=]\r\nfunction Promise.prototype:cancel()\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\treturn\r\n\tend\r\n\r\n\tself._status = Promise.Status.Cancelled\r\n\r\n\tif self._cancellationHook then\r\n\t\tself._cancellationHook()\r\n\tend\r\n\r\n\tif self._parent then\r\n\t\tself._parent:_consumerCancelled(self)\r\n\tend\r\n\r\n\tfor child in pairs(self._consumers) do\r\n\t\tchild:cancel()\r\n\tend\r\n\r\n\tself:_finalize()\r\nend\r\n\r\n--[[\r\n\tUsed to decrease the number of consumers by 1, and if there are no more,\r\n\tcancel this promise.\r\n]]\r\nfunction Promise.prototype:_consumerCancelled(consumer)\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\treturn\r\n\tend\r\n\r\n\tself._consumers[consumer] = nil\r\n\r\n\tif next(self._consumers) == nil then\r\n\t\tself:cancel()\r\n\tend\r\nend\r\n\r\n--[[\r\n\tUsed to set a handler for when the promise resolves, rejects, or is\r\n\tcancelled. Returns a new promise chained from this promise.\r\n]]\r\nfunction Promise.prototype:_finally(traceback, finallyHandler, onlyOk)\r\n\tif not onlyOk then\r\n\t\tself._unhandledRejection = false\r\n\tend\r\n\r\n\t-- Return a promise chained off of this promise\r\n\treturn Promise._new(traceback, function(resolve, reject)\r\n\t\tlocal finallyCallback = resolve\r\n\t\tif finallyHandler then\r\n\t\t\tfinallyCallback = createAdvancer(\r\n\t\t\t\ttraceback,\r\n\t\t\t\tfinallyHandler,\r\n\t\t\t\tresolve,\r\n\t\t\t\treject\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tif onlyOk then\r\n\t\t\tlocal callback = finallyCallback\r\n\t\t\tfinallyCallback = function(...)\r\n\t\t\t\tif self._status == Promise.Status.Rejected then\r\n\t\t\t\t\treturn resolve(self)\r\n\t\t\t\tend\r\n\r\n\t\t\t\treturn callback(...)\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tif self._status == Promise.Status.Started then\r\n\t\t\t-- The promise is not settled, so queue this.\r\n\t\t\ttable.insert(self._queuedFinally, finallyCallback)\r\n\t\telse\r\n\t\t\t-- The promise already settled or was cancelled, run the callback now.\r\n\t\t\tfinallyCallback(self._status)\r\n\t\tend\r\n\tend, self)\r\nend\r\n\r\n--[=[\r\n\tSet a handler that will be called regardless of the promise's fate. The handler is called when the promise is resolved, rejected, *or* cancelled.\r\n\r\n\tReturns a new promise chained from this promise.\r\n\r\n\t:::caution\r\n\tIf the Promise is cancelled, any Promises chained off of it with `andThen` won't run. Only Promises chained with `finally` or `done` will run in the case of cancellation.\r\n\t:::\r\n\r\n\t```lua\r\n\tlocal thing = createSomething()\r\n\r\n\tdoSomethingWith(thing)\r\n\t\t:andThen(function()\r\n\t\t\tprint(\"It worked!\")\r\n\t\t\t-- do something..\r\n\t\tend)\r\n\t\t:catch(function()\r\n\t\t\twarn(\"Oh no it failed!\")\r\n\t\tend)\r\n\t\t:finally(function()\r\n\t\t\t-- either way, destroy thing\r\n\r\n\t\t\tthing:Destroy()\r\n\t\tend)\r\n\r\n\t```\r\n\r\n\t@param finallyHandler (status: Status) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:finally(finallyHandler)\r\n\tassert(\r\n\t\tfinallyHandler == nil or type(finallyHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:finally\")\r\n\t)\r\n\treturn self:_finally(debug.traceback(nil, 2), finallyHandler)\r\nend\r\n\r\n--[=[\r\n\tSame as `andThenCall`, except for `finally`.\r\n\r\n\tAttaches a `finally` handler to this Promise that calls the given callback with the predefined arguments.\r\n\r\n\t@param callback (...: any) -> any\r\n\t@param ...? any -- Additional arguments which will be passed to `callback`\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:finallyCall(callback, ...)\r\n\tassert(type(callback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:finallyCall\"))\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn callback(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAttaches a `finally` handler to this Promise that discards the resolved value and returns the given value from it.\r\n\r\n\t```lua\r\n\t\tpromise:finallyReturn(\"some\", \"values\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:finally(function()\r\n\t\t\treturn \"some\", \"values\"\r\n\t\tend)\r\n\t```\r\n\r\n\t@param ... any -- Values to return from the function\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:finallyReturn(...)\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn unpack(values, 1, length)\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tSet a handler that will be called only if the Promise resolves or is cancelled. This method is similar to `finally`, except it doesn't catch rejections.\r\n\r\n\t:::caution\r\n\t`done` should be reserved specifically when you want to perform some operation after the Promise is finished (like `finally`), but you don't want to consume rejections (like in this example). You should use `andThen` instead if you only care about the Resolved case.\r\n\t:::\r\n\r\n\t:::warning\r\n\tLike `finally`, if the Promise is cancelled, any Promises chained off of it with `andThen` won't run. Only Promises chained with `done` and `finally` will run in the case of cancellation.\r\n\t:::\r\n\r\n\tReturns a new promise chained from this promise.\r\n\r\n\t@param doneHandler (status: Status) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:done(finallyHandler)\r\n\tassert(\r\n\t\tfinallyHandler == nil or type(finallyHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:done\")\r\n\t)\r\n\treturn self:_finally(debug.traceback(nil, 2), finallyHandler, true)\r\nend\r\n\r\n--[=[\r\n\tSame as `andThenCall`, except for `done`.\r\n\r\n\tAttaches a `done` handler to this Promise that calls the given callback with the predefined arguments.\r\n\r\n\t@param callback (...: any) -> any\r\n\t@param ...? any -- Additional arguments which will be passed to `callback`\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:doneCall(callback, ...)\r\n\tassert(type(callback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:doneCall\"))\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn callback(unpack(values, 1, length))\r\n\tend, true)\r\nend\r\n\r\n--[=[\r\n\tAttaches a `done` handler to this Promise that discards the resolved value and returns the given value from it.\r\n\r\n\t```lua\r\n\t\tpromise:doneReturn(\"some\", \"values\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:done(function()\r\n\t\t\treturn \"some\", \"values\"\r\n\t\tend)\r\n\t```\r\n\r\n\t@param ... any -- Values to return from the function\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:doneReturn(...)\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn unpack(values, 1, length)\r\n\tend, true)\r\nend\r\n\r\n--[=[\r\n\tYields the current thread until the given Promise completes. Returns the Promise's status, followed by the values that the promise resolved or rejected with.\r\n\r\n\t@yields\r\n\t@return Status -- The Status representing the fate of the Promise\r\n\t@return ...any -- The values the Promise resolved or rejected with.\r\n]=]\r\nfunction Promise.prototype:awaitStatus()\r\n\tself._unhandledRejection = false\r\n\r\n\tif self._status == Promise.Status.Started then\r\n\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\r\n\t\tself:finally(function()\r\n\t\t\tbindable:Fire()\r\n\t\tend)\r\n\r\n\t\tbindable.Event:Wait()\r\n\t\tbindable:Destroy()\r\n\tend\r\n\r\n\tif self._status == Promise.Status.Resolved then\r\n\t\treturn self._status, unpack(self._values, 1, self._valuesLength)\r\n\telseif self._status == Promise.Status.Rejected then\r\n\t\treturn self._status, unpack(self._values, 1, self._valuesLength)\r\n\tend\r\n\r\n\treturn self._status\r\nend\r\n\r\nlocal function awaitHelper(status, ...)\r\n\treturn status == Promise.Status.Resolved, ...\r\nend\r\n\r\n--[=[\r\n\tYields the current thread until the given Promise completes. Returns true if the Promise resolved, followed by the values that the promise resolved or rejected with.\r\n\r\n\t:::caution\r\n\tIf the Promise gets cancelled, this function will return `false`, which is indistinguishable from a rejection. If you need to differentiate, you should use [[Promise.awaitStatus]] instead.\r\n\t:::\r\n\r\n\t```lua\r\n\t\tlocal worked, value = getTheValue():await()\r\n\r\n\tif worked then\r\n\t\tprint(\"got\", value)\r\n\telse\r\n\t\twarn(\"it failed\")\r\n\tend\r\n\t```\r\n\r\n\t@yields\r\n\t@return boolean -- `true` if the Promise successfully resolved\r\n\t@return ...any -- The values the Promise resolved or rejected with.\r\n]=]\r\nfunction Promise.prototype:await()\r\n\treturn awaitHelper(self:awaitStatus())\r\nend\r\n\r\nlocal function expectHelper(status, ...)\r\n\tif status ~= Promise.Status.Resolved then\r\n\t\terror((...) == nil and \"Expected Promise rejected with no value.\" or (...), 3)\r\n\tend\r\n\r\n\treturn ...\r\nend\r\n\r\n--[=[\r\n\tYields the current thread until the given Promise completes. Returns the the values that the promise resolved with.\r\n\r\n\t```lua\r\n\tlocal worked = pcall(function()\r\n\t\tprint(\"got\", getTheValue():expect())\r\n\tend)\r\n\r\n\tif not worked then\r\n\t\twarn(\"it failed\")\r\n\tend\r\n\t```\r\n\r\n\tThis is essentially sugar for:\r\n\r\n\t```lua\r\n\tselect(2, assert(promise:await()))\r\n\t```\r\n\r\n\t**Errors** if the Promise rejects or gets cancelled.\r\n\r\n\t@error any -- Errors with the rejection value if this Promise rejects or gets cancelled.\r\n\t@yields\r\n\t@return ...any -- The values the Promise resolved with.\r\n]=]\r\nfunction Promise.prototype:expect()\r\n\treturn expectHelper(self:awaitStatus())\r\nend\r\n\r\n-- Backwards compatibility\r\nPromise.prototype.awaitValue = Promise.prototype.expect\r\n\r\n--[[\r\n\tIntended for use in tests.\r\n\r\n\tSimilar to await(), but instead of yielding if the promise is unresolved,\r\n\t_unwrap will throw. This indicates an assumption that a promise has\r\n\tresolved.\r\n]]\r\nfunction Promise.prototype:_unwrap()\r\n\tif self._status == Promise.Status.Started then\r\n\t\terror(\"Promise has not resolved or rejected.\", 2)\r\n\tend\r\n\r\n\tlocal success = self._status == Promise.Status.Resolved\r\n\r\n\treturn success, unpack(self._values, 1, self._valuesLength)\r\nend\r\n\r\nfunction Promise.prototype:_resolve(...)\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\tif Promise.is((...)) then\r\n\t\t\t(...):_consumerCancelled(self)\r\n\t\tend\r\n\t\treturn\r\n\tend\r\n\r\n\t-- If the resolved value was a Promise, we chain onto it!\r\n\tif Promise.is((...)) then\r\n\t\t-- Without this warning, arguments sometimes mysteriously disappear\r\n\t\tif select(\"#\", ...) > 1 then\r\n\t\t\tlocal message = string.format(\r\n\t\t\t\t\"When returning a Promise from andThen, extra arguments are \" ..\r\n\t\t\t\t\"discarded! See:\\n\\n%s\",\r\n\t\t\t\tself._source\r\n\t\t\t)\r\n\t\t\twarn(message)\r\n\t\tend\r\n\r\n\t\tlocal chainedPromise = ...\r\n\r\n\t\tlocal promise = chainedPromise:andThen(\r\n\t\t\tfunction(...)\r\n\t\t\t\tself:_resolve(...)\r\n\t\t\tend,\r\n\t\t\tfunction(...)\r\n\t\t\t\tlocal maybeRuntimeError = chainedPromise._values[1]\r\n\r\n\t\t\t\t-- Backwards compatibility < v2\r\n\t\t\t\tif chainedPromise._error then\r\n\t\t\t\t\tmaybeRuntimeError = Error.new({\r\n\t\t\t\t\t\terror = chainedPromise._error,\r\n\t\t\t\t\t\tkind = Error.Kind.ExecutionError,\r\n\t\t\t\t\t\tcontext = \"[No stack trace available as this Promise originated from an older version of the Promise library (< v2)]\",\r\n\t\t\t\t\t})\r\n\t\t\t\tend\r\n\r\n\t\t\t\tif Error.isKind(maybeRuntimeError, Error.Kind.ExecutionError) then\r\n\t\t\t\t\treturn self:_reject(maybeRuntimeError:extend({\r\n\t\t\t\t\t\terror = \"This Promise was chained to a Promise that errored.\",\r\n\t\t\t\t\t\ttrace = \"\",\r\n\t\t\t\t\t\tcontext = string.format(\r\n\t\t\t\t\t\t\t\"The Promise at:\\n\\n%s\\n...Rejected because it was chained to the following Promise, which encountered an error:\\n\",\r\n\t\t\t\t\t\t\tself._source\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t}))\r\n\t\t\t\tend\r\n\r\n\t\t\t\tself:_reject(...)\r\n\t\t\tend\r\n\t\t)\r\n\r\n\t\tif promise._status == Promise.Status.Cancelled then\r\n\t\t\tself:cancel()\r\n\t\telseif promise._status == Promise.Status.Started then\r\n\t\t\t-- Adopt ourselves into promise for cancellation propagation.\r\n\t\t\tself._parent = promise\r\n\t\t\tpromise._consumers[self] = true\r\n\t\tend\r\n\r\n\t\treturn\r\n\tend\r\n\r\n\tself._status = Promise.Status.Resolved\r\n\tself._valuesLength, self._values = pack(...)\r\n\r\n\t-- We assume that these callbacks will not throw errors.\r\n\tfor _, callback in ipairs(self._queuedResolve) do\r\n\t\tcoroutine.wrap(callback)(...)\r\n\tend\r\n\r\n\tself:_finalize()\r\nend\r\n\r\nfunction Promise.prototype:_reject(...)\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\treturn\r\n\tend\r\n\r\n\tself._status = Promise.Status.Rejected\r\n\tself._valuesLength, self._values = pack(...)\r\n\r\n\t-- If there are any rejection handlers, call those!\r\n\tif not isEmpty(self._queuedReject) then\r\n\t\t-- We assume that these callbacks will not throw errors.\r\n\t\tfor _, callback in ipairs(self._queuedReject) do\r\n\t\t\tcoroutine.wrap(callback)(...)\r\n\t\tend\r\n\telse\r\n\t\t-- At this point, no one was able to observe the error.\r\n\t\t-- An error handler might still be attached if the error occurred\r\n\t\t-- synchronously. We'll wait one tick, and if there are still no\r\n\t\t-- observers, then we should put a message in the console.\r\n\r\n\t\tlocal err = tostring((...))\r\n\r\n\t\tcoroutine.wrap(function()\r\n\t\t\tPromise._timeEvent:Wait()\r\n\r\n\t\t\t-- Someone observed the error, hooray!\r\n\t\t\tif not self._unhandledRejection then\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\t-- Build a reasonable message\r\n\t\t\tlocal message = string.format(\r\n\t\t\t\t\"Unhandled Promise rejection:\\n\\n%s\\n\\n%s\",\r\n\t\t\t\terr,\r\n\t\t\t\tself._source\r\n\t\t\t)\r\n\r\n\t\t\tif Promise.TEST then\r\n\t\t\t\t-- Don't spam output when we're running tests.\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\twarn(message)\r\n\t\tend)()\r\n\tend\r\n\r\n\tself:_finalize()\r\nend\r\n\r\n--[[\r\n\tCalls any :finally handlers. We need this to be a separate method and\r\n\tqueue because we must call all of the finally callbacks upon a success,\r\n\tfailure, *and* cancellation.\r\n]]\r\nfunction Promise.prototype:_finalize()\r\n\tfor _, callback in ipairs(self._queuedFinally) do\r\n\t\t-- Purposefully not passing values to callbacks here, as it could be the\r\n\t\t-- resolved values, or rejected errors. If the developer needs the values,\r\n\t\t-- they should use :andThen or :catch explicitly.\r\n\t\tcoroutine.wrap(callback)(self._status)\r\n\tend\r\n\r\n\tself._queuedFinally = nil\r\n\tself._queuedReject = nil\r\n\tself._queuedResolve = nil\r\n\r\n\t-- Clear references to other Promises to allow gc\r\n\tif not Promise.TEST then\r\n\t\tself._parent = nil\r\n\t\tself._consumers = nil\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tChains a Promise from this one that is resolved if this Promise is already resolved, and rejected if it is not resolved at the time of calling `:now()`. This can be used to ensure your `andThen` handler occurs on the same frame as the root Promise execution.\r\n\r\n\t```lua\r\n\tdoSomething()\r\n\t\t:now()\r\n\t\t:andThen(function(value)\r\n\t\t\tprint(\"Got\", value, \"synchronously.\")\r\n\t\tend)\r\n\t```\r\n\r\n\tIf this Promise is still running, Rejected, or Cancelled, the Promise returned from `:now()` will reject with the `rejectionValue` if passed, otherwise with a `Promise.Error(Promise.Error.Kind.NotResolvedInTime)`. This can be checked with [[Error.isKind]].\r\n\r\n\t@param rejectionValue? any -- The value to reject with if the Promise isn't resolved\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:now(rejectionValue)\r\n\tlocal traceback = debug.traceback(nil, 2)\r\n\tif self._status == Promise.Status.Resolved then\r\n\t\treturn self:_andThen(traceback, function(...)\r\n\t\t\treturn ...\r\n\t\tend)\r\n\telse\r\n\t\treturn Promise.reject(rejectionValue == nil and Error.new({\r\n\t\t\tkind = Error.Kind.NotResolvedInTime,\r\n\t\t\terror = \"This Promise was not resolved in time for :now()\",\r\n\t\t\tcontext = \":now() was called at:\\n\\n\" .. traceback,\r\n\t\t}) or rejectionValue)\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tRepeatedly calls a Promise-returning function up to `times` number of times, until the returned Promise resolves.\r\n\r\n\tIf the amount of retries is exceeded, the function will return the latest rejected Promise.\r\n\r\n\t```lua\r\n\tlocal function canFail(a, b, c)\r\n\t\treturn Promise.new(function(resolve, reject)\r\n\t\t\t-- do something that can fail\r\n\r\n\t\t\tlocal failed, thing = doSomethingThatCanFail(a, b, c)\r\n\r\n\t\t\tif failed then\r\n\t\t\t\treject(\"it failed\")\r\n\t\t\telse\r\n\t\t\t\tresolve(thing)\r\n\t\t\tend\r\n\t\tend)\r\n\tend\r\n\r\n\tlocal MAX_RETRIES = 10\r\n\tlocal value = Promise.retry(canFail, MAX_RETRIES, \"foo\", \"bar\", \"baz\") -- args to send to canFail\r\n\t```\r\n\r\n\t@since 3.0.0\r\n\t@param callback (...: P) -> Promise\r\n\t@param times number\r\n\t@param ...? P\r\n]=]\r\nfunction Promise.retry(callback, times, ...)\r\n\tassert(type(callback) == \"function\", \"Parameter #1 to Promise.retry must be a function\")\r\n\tassert(type(times) == \"number\", \"Parameter #2 to Promise.retry must be a number\")\r\n\r\n\tlocal args, length = {...}, select(\"#\", ...)\r\n\r\n\treturn Promise.resolve(callback(...)):catch(function(...)\r\n\t\tif times > 0 then\r\n\t\t\treturn Promise.retry(callback, times - 1, unpack(args, 1, length))\r\n\t\telse\r\n\t\t\treturn Promise.reject(...)\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tConverts an event into a Promise which resolves the next time the event fires.\r\n\r\n\tThe optional `predicate` callback, if passed, will receive the event arguments and should return `true` or `false`, based on if this fired event should resolve the Promise or not. If `true`, the Promise resolves. If `false`, nothing happens and the predicate will be rerun the next time the event fires.\r\n\r\n\tThe Promise will resolve with the event arguments.\r\n\r\n\t:::tip\r\n\tThis function will work given any object with a `Connect` method. This includes all Roblox events.\r\n\t:::\r\n\r\n\t```lua\r\n\t-- Creates a Promise which only resolves when `somePart` is touched\r\n\t-- by a part named `\"Something specific\"`.\r\n\treturn Promise.fromEvent(somePart.Touched, function(part)\r\n\t\treturn part.Name == \"Something specific\"\r\n\tend)\r\n\t```\r\n\r\n\t@since 3.0.0\r\n\t@param event Event -- Any object with a `Connect` method. This includes all Roblox events.\r\n\t@param predicate? (...: P) -> boolean -- A function which determines if the Promise should resolve with the given value, or wait for the next event to check again.\r\n\t@return Promise

\r\n]=]\r\nfunction Promise.fromEvent(event, predicate)\r\n\tpredicate = predicate or function()\r\n\t\treturn true\r\n\tend\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, _, onCancel)\r\n\t\tlocal connection\r\n\t\tlocal shouldDisconnect = false\r\n\r\n\t\tlocal function disconnect()\r\n\t\t\tconnection:Disconnect()\r\n\t\t\tconnection = nil\r\n\t\tend\r\n\r\n\t\t-- We use shouldDisconnect because if the callback given to Connect is called before\r\n\t\t-- Connect returns, connection will still be nil. This happens with events that queue up\r\n\t\t-- events when there's nothing connected, such as RemoteEvents\r\n\r\n\t\tconnection = event:Connect(function(...)\r\n\t\t\tlocal callbackValue = predicate(...)\r\n\r\n\t\t\tif callbackValue == true then\r\n\t\t\t\tresolve(...)\r\n\r\n\t\t\t\tif connection then\r\n\t\t\t\t\tdisconnect()\r\n\t\t\t\telse\r\n\t\t\t\t\tshouldDisconnect = true\r\n\t\t\t\tend\r\n\t\t\telseif type(callbackValue) ~= \"boolean\" then\r\n\t\t\t\terror(\"Promise.fromEvent predicate should always return a boolean\")\r\n\t\t\tend\r\n\t\tend)\r\n\r\n\t\tif shouldDisconnect and connection then\r\n\t\t\treturn disconnect()\r\n\t\tend\r\n\r\n\t\tonCancel(disconnect)\r\n\tend)\r\nend\r\n\r\nreturn Promise\r\n"}},"Children":["6957f7983ac08acabf224266f365d3f7"],"Metadata":{"ignoreUnknownInstances":false}},"133a9b005fbea6beac1d059ddc9fef0e":{"Id":"133a9b005fbea6beac1d059ddc9fef0e","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"ContextBlock","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\n\nlocal IContext = require(script.Parent.IContext)\ntype IContext = IContext.IContext\n\nlocal isContextBlock = t.interface({\n\tRemote = t.instanceIsA(\"RemoteEvent\"),\n\tContext = t.any,\n\tActions = t.interface({\n\t\t[t.string] = t.interface({ t.callback }),\n\t}),\n})\n\nexport type ContextBlock = {\n\tRemote: RemoteEvent,\n\tContext: IContext,\n\tActions: {\n\t\t[string]: { () -> () },\n\t},\n}\n\nreturn function(obj)\n\treturn isContextBlock(obj) :: boolean\nend\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"99ea57650081417fd256b7092ccdba19":{"Id":"99ea57650081417fd256b7092ccdba19","Parent":"c39e26776de082e6222fc839fa8b1b48","Name":"ts","ClassName":"ModuleScript","Properties":{"Source":{"String":"-- t: a runtime typechecker for Roblox\r\n\r\n-- regular lua compatibility\r\nlocal typeof = typeof or type\r\n\r\nlocal function primitive(typeName)\r\n\treturn function(value)\r\n\t\tlocal valueType = typeof(value)\r\n\t\tif valueType == typeName then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\nlocal t = {}\r\n\r\n--[[**\r\n\tmatches any type except nil\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.any(value)\r\n\tif value ~= nil then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n--Lua primitives\r\n\r\n--[[**\r\n\tensures Lua primitive boolean type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.boolean = primitive(\"boolean\")\r\n\r\n--[[**\r\n\tensures Lua primitive thread type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.thread = primitive(\"thread\")\r\n\r\n--[[**\r\n\tensures Lua primitive callback type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.callback = primitive(\"function\")\r\nt[\"function\"] = t.callback\r\n\r\n--[[**\r\n\tensures Lua primitive none type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.none = primitive(\"nil\")\r\nt[\"nil\"] = t.none\r\n\r\n--[[**\r\n\tensures Lua primitive string type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.string = primitive(\"string\")\r\n\r\n--[[**\r\n\tensures Lua primitive table type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.table = primitive(\"table\")\r\n\r\n--[[**\r\n\tensures Lua primitive userdata type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.userdata = primitive(\"userdata\")\r\n\r\n--[[**\r\n\tensures value is a number and non-NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.number(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value == value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.nan(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value ~= value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n-- roblox types\r\n\r\n--[[**\r\n\tensures Roblox Axes type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Axes = primitive(\"Axes\")\r\n\r\n--[[**\r\n\tensures Roblox BrickColor type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.BrickColor = primitive(\"BrickColor\")\r\n\r\n--[[**\r\n\tensures Roblox CFrame type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.CFrame = primitive(\"CFrame\")\r\n\r\n--[[**\r\n\tensures Roblox Color3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Color3 = primitive(\"Color3\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequence = primitive(\"ColorSequence\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequenceKeypoint = primitive(\"ColorSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox DockWidgetPluginGuiInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.DockWidgetPluginGuiInfo = primitive(\"DockWidgetPluginGuiInfo\")\r\n\r\n--[[**\r\n\tensures Roblox Faces type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Faces = primitive(\"Faces\")\r\n\r\n--[[**\r\n\tensures Roblox Instance type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Instance = primitive(\"Instance\")\r\n\r\n--[[**\r\n\tensures Roblox NumberRange type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberRange = primitive(\"NumberRange\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequence = primitive(\"NumberSequence\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequenceKeypoint = primitive(\"NumberSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PathWaypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PathWaypoint = primitive(\"PathWaypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PhysicalProperties type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PhysicalProperties = primitive(\"PhysicalProperties\")\r\n\r\n--[[**\r\n\tensures Roblox Random type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Random = primitive(\"Random\")\r\n\r\n--[[**\r\n\tensures Roblox Ray type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Ray = primitive(\"Ray\")\r\n\r\n--[[**\r\n\tensures Roblox Rect type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Rect = primitive(\"Rect\")\r\n\r\n--[[**\r\n\tensures Roblox Region3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3 = primitive(\"Region3\")\r\n\r\n--[[**\r\n\tensures Roblox Region3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3int16 = primitive(\"Region3int16\")\r\n\r\n--[[**\r\n\tensures Roblox TweenInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.TweenInfo = primitive(\"TweenInfo\")\r\n\r\n--[[**\r\n\tensures Roblox UDim type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim = primitive(\"UDim\")\r\n\r\n--[[**\r\n\tensures Roblox UDim2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim2 = primitive(\"UDim2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector2 = primitive(\"Vector2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3 = primitive(\"Vector3\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3int16 = primitive(\"Vector3int16\")\r\n\r\n-- roblox enum types\r\n\r\n--[[**\r\n\tensures Roblox Enum type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Enum = primitive(\"Enum\")\r\n\r\n--[[**\r\n\tensures Roblox EnumItem type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.EnumItem = primitive(\"EnumItem\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptSignal type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptSignal = primitive(\"RBXScriptSignal\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptConnection type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptConnection = primitive(\"RBXScriptConnection\")\r\n\r\n--[[**\r\n\tensures value is a given literal value\r\n\r\n\t@param literal The literal to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.literal(...)\r\n\tlocal size = select(\"#\", ...)\r\n\tif size == 1 then\r\n\t\tlocal literal = ...\r\n\t\treturn function(value)\r\n\t\t\tif value ~= literal then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\telse\r\n\t\tlocal literals = {}\r\n\t\tfor i = 1, size do\r\n\t\t\tlocal value = select(i, ...)\r\n\t\t\tliterals[i] = t.literal(value)\r\n\t\tend\r\n\r\n\t\treturn t.union(table.unpack(literals, 1, size))\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tDEPRECATED\r\n\tPlease use t.literal\r\n**--]]\r\nt.exactly = t.literal\r\n\r\n--[[**\r\n\tReturns a t.union of each key in the table as a t.literal\r\n\r\n\t@param keyTable The table to get keys from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.keyOf(keyTable)\r\n\tlocal keys = {}\r\n\tlocal length = 0\r\n\tfor key in pairs(keyTable) do\r\n\t\tlength = length + 1\r\n\t\tkeys[length] = key\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(keys, 1, length))\r\nend\r\n\r\n--[[**\r\n\tReturns a t.union of each value in the table as a t.literal\r\n\r\n\t@param valueTable The table to get values from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.valueOf(valueTable)\r\n\tlocal values = {}\r\n\tlocal length = 0\r\n\tfor _, value in pairs(valueTable) do\r\n\t\tlength = length + 1\r\n\t\tvalues[length] = value\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(values, 1, length))\r\nend\r\n\r\n--[[**\r\n\tensures value is an integer\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.integer(value)\r\n\tlocal success = t.number(value)\r\n\tif not success then\r\n\t\treturn false\r\n\tend\r\n\r\n\tif value % 1 == 0 then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min <= value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMin(min)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value >= min then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value <= max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMax(max)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value <= max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMinExclusive(min)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif min < value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value < max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMaxExclusive(max)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value < max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value > 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberPositive = t.numberMinExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where value < 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberNegative = t.numberMaxExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where min <= value <= max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrained(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMin(min)\r\n\tlocal maxCheck = t.numberMax(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value < max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrainedExclusive(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMinExclusive(min)\r\n\tlocal maxCheck = t.numberMaxExclusive(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value matches string pattern\r\n\r\n\t@param string pattern to check against\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.match(pattern)\r\n\tassert(t.string(pattern))\r\n\treturn function(value)\r\n\t\tlocal stringSuccess = t.string(value)\r\n\t\tif not stringSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif string.match(value, pattern) == nil then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is either nil or passes check\r\n\r\n\t@param check The check to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.optional(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tif value == nil then\r\n\t\t\treturn true\r\n\t\tend\r\n\r\n\t\tlocal success = check(value)\r\n\t\tif success then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tmatches given tuple against tuple type definition\r\n\r\n\t@param ... The type definition for the tuples\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.tuple(...)\r\n\tlocal checks = { ... }\r\n\treturn function(...)\r\n\t\tlocal args = { ... }\r\n\t\tfor i, check in ipairs(checks) do\r\n\t\t\tlocal success = check(args[i])\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all keys in given table pass check\r\n\r\n\t@param check The function to use to check the keys\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.keys(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tfor key in pairs(value) do\r\n\t\t\tlocal success = check(key)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all values in given table pass check\r\n\r\n\t@param check The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.values(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tfor _, val in pairs(value) do\r\n\t\t\tlocal success = check(val)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass keyCheck and all values pass valueCheck\r\n\r\n\t@param keyCheck The function to use to check the keys\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.map(keyCheck, valueCheck)\r\n\tassert(t.callback(keyCheck))\r\n\tassert(t.callback(valueCheck))\r\n\tlocal keyChecker = t.keys(keyCheck)\r\n\tlocal valueChecker = t.values(valueCheck)\r\n\r\n\treturn function(value)\r\n\t\tlocal keySuccess = keyChecker(value)\r\n\t\tif not keySuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tlocal valueSuccess = valueChecker(value)\r\n\t\tif not valueSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass valueCheck and all values are true\r\n\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.set(valueCheck)\r\n\treturn t.map(valueCheck, t.literal(true))\r\nend\r\n\r\ndo\r\n\tlocal arrayKeysCheck = t.keys(t.integer)\r\n--[[**\r\n\t\tensures value is an array and all values of the array match check\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.array(check)\r\n\t\tassert(t.callback(check))\r\n\t\tlocal valuesCheck = t.values(check)\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\t-- # is unreliable for sparse arrays\r\n\t\t\t-- Count upwards using ipairs to avoid false positives from the behavior of #\r\n\t\t\tlocal arraySize = 0\r\n\r\n\t\t\tfor _ in ipairs(value) do\r\n\t\t\t\tarraySize = arraySize + 1\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif key < 1 or key > arraySize then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tlocal valueSuccess = valuesCheck(value)\r\n\t\t\tif not valueSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value is an array of a strict makeup and size\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictArray(...)\r\n\t\tlocal valueTypes = { ... }\r\n\t\tassert(t.array(t.callback)(valueTypes))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\t-- If there's more than the set array size, disallow\r\n\t\t\tif #valueTypes < #value then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tfor idx, typeFn in pairs(valueTypes) do\r\n\t\t\t\tlocal typeSuccess = typeFn(value[idx])\r\n\t\t\t\tif not typeSuccess then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal callbackArray = t.array(t.callback)\r\n--[[**\r\n\t\tcreates a union type\r\n\r\n\t\t@param ... The checks to union\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.union(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tif check(value) then\r\n\t\t\t\t\treturn true\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.union\r\n\t**--]]\r\n\tt.some = t.union\r\n\r\n--[[**\r\n\t\tcreates an intersection type\r\n\r\n\t\t@param ... The checks to intersect\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.intersection(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tlocal success = check(value)\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.intersection\r\n\t**--]]\r\n\tt.every = t.intersection\r\nend\r\n\r\ndo\r\n\tlocal checkInterface = t.map(t.any, t.callback)\r\n--[[**\r\n\t\tensures value matches given interface definition\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.interface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value matches given interface definition strictly\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictInterface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif not checkTable[key] then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceOf(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value.ClassName ~= className then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\nt.instance = t.instanceOf\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName by an IsA comparison\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceIsA(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif not value:IsA(className) then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is an enum of the correct type\r\n\r\n\t@param enum The enum to check\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.enum(enum)\r\n\tassert(t.Enum(enum))\r\n\treturn function(value)\r\n\t\tlocal enumItemSuccess = t.EnumItem(value)\r\n\t\tif not enumItemSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value.EnumType == enum then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkWrap = t.tuple(t.callback, t.callback)\r\n\r\n--[[**\r\n\t\twraps a callback in an assert with checkArgs\r\n\r\n\t\t@param callback The function to wrap\r\n\t\t@param checkArgs The functon to use to check arguments in the assert\r\n\r\n\t\t@returns A function that first asserts using checkArgs and then calls callback\r\n\t**--]]\r\n\tfunction t.wrap(callback, checkArgs)\r\n\t\tassert(checkWrap(callback, checkArgs))\r\n\t\treturn function(...)\r\n\t\t\tassert(checkArgs(...))\r\n\t\t\treturn callback(...)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tasserts a given check\r\n\r\n\t@param check The function to wrap with an assert\r\n\r\n\t@returns A function that simply wraps the given check in an assert\r\n**--]]\r\nfunction t.strict(check)\r\n\treturn function(...)\r\n\t\tassert(check(...))\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkChildren = t.map(t.string, t.callback)\r\n\r\n--[[**\r\n\t\tTakes a table where keys are child names and values are functions to check the children against.\r\n\t\tPass an instance tree into the function.\r\n\t\tIf at least one child passes each check, the overall check passes.\r\n\r\n\t\tWarning! If you pass in a tree with more than one child of the same name, this function will always return false\r\n\r\n\t\t@param checkTable The table to check against\r\n\r\n\t\t@returns A function that checks an instance tree\r\n\t**--]]\r\n\tfunction t.children(checkTable)\r\n\t\tassert(checkChildren(checkTable))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal instanceSuccess = t.Instance(value)\r\n\t\t\tif not instanceSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tlocal childrenByName = {}\r\n\t\t\tfor _, child in ipairs(value:GetChildren()) do\r\n\t\t\t\tlocal name = child.Name\r\n\t\t\t\tif checkTable[name] then\r\n\t\t\t\t\tif childrenByName[name] then\r\n\t\t\t\t\t\treturn false\r\n\t\t\t\t\tend\r\n\r\n\t\t\t\t\tchildrenByName[name] = child\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor name, check in pairs(checkTable) do\r\n\t\t\t\tlocal success = check(childrenByName[name])\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\nreturn { t = t }\r\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"c39e26776de082e6222fc839fa8b1b48":{"Id":"c39e26776de082e6222fc839fa8b1b48","Parent":"9ee814837a27b11857e89563135cd306","Name":"t","ClassName":"ModuleScript","Properties":{"Source":{"String":"-- t: a runtime typechecker for Roblox\r\n\r\n-- regular lua compatibility\r\nlocal typeof = typeof or type\r\n\r\nlocal function primitive(typeName)\r\n\treturn function(value)\r\n\t\tlocal valueType = typeof(value)\r\n\t\tif valueType == typeName then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"%s expected, got %s\", typeName, valueType)\r\n\t\tend\r\n\tend\r\nend\r\n\r\nlocal t = {}\r\n\r\n--[[**\r\n\tmatches any type except nil\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.any(value)\r\n\tif value ~= nil then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false, \"any expected, got nil\"\r\n\tend\r\nend\r\n\r\n--Lua primitives\r\n\r\n--[[**\r\n\tensures Lua primitive boolean type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.boolean = primitive(\"boolean\")\r\n\r\n--[[**\r\n\tensures Lua primitive thread type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.thread = primitive(\"thread\")\r\n\r\n--[[**\r\n\tensures Lua primitive callback type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.callback = primitive(\"function\")\r\nt[\"function\"] = t.callback\r\n\r\n--[[**\r\n\tensures Lua primitive none type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.none = primitive(\"nil\")\r\nt[\"nil\"] = t.none\r\n\r\n--[[**\r\n\tensures Lua primitive string type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.string = primitive(\"string\")\r\n\r\n--[[**\r\n\tensures Lua primitive table type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.table = primitive(\"table\")\r\n\r\n--[[**\r\n\tensures Lua primitive userdata type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.userdata = primitive(\"userdata\")\r\n\r\n--[[**\r\n\tensures value is a number and non-NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.number(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value == value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, \"unexpected NaN value\"\r\n\t\tend\r\n\telse\r\n\t\treturn false, string.format(\"number expected, got %s\", valueType)\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.nan(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value ~= value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, \"unexpected non-NaN value\"\r\n\t\tend\r\n\telse\r\n\t\treturn false, string.format(\"number expected, got %s\", valueType)\r\n\tend\r\nend\r\n\r\n-- roblox types\r\n\r\n--[[**\r\n\tensures Roblox Axes type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Axes = primitive(\"Axes\")\r\n\r\n--[[**\r\n\tensures Roblox BrickColor type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.BrickColor = primitive(\"BrickColor\")\r\n\r\n--[[**\r\n\tensures Roblox CFrame type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.CFrame = primitive(\"CFrame\")\r\n\r\n--[[**\r\n\tensures Roblox Color3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Color3 = primitive(\"Color3\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequence = primitive(\"ColorSequence\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequenceKeypoint = primitive(\"ColorSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox DockWidgetPluginGuiInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.DockWidgetPluginGuiInfo = primitive(\"DockWidgetPluginGuiInfo\")\r\n\r\n--[[**\r\n\tensures Roblox Faces type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Faces = primitive(\"Faces\")\r\n\r\n--[[**\r\n\tensures Roblox Instance type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Instance = primitive(\"Instance\")\r\n\r\n--[[**\r\n\tensures Roblox NumberRange type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberRange = primitive(\"NumberRange\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequence = primitive(\"NumberSequence\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequenceKeypoint = primitive(\"NumberSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PathWaypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PathWaypoint = primitive(\"PathWaypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PhysicalProperties type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PhysicalProperties = primitive(\"PhysicalProperties\")\r\n\r\n--[[**\r\n\tensures Roblox Random type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Random = primitive(\"Random\")\r\n\r\n--[[**\r\n\tensures Roblox Ray type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Ray = primitive(\"Ray\")\r\n\r\n--[[**\r\n\tensures Roblox Rect type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Rect = primitive(\"Rect\")\r\n\r\n--[[**\r\n\tensures Roblox Region3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3 = primitive(\"Region3\")\r\n\r\n--[[**\r\n\tensures Roblox Region3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3int16 = primitive(\"Region3int16\")\r\n\r\n--[[**\r\n\tensures Roblox TweenInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.TweenInfo = primitive(\"TweenInfo\")\r\n\r\n--[[**\r\n\tensures Roblox UDim type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim = primitive(\"UDim\")\r\n\r\n--[[**\r\n\tensures Roblox UDim2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim2 = primitive(\"UDim2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector2 = primitive(\"Vector2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3 = primitive(\"Vector3\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3int16 = primitive(\"Vector3int16\")\r\n\r\n-- roblox enum types\r\n\r\n--[[**\r\n\tensures Roblox Enum type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Enum = primitive(\"Enum\")\r\n\r\n--[[**\r\n\tensures Roblox EnumItem type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.EnumItem = primitive(\"EnumItem\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptSignal type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptSignal = primitive(\"RBXScriptSignal\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptConnection type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptConnection = primitive(\"RBXScriptConnection\")\r\n\r\n--[[**\r\n\tensures value is a given literal value\r\n\r\n\t@param literal The literal to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.literal(...)\r\n\tlocal size = select(\"#\", ...)\r\n\tif size == 1 then\r\n\t\tlocal literal = ...\r\n\t\treturn function(value)\r\n\t\t\tif value ~= literal then\r\n\t\t\t\treturn false, string.format(\"expected %s, got %s\", tostring(literal), tostring(value))\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\telse\r\n\t\tlocal literals = {}\r\n\t\tfor i = 1, size do\r\n\t\t\tlocal value = select(i, ...)\r\n\t\t\tliterals[i] = t.literal(value)\r\n\t\tend\r\n\r\n\t\treturn t.union(table.unpack(literals, 1, size))\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tDEPRECATED\r\n\tPlease use t.literal\r\n**--]]\r\nt.exactly = t.literal\r\n\r\n--[[**\r\n\tReturns a t.union of each key in the table as a t.literal\r\n\r\n\t@param keyTable The table to get keys from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.keyOf(keyTable)\r\n\tlocal keys = {}\r\n\tlocal length = 0\r\n\tfor key in pairs(keyTable) do\r\n\t\tlength = length + 1\r\n\t\tkeys[length] = key\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(keys, 1, length))\r\nend\r\n\r\n--[[**\r\n\tReturns a t.union of each value in the table as a t.literal\r\n\r\n\t@param valueTable The table to get values from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.valueOf(valueTable)\r\n\tlocal values = {}\r\n\tlocal length = 0\r\n\tfor _, value in pairs(valueTable) do\r\n\t\tlength = length + 1\r\n\t\tvalues[length] = value\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(values, 1, length))\r\nend\r\n\r\n--[[**\r\n\tensures value is an integer\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.integer(value)\r\n\tlocal success, errMsg = t.number(value)\r\n\tif not success then\r\n\t\treturn false, errMsg or \"\"\r\n\tend\r\n\r\n\tif value % 1 == 0 then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false, string.format(\"integer expected, got %s\", value)\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min <= value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMin(min)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif value >= min then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number >= %s expected, got %s\", min, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value <= max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMax(max)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg\r\n\t\tend\r\n\r\n\t\tif value <= max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number <= %s expected, got %s\", max, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMinExclusive(min)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif min < value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number > %s expected, got %s\", min, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value < max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMaxExclusive(max)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif value < max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number < %s expected, got %s\", max, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value > 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberPositive = t.numberMinExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where value < 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberNegative = t.numberMaxExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where min <= value <= max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrained(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMin(min)\r\n\tlocal maxCheck = t.numberMax(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess, minErrMsg = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false, minErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess, maxErrMsg = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false, maxErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value < max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrainedExclusive(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMinExclusive(min)\r\n\tlocal maxCheck = t.numberMaxExclusive(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess, minErrMsg = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false, minErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess, maxErrMsg = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false, maxErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value matches string pattern\r\n\r\n\t@param string pattern to check against\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.match(pattern)\r\n\tassert(t.string(pattern))\r\n\treturn function(value)\r\n\t\tlocal stringSuccess, stringErrMsg = t.string(value)\r\n\t\tif not stringSuccess then\r\n\t\t\treturn false, stringErrMsg\r\n\t\tend\r\n\r\n\t\tif string.match(value, pattern) == nil then\r\n\t\t\treturn false, string.format(\"%q failed to match pattern %q\", value, pattern)\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is either nil or passes check\r\n\r\n\t@param check The check to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.optional(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tif value == nil then\r\n\t\t\treturn true\r\n\t\tend\r\n\r\n\t\tlocal success, errMsg = check(value)\r\n\t\tif success then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"(optional) %s\", errMsg or \"\")\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tmatches given tuple against tuple type definition\r\n\r\n\t@param ... The type definition for the tuples\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.tuple(...)\r\n\tlocal checks = { ... }\r\n\treturn function(...)\r\n\t\tlocal args = { ... }\r\n\t\tfor i, check in ipairs(checks) do\r\n\t\t\tlocal success, errMsg = check(args[i])\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false, string.format(\"Bad tuple index #%s:\\n\\t%s\", i, errMsg or \"\")\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all keys in given table pass check\r\n\r\n\t@param check The function to use to check the keys\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.keys(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false, tableErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tfor key in pairs(value) do\r\n\t\t\tlocal success, errMsg = check(key)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false, string.format(\"bad key %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all values in given table pass check\r\n\r\n\t@param check The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.values(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false, tableErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tfor key, val in pairs(value) do\r\n\t\t\tlocal success, errMsg = check(val)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false, string.format(\"bad value for key %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass keyCheck and all values pass valueCheck\r\n\r\n\t@param keyCheck The function to use to check the keys\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.map(keyCheck, valueCheck)\r\n\tassert(t.callback(keyCheck))\r\n\tassert(t.callback(valueCheck))\r\n\tlocal keyChecker = t.keys(keyCheck)\r\n\tlocal valueChecker = t.values(valueCheck)\r\n\r\n\treturn function(value)\r\n\t\tlocal keySuccess, keyErr = keyChecker(value)\r\n\t\tif not keySuccess then\r\n\t\t\treturn false, keyErr or \"\"\r\n\t\tend\r\n\r\n\t\tlocal valueSuccess, valueErr = valueChecker(value)\r\n\t\tif not valueSuccess then\r\n\t\t\treturn false, valueErr or \"\"\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass valueCheck and all values are true\r\n\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.set(valueCheck)\r\n\treturn t.map(valueCheck, t.literal(true))\r\nend\r\n\r\ndo\r\n\tlocal arrayKeysCheck = t.keys(t.integer)\r\n--[[**\r\n\t\tensures value is an array and all values of the array match check\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.array(check)\r\n\t\tassert(t.callback(check))\r\n\t\tlocal valuesCheck = t.values(check)\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess, keyErrMsg = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false, string.format(\"[array] %s\", keyErrMsg or \"\")\r\n\t\t\tend\r\n\r\n\t\t\t-- # is unreliable for sparse arrays\r\n\t\t\t-- Count upwards using ipairs to avoid false positives from the behavior of #\r\n\t\t\tlocal arraySize = 0\r\n\r\n\t\t\tfor _ in ipairs(value) do\r\n\t\t\t\tarraySize = arraySize + 1\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif key < 1 or key > arraySize then\r\n\t\t\t\t\treturn false, string.format(\"[array] key %s must be sequential\", tostring(key))\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tlocal valueSuccess, valueErrMsg = valuesCheck(value)\r\n\t\t\tif not valueSuccess then\r\n\t\t\t\treturn false, string.format(\"[array] %s\", valueErrMsg or \"\")\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value is an array of a strict makeup and size\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictArray(...)\r\n\t\tlocal valueTypes = { ... }\r\n\t\tassert(t.array(t.callback)(valueTypes))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess, keyErrMsg = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false, string.format(\"[strictArray] %s\", keyErrMsg or \"\")\r\n\t\t\tend\r\n\r\n\t\t\t-- If there's more than the set array size, disallow\r\n\t\t\tif #valueTypes < #value then\r\n\t\t\t\treturn false, string.format(\"[strictArray] Array size exceeds limit of %d\", #valueTypes)\r\n\t\t\tend\r\n\r\n\t\t\tfor idx, typeFn in pairs(valueTypes) do\r\n\t\t\t\tlocal typeSuccess, typeErrMsg = typeFn(value[idx])\r\n\t\t\t\tif not typeSuccess then\r\n\t\t\t\t\treturn false, string.format(\"[strictArray] Array index #%d - %s\", idx, typeErrMsg)\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal callbackArray = t.array(t.callback)\r\n--[[**\r\n\t\tcreates a union type\r\n\r\n\t\t@param ... The checks to union\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.union(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tif check(value) then\r\n\t\t\t\t\treturn true\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn false, \"bad type for union\"\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.union\r\n\t**--]]\r\n\tt.some = t.union\r\n\r\n--[[**\r\n\t\tcreates an intersection type\r\n\r\n\t\t@param ... The checks to intersect\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.intersection(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tlocal success, errMsg = check(value)\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false, errMsg or \"\"\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.intersection\r\n\t**--]]\r\n\tt.every = t.intersection\r\nend\r\n\r\ndo\r\n\tlocal checkInterface = t.map(t.any, t.callback)\r\n--[[**\r\n\t\tensures value matches given interface definition\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.interface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false, tableErrMsg or \"\"\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success, errMsg = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false, string.format(\"[interface] bad value for %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value matches given interface definition strictly\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictInterface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false, tableErrMsg or \"\"\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success, errMsg = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false, string.format(\"[interface] bad value for %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif not checkTable[key] then\r\n\t\t\t\t\treturn false, string.format(\"[interface] unexpected field %q\", tostring(key))\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceOf(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess, instanceErrMsg = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false, instanceErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif value.ClassName ~= className then\r\n\t\t\treturn false, string.format(\"%s expected, got %s\", className, value.ClassName)\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess, childrenErrMsg = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false, childrenErrMsg\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\nt.instance = t.instanceOf\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName by an IsA comparison\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceIsA(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess, instanceErrMsg = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false, instanceErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif not value:IsA(className) then\r\n\t\t\treturn false, string.format(\"%s expected, got %s\", className, value.ClassName)\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess, childrenErrMsg = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false, childrenErrMsg\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is an enum of the correct type\r\n\r\n\t@param enum The enum to check\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.enum(enum)\r\n\tassert(t.Enum(enum))\r\n\treturn function(value)\r\n\t\tlocal enumItemSuccess, enumItemErrMsg = t.EnumItem(value)\r\n\t\tif not enumItemSuccess then\r\n\t\t\treturn false, enumItemErrMsg\r\n\t\tend\r\n\r\n\t\tif value.EnumType == enum then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"enum of %s expected, got enum of %s\", tostring(enum), tostring(value.EnumType))\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkWrap = t.tuple(t.callback, t.callback)\r\n\r\n--[[**\r\n\t\twraps a callback in an assert with checkArgs\r\n\r\n\t\t@param callback The function to wrap\r\n\t\t@param checkArgs The function to use to check arguments in the assert\r\n\r\n\t\t@returns A function that first asserts using checkArgs and then calls callback\r\n\t**--]]\r\n\tfunction t.wrap(callback, checkArgs)\r\n\t\tassert(checkWrap(callback, checkArgs))\r\n\t\treturn function(...)\r\n\t\t\tassert(checkArgs(...))\r\n\t\t\treturn callback(...)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tasserts a given check\r\n\r\n\t@param check The function to wrap with an assert\r\n\r\n\t@returns A function that simply wraps the given check in an assert\r\n**--]]\r\nfunction t.strict(check)\r\n\treturn function(...)\r\n\t\tassert(check(...))\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkChildren = t.map(t.string, t.callback)\r\n\r\n--[[**\r\n\t\tTakes a table where keys are child names and values are functions to check the children against.\r\n\t\tPass an instance tree into the function.\r\n\t\tIf at least one child passes each check, the overall check passes.\r\n\r\n\t\tWarning! If you pass in a tree with more than one child of the same name, this function will always return false\r\n\r\n\t\t@param checkTable The table to check against\r\n\r\n\t\t@returns A function that checks an instance tree\r\n\t**--]]\r\n\tfunction t.children(checkTable)\r\n\t\tassert(checkChildren(checkTable))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal instanceSuccess, instanceErrMsg = t.Instance(value)\r\n\t\t\tif not instanceSuccess then\r\n\t\t\t\treturn false, instanceErrMsg or \"\"\r\n\t\t\tend\r\n\r\n\t\t\tlocal childrenByName = {}\r\n\t\t\tfor _, child in ipairs(value:GetChildren()) do\r\n\t\t\t\tlocal name = child.Name\r\n\t\t\t\tif checkTable[name] then\r\n\t\t\t\t\tif childrenByName[name] then\r\n\t\t\t\t\t\treturn false, string.format(\"Cannot process multiple children with the same name %q\", name)\r\n\t\t\t\t\tend\r\n\r\n\t\t\t\t\tchildrenByName[name] = child\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor name, check in pairs(checkTable) do\r\n\t\t\t\tlocal success, errMsg = check(childrenByName[name])\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false, string.format(\"[%s.%s] %s\", value:GetFullName(), name, errMsg or \"\")\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\nreturn t\r\n"}},"Children":["d22adc3a9bd7195dae4e3c4ea2612c09","99ea57650081417fd256b7092ccdba19"],"Metadata":{"ignoreUnknownInstances":false}},"9ee814837a27b11857e89563135cd306":{"Id":"9ee814837a27b11857e89563135cd306","Parent":"2e2d4268ad91d40d489844d149b7c87e","Name":"shanebutt_t@1.3.1","ClassName":"Folder","Properties":{},"Children":["c39e26776de082e6222fc839fa8b1b48"],"Metadata":{"ignoreUnknownInstances":false}},"e412d57eace8911b86fabef6e8521d77":{"Id":"e412d57eace8911b86fabef6e8521d77","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"Portal","ClassName":"ModuleScript","Properties":{"Source":{"String":"local HttpService: HttpService = game:GetService(\"HttpService\")\nlocal ReplicatedStorage: ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\nlocal RunService: RunService = game:GetService(\"RunService\")\n\nlocal t = require(script.Parent.t)\nlocal types = require(script.Types)\n\nlocal RemoteLocation = \"Portal\"\nlocal Storage: Folder = ReplicatedStorage:FindFirstChild(RemoteLocation) :: Folder\n\nif not Storage then\n\tif RunService:IsServer() then\n\t\tStorage = Instance.new(\"Folder\")\n\t\tStorage.Name = RemoteLocation\n\t\tStorage.Parent = ReplicatedStorage\n\telse\n\t\tStorage = ReplicatedStorage:WaitForChild(RemoteLocation)\n\tend\nend\n\ntype IContext = types.IContext\ntype ISubscription = types.ISubscription\ntype IWormhole = types.IWormhole\n\nlocal Context = require(script.Context)\nlocal Subscription = require(script.Subscription)\nlocal Wormhole = require(script.Wormhole)\n\nlocal Portal = {}\nPortal.Wormhole = Wormhole.new()\n\nfunction Portal:Context(context: string): IContext\n\treturn Portal.Wormhole.addContext(Portal.Wormhole, context)\nend\n\nfunction Portal:Subscription(context: string, action: string, cb: () -> ()?): ISubscription\n\treturn Portal.Wormhole.makeSubscription(Portal.Wormhole, context, action, cb)\nend\n\nfunction Portal:Subscribe(context: string, action: string, cb: () -> ())\n\tlocal subscription: ISubscription = Portal:Subscription(context, action, cb)\n\treturn Portal.Wormhole.doSubscribe(Portal.Wormhole, subscription)\nend\n\nfunction Portal:Publish(context: string, action: string, data: any) end\n\nreturn Portal\n"}},"Children":["2d5696ee5bdf4c8a0a542bf58f63b738","aa5772ae3a91cb8b93b724d7c5a15190","b006666de7a034699290c8f7a42446bf","d539d2b3547c9166dae5ffd367a37cb3","89734f1df997de85fd2bdd427ddf34fb"],"Metadata":{"ignoreUnknownInstances":false}}}}]======] diff --git a/plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua b/plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua new file mode 100644 index 00000000..d9363a5e --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua @@ -0,0 +1 @@ +return '\x83\xA9\x73\x65\x73\x73\x69\x6F\x6E\x49\x64\xD9\x24\x34\x37\x34\x61\x38\x33\x38\x35\x2D\x35\x61\x34\x32\x2D\x34\x64\x39\x36\x2D\x61\x61\x33\x34\x2D\x32\x64\x34\x33\x66\x63\x39\x31\x37\x34\x34\x30\xAD\x6D\x65\x73\x73\x61\x67\x65\x43\x75\x72\x73\x6F\x72\x00\xA9\x69\x6E\x73\x74\x61\x6E\x63\x65\x73\xDE\x00\x1D\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\x87\xA2\x49\x64\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA5\x54\x79\x70\x65\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x03\x29\x6C\x6F\x63\x61\x6C\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x50\x61\x63\x6B\x61\x67\x65\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x20\x3D\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x2E\x49\x50\x61\x63\x6B\x61\x67\x65\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x68\x65\x63\x6B\x73\x3A\x20\x7B\x20\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x7D\x20\x3D\x20\x7B\x0A\x09\x5B\x22\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x22\x5D\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0A\x09\x5B\x22\x69\x73\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x22\x5D\x20\x3D\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x09\x5B\x22\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x22\x5D\x20\x3D\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x0A\x09\x5B\x22\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x22\x5D\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2C\x0A\x09\x5B\x22\x69\x73\x50\x61\x63\x6B\x61\x67\x65\x22\x5D\x20\x3D\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x43\x68\x65\x63\x6B\x73\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x95\xD9\x20\x31\x33\x33\x61\x39\x62\x30\x30\x35\x66\x62\x65\x61\x36\x62\x65\x61\x63\x31\x64\x30\x35\x39\x64\x64\x63\x39\x66\x65\x66\x30\x65\xD9\x20\x34\x36\x62\x63\x63\x39\x32\x63\x61\x35\x64\x63\x39\x33\x64\x61\x37\x35\x62\x61\x36\x38\x35\x61\x65\x37\x63\x62\x34\x39\x39\x31\xD9\x20\x39\x63\x38\x35\x32\x32\x65\x33\x30\x37\x33\x35\x37\x63\x62\x39\x35\x38\x34\x39\x32\x65\x65\x39\x38\x66\x64\x39\x33\x30\x34\x32\xD9\x20\x36\x39\x37\x38\x61\x31\x38\x38\x33\x35\x38\x64\x36\x34\x62\x66\x62\x32\x31\x30\x33\x37\x31\x32\x32\x30\x32\x61\x39\x39\x32\x32\xD9\x20\x63\x37\x63\x38\x39\x61\x36\x66\x63\x39\x34\x34\x33\x31\x64\x61\x33\x37\x65\x39\x62\x66\x66\x38\x35\x62\x38\x31\x61\x62\x34\x37\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x36\x39\x35\x37\x66\x37\x39\x38\x33\x61\x63\x30\x38\x61\x63\x61\x62\x66\x32\x32\x34\x32\x36\x36\x66\x33\x36\x35\x64\x33\x66\x37\x87\xA2\x49\x64\xD9\x20\x36\x39\x35\x37\x66\x37\x39\x38\x33\x61\x63\x30\x38\x61\x63\x61\x62\x66\x32\x32\x34\x32\x36\x36\x66\x33\x36\x35\x64\x33\x66\x37\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\xA4\x4E\x61\x6D\x65\xA9\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\xB0\x93\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x54\x45\x53\x54\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x20\x3D\x20\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x2E\x45\x76\x65\x6E\x74\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x64\x65\x6C\x74\x61\x29\x0D\x0A\x09\x09\x09\x64\x65\x6C\x74\x61\x20\x3D\x20\x64\x65\x6C\x74\x61\x20\x6F\x72\x20\x28\x31\x2F\x36\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x20\x3D\x20\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x20\x2B\x20\x64\x65\x6C\x74\x61\x0D\x0A\x09\x09\x09\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x64\x65\x6C\x74\x61\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6C\x65\x6E\x2C\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x69\x6E\x64\x65\x78\x69\x6E\x67\x20\x6E\x69\x6C\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x5F\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x77\x72\x6F\x6E\x67\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6E\x73\x74\x61\x6E\x74\x69\x61\x74\x65\x20\x77\x69\x74\x68\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6E\x76\x6F\x6B\x65\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x61\x6E\x64\x20\x72\x65\x6A\x65\x63\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x41\x72\x67\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x72\x67\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x41\x72\x67\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x72\x67\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x41\x72\x67\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x41\x72\x67\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x6F\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x29\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x20\x65\x72\x72\x6F\x72\x20\x69\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x68\x61\x68\x61\x68\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x68\x61\x68\x61\x68\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x4C\x6F\x6F\x73\x65\x6C\x79\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x70\x69\x65\x63\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x77\x65\x20\x65\x78\x70\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x43\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x74\x69\x63\x6B\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x74\x69\x63\x6B\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x68\x61\x76\x65\x20\x61\x20\x6E\x69\x63\x65\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x29\x3A\x67\x6D\x61\x74\x63\x68\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x28\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x79\x69\x65\x6C\x64\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x72\x65\x73\x65\x72\x76\x65\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x73\x20\x6F\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x2D\x63\x68\x61\x69\x6E\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6E\x65\x73\x74\x65\x64\x43\x61\x6C\x6C\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x6E\x65\x73\x74\x65\x64\x43\x61\x6C\x6C\x28\x22\x73\x61\x6D\x70\x6C\x65\x20\x74\x65\x78\x74\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x73\x61\x6D\x70\x6C\x65\x20\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x6E\x65\x73\x74\x65\x64\x43\x61\x6C\x6C\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x50\x6C\x61\x6E\x4E\x6F\x64\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x2E\x2E\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x69\x63\x68\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x3A\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x65\x72\x72\x6F\x72\x73\x20\x66\x72\x6F\x6D\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x77\x69\x74\x68\x20\x5F\x65\x72\x72\x6F\x72\x20\x28\x3C\x20\x76\x32\x29\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x53\x61\x6D\x70\x6C\x65\x20\x65\x72\x72\x6F\x72\x22\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x53\x61\x6D\x70\x6C\x65\x20\x65\x72\x72\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x2E\x2E\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x69\x63\x68\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x3A\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x25\x5B\x4E\x6F\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x78\x65\x63\x75\x74\x65\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x65\x76\x65\x6E\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x2C\x20\x6E\x6F\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x72\x65\x6A\x65\x63\x74\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x6E\x6F\x74\x68\x69\x6E\x67\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x66\x6F\x72\x20\x64\x65\x6C\x61\x79\x73\x20\x74\x6F\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x20\x20\x20\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x61\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x2C\x20\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x70\x61\x73\x73\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x37\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x37\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x36\x2C\x20\x37\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x37\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x61\x73\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x61\x73\x2D\x69\x73\x20\x61\x73\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x36\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x79\x69\x65\x6C\x64\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x35\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x75\x6E\x20\x61\x6E\x64\x54\x68\x65\x6E\x73\x20\x6F\x6E\x20\x61\x20\x6E\x65\x77\x20\x74\x68\x72\x65\x61\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x5F\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x64\x65\x61\x64\x6C\x6F\x63\x6B\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x35\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x66\x6F\x6F\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x64\x65\x61\x64\x6C\x6F\x63\x6B\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x61\x72\x67\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x61\x72\x67\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x20\x65\x72\x72\x6F\x72\x20\x69\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x68\x61\x68\x61\x68\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x68\x61\x68\x61\x68\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x4C\x6F\x6F\x73\x65\x6C\x79\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x70\x69\x65\x63\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x77\x65\x20\x65\x78\x70\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x61\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x20\x3D\x20\x7B\x2E\x2E\x2E\x7D\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x61\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x20\x3D\x20\x7B\x2E\x2E\x2E\x7D\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x73\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x6D\x75\x6C\x74\x69\x70\x6C\x65\x20\x6C\x65\x76\x65\x6C\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x78\x2C\x20\x79\x2C\x20\x7A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x31\x2C\x20\x32\x2C\x20\x33\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x09\x09\x09\x09\x78\x2C\x20\x79\x2C\x20\x7A\x20\x3D\x20\x61\x2C\x20\x62\x2C\x20\x63\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x78\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x79\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x7A\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6D\x61\x72\x6B\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x20\x74\x68\x65\x6D\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x20\x2D\x2D\x20\x54\x77\x69\x63\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x63\x61\x6C\x6C\x20\x63\x6F\x75\x6E\x74\x73\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x6F\x6E\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x20\x2D\x2D\x20\x54\x77\x69\x63\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x63\x61\x6C\x6C\x20\x63\x6F\x75\x6E\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x66\x66\x65\x63\x74\x20\x64\x6F\x77\x6E\x73\x74\x72\x65\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x72\x61\x63\x6B\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x30\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x31\x20\x3D\x20\x70\x30\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x72\x65\x74\x75\x72\x6E\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x32\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x33\x20\x3D\x20\x70\x32\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x31\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x65\x71\x75\x61\x6C\x28\x70\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x65\x71\x75\x61\x6C\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x70\x33\x5D\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x33\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x31\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x32\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x32\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x31\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x75\x70\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x66\x69\x6E\x61\x6C\x6C\x79\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x43\x68\x61\x69\x6E\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x61\x20\x63\x68\x69\x6C\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x31\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x32\x20\x3D\x20\x70\x31\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x31\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x70\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x67\x69\x76\x65\x6E\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x6F\x74\x68\x65\x72\x20\x74\x68\x61\x6E\x20\x61\x20\x74\x61\x62\x6C\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x6E\x73\x74\x61\x6E\x74\x6C\x79\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x65\x6D\x70\x74\x79\x20\x74\x61\x62\x6C\x65\x20\x69\x66\x20\x67\x69\x76\x65\x6E\x20\x6E\x6F\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x7D\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6E\x65\x78\x74\x28\x76\x61\x6C\x75\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x6E\x69\x6C\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x67\x69\x76\x65\x6E\x20\x6E\x6F\x6E\x2D\x70\x72\x6F\x6D\x69\x73\x65\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x7B\x7D\x2C\x20\x7B\x7D\x2C\x20\x7B\x7D\x7D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x62\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x69\x72\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x31\x2C\x20\x22\x41\x20\x73\x74\x72\x69\x6E\x67\x22\x2C\x20\x6E\x69\x6C\x2C\x20\x66\x61\x6C\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x73\x5B\x69\x5D\x20\x3D\x20\x7B\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x5B\x69\x5D\x7D\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x72\x65\x73\x6F\x6C\x76\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x5B\x31\x5D\x28\x72\x65\x73\x6F\x6C\x76\x65\x5B\x32\x5D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x72\x65\x73\x6F\x6C\x76\x65\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x5B\x69\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x5B\x69\x5D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x66\x20\x61\x6E\x79\x20\x69\x6E\x64\x69\x76\x69\x64\x75\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x42\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x61\x2C\x20\x62\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x28\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x7A\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x66\x74\x65\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x42\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x61\x2C\x20\x62\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x28\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x7A\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6F\x6E\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x42\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x42\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x61\x2C\x20\x62\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x42\x28\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x61\x20\x6E\x6F\x6E\x2D\x61\x72\x72\x61\x79\x20\x74\x61\x62\x6C\x65\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x65\x72\x72\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6F\x6B\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x72\x72\x3A\x66\x69\x6E\x64\x28\x22\x4E\x6F\x6E\x25\x2D\x70\x72\x6F\x6D\x69\x73\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x6F\x6E\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x69\x6E\x69\x74\x69\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x73\x20\x65\x6D\x70\x74\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x72\x65\x73\x75\x6C\x74\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x63\x63\x65\x70\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x65\x76\x65\x6E\x20\x69\x66\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x6F\x72\x20\x72\x65\x64\x75\x63\x65\x72\x20\x64\x6F\x6E\x27\x74\x20\x75\x73\x65\x20\x74\x68\x65\x6D\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x32\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x6F\x72\x4D\x65\x73\x73\x61\x67\x65\x20\x3D\x20\x22\x66\x6F\x6F\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x32\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x65\x72\x72\x6F\x72\x4D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x74\x75\x73\x2C\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x73\x75\x6D\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x74\x61\x74\x75\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x65\x72\x72\x6F\x72\x4D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x63\x61\x6E\x63\x65\x6C\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x32\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x74\x68\x69\x73\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x72\x75\x6E\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x27\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x73\x65\x74\x74\x6C\x65\x64\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x7D\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x6F\x74\x68\x65\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x61\x20\x6E\x6F\x6E\x2D\x61\x72\x72\x61\x79\x20\x74\x61\x62\x6C\x65\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x65\x72\x72\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6F\x6B\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x72\x72\x3A\x66\x69\x6E\x64\x28\x22\x4E\x6F\x6E\x25\x2D\x70\x72\x6F\x6D\x69\x73\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x72\x61\x70\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x65\x73\x74\x28\x6E\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6E\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x69\x66\x69\x65\x64\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x74\x65\x73\x74\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x69\x66\x69\x65\x64\x28\x31\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x74\x63\x68\x20\x65\x72\x72\x6F\x72\x73\x20\x61\x66\x74\x65\x72\x20\x61\x20\x79\x69\x65\x6C\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x65\x73\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x27\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x74\x65\x73\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x61\x70\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x68\x72\x65\x61\x64\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x3A\x74\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x49\x6E\x6E\x65\x72\x2C\x20\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x09\x3A\x74\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x49\x6E\x6E\x65\x72\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x49\x6E\x6E\x65\x72\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x74\x63\x68\x20\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x20\x65\x72\x72\x6F\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x6F\x72\x54\x65\x78\x74\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x27\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x54\x65\x78\x74\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x65\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x72\x72\x6F\x72\x54\x65\x78\x74\x3A\x66\x69\x6E\x64\x28\x22\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6F\x72\x20\x6F\x62\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x62\x6A\x65\x63\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x74\x63\x68\x20\x61\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x20\x65\x72\x72\x6F\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x27\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x31\x2C\x20\x32\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x6E\x65\x2C\x20\x74\x77\x6F\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x6F\x6E\x65\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x74\x77\x6F\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x28\x31\x2C\x20\x32\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x6E\x65\x2C\x20\x74\x77\x6F\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x6F\x6E\x65\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x74\x77\x6F\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x74\x68\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x61\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x62\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x33\x2C\x20\x34\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x74\x68\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x61\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x62\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x33\x2C\x20\x34\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x72\x69\x67\x67\x65\x72\x20\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x76\x65\x72\x2C\x20\x61\x6C\x77\x61\x79\x73\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x3A\x64\x6F\x6E\x65\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x6E\x65\x76\x65\x72\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x61\x6C\x77\x61\x79\x73\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6E\x65\x76\x65\x72\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x6C\x77\x61\x79\x73\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x6E\x63\x65\x20\x74\x68\x65\x20\x67\x6F\x61\x6C\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x74\x68\x65\x20\x67\x6F\x61\x6C\x20\x63\x61\x6E\x27\x74\x20\x62\x65\x20\x72\x65\x61\x63\x68\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x29\x20\x72\x65\x6A\x65\x63\x74\x20\x3D\x20\x72\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x6F\x6E\x63\x65\x20\x74\x68\x65\x20\x67\x6F\x61\x6C\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x31\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x32\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x29\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x72\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x6F\x6D\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x70\x65\x6E\x64\x69\x6E\x67\x31\x2C\x0D\x0A\x09\x09\x09\x09\x70\x65\x6E\x64\x69\x6E\x67\x32\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x6F\x6D\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x6F\x6D\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x70\x61\x73\x73\x65\x64\x20\x61\x20\x6E\x6F\x6E\x2D\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x7D\x2C\x20\x22\x6E\x6F\x6E\x2D\x6E\x75\x6D\x62\x65\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x6D\x70\x74\x79\x20\x61\x72\x72\x61\x79\x20\x69\x66\x20\x61\x6D\x6F\x75\x6E\x74\x20\x69\x73\x20\x30\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x72\x65\x74\x75\x72\x6E\x20\x65\x78\x74\x72\x61\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x33\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x34\x29\x2C\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x33\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x61\x6C\x6C\x20\x61\x72\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x7D\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x53\x74\x61\x74\x75\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x29\x20\x72\x65\x6A\x65\x63\x74\x20\x3D\x20\x72\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x34\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x2C\x20\x36\x2C\x20\x6E\x69\x6C\x2C\x20\x37\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x2C\x20\x62\x2C\x20\x63\x2C\x20\x64\x2C\x20\x65\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x6E\x69\x6C\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x37\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x65\x78\x70\x65\x63\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x68\x72\x6F\x77\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x6E\x6F\x77\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x66\x6F\x6F\x22\x29\x3A\x6E\x6F\x77\x28\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x6E\x6F\x77\x28\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x76\x61\x6C\x75\x65\x2C\x20\x22\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x22\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x63\x75\x73\x74\x6F\x6D\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x6E\x6F\x77\x28\x22\x66\x6F\x6F\x22\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x74\x65\x72\x61\x74\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x7B\x2E\x2E\x2E\x7D\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6F\x6B\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x32\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x32\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x33\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x7A\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x33\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x34\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x34\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x74\x65\x72\x61\x74\x65\x20\x73\x65\x72\x69\x61\x6C\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x6F\x72\x20\x30\x29\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x76\x61\x6C\x75\x65\x3A\x75\x70\x70\x65\x72\x28\x29\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x72\x65\x73\x6F\x6C\x76\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x72\x65\x6D\x6F\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x31\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x72\x65\x73\x6F\x6C\x76\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x72\x65\x6D\x6F\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x31\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x72\x65\x6D\x6F\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x31\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x32\x5D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x46\x4F\x4F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x42\x41\x52\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x42\x41\x5A\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x62\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x61\x6E\x64\x20\x77\x61\x69\x74\x20\x77\x68\x65\x6E\x20\x69\x74\x20\x67\x65\x74\x73\x20\x74\x6F\x20\x74\x68\x65\x6D\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x52\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x6E\x6E\x65\x72\x52\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x20\x2A\x20\x32\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x6E\x6E\x65\x72\x52\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x31\x2C\x20\x32\x2C\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x6E\x65\x76\x65\x72\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x65\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x69\x66\x20\x74\x68\x65\x72\x65\x27\x73\x20\x61\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x6E\x69\x74\x69\x61\x6C\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x31\x2C\x20\x32\x2C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x65\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x2E\x6B\x69\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x74\x6F\x70\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x6F\x72\x20\x30\x29\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x72\x79\x20\x4E\x20\x74\x69\x6D\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x75\x6E\x74\x65\x72\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x63\x6F\x75\x6E\x74\x65\x72\x20\x3D\x20\x63\x6F\x75\x6E\x74\x65\x72\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x6F\x75\x6E\x74\x65\x72\x20\x3D\x3D\x20\x35\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x6F\x6B\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x61\x69\x6C\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x35\x2C\x20\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x6F\x6B\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x66\x20\x74\x68\x72\x65\x73\x68\x6F\x6C\x64\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x61\x69\x6C\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x61\x69\x6C\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x6F\x6E\x76\x65\x72\x74\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x74\x6F\x20\x61\x6E\x20\x65\x76\x65\x6E\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x76\x65\x6E\x74\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x65\x76\x65\x6E\x74\x2E\x45\x76\x65\x6E\x74\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x6F\x6E\x76\x65\x72\x74\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x74\x6F\x20\x61\x6E\x20\x65\x76\x65\x6E\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x76\x65\x6E\x74\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x65\x76\x65\x6E\x74\x2E\x45\x76\x65\x6E\x74\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x61\x72\x61\x6D\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x61\x72\x61\x6D\x20\x3D\x3D\x20\x22\x66\x6F\x6F\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x76\x65\x72\x73\x69\x6F\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x61\x6E\x79\x20\x6F\x62\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x6E\x64\x54\x68\x65\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x62\x6A\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x61\x6E\x64\x54\x68\x65\x6E\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x6F\x62\x6A\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x6F\x6C\x64\x65\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x38\x64\x37\x32\x31\x37\x63\x37\x66\x32\x61\x61\x66\x39\x38\x61\x34\x35\x62\x37\x36\x34\x63\x64\x36\x66\x35\x65\x37\x30\x61\x33\x87\xA2\x49\x64\xD9\x20\x38\x64\x37\x32\x31\x37\x63\x37\x66\x32\x61\x61\x66\x39\x38\x61\x34\x35\x62\x37\x36\x34\x63\x64\x36\x66\x35\x65\x37\x30\x61\x33\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA7\x50\x72\x6F\x6D\x69\x73\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xD9\x48\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x5F\x49\x6E\x64\x65\x78\x5B\x22\x65\x76\x61\x65\x72\x61\x5F\x70\x72\x6F\x6D\x69\x73\x65\x40\x33\x2E\x31\x2E\x30\x22\x5D\x5B\x22\x70\x72\x6F\x6D\x69\x73\x65\x22\x5D\x29\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\x87\xA2\x49\x64\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xA9\x57\x6F\x72\x6B\x73\x70\x61\x63\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA9\x57\x6F\x72\x6B\x73\x70\x61\x63\x65\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xB0\x46\x69\x6C\x74\x65\x72\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x31\x61\x33\x31\x62\x62\x38\x34\x35\x38\x65\x65\x66\x65\x30\x64\x62\x32\x64\x30\x30\x65\x61\x62\x31\x35\x66\x36\x62\x31\x34\x66\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x33\x62\x34\x33\x37\x36\x63\x62\x65\x65\x38\x39\x66\x65\x33\x33\x31\x30\x33\x62\x30\x65\x36\x37\x34\x35\x39\x37\x63\x30\x65\x61\x87\xA2\x49\x64\xD9\x20\x33\x62\x34\x33\x37\x36\x63\x62\x65\x65\x38\x39\x66\x65\x33\x33\x31\x30\x33\x62\x30\x65\x36\x37\x34\x35\x39\x37\x63\x30\x65\x61\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\xA4\x4E\x61\x6D\x65\xB1\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x56\x61\x6C\x75\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\xAA\x6C\x6F\x63\x61\x6C\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x22\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x61\x63\x6B\x61\x67\x65\x73\x3A\x20\x46\x6F\x6C\x64\x65\x72\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x22\x50\x61\x63\x6B\x61\x67\x65\x73\x22\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x50\x61\x63\x6B\x61\x67\x65\x73\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x22\x29\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x28\x76\x61\x6C\x75\x65\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x6C\x69\x73\x74\x3A\x20\x7B\x20\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x61\x6E\x79\x20\x7D\x29\x3A\x20\x61\x6E\x79\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x3A\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0A\x09\x09\x63\x6F\x6E\x6E\x20\x3D\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x2E\x48\x65\x61\x72\x74\x62\x65\x61\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x5F\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x6C\x69\x73\x74\x5B\x76\x61\x6C\x75\x65\x5D\x0A\x09\x09\x09\x69\x66\x20\x5F\x63\x6F\x6E\x74\x65\x78\x74\x20\x74\x68\x65\x6E\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x5F\x63\x6F\x6E\x74\x65\x78\x74\x29\x0A\x09\x09\x09\x65\x6E\x64\x0A\x09\x09\x65\x6E\x64\x29\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0A\x09\x09\x65\x6E\x64\x29\x0A\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0A\x09\x09\x63\x6F\x6E\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0A\x09\x65\x6E\x64\x29\x0A\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x0A\x65\x6E\x64\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x62\x30\x30\x36\x36\x36\x36\x64\x65\x37\x61\x30\x33\x34\x36\x39\x39\x32\x39\x30\x63\x38\x66\x37\x61\x34\x32\x34\x34\x36\x62\x66\x87\xA2\x49\x64\xD9\x20\x62\x30\x30\x36\x36\x36\x36\x64\x65\x37\x61\x30\x33\x34\x36\x39\x39\x32\x39\x30\x63\x38\x66\x37\x61\x34\x32\x34\x34\x36\x62\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xAC\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\xA9\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x54\x79\x70\x65\x73\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x0D\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x3F\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x61\x63\x74\x69\x6F\x6E\x2C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x73\x65\x6C\x66\x2C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x20\x3A\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x69\x73\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x73\x2E\x69\x73\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x63\x37\x63\x38\x39\x61\x36\x66\x63\x39\x34\x34\x33\x31\x64\x61\x33\x37\x65\x39\x62\x66\x66\x38\x35\x62\x38\x31\x61\x62\x34\x37\x87\xA2\x49\x64\xD9\x20\x63\x37\x63\x38\x39\x61\x36\x66\x63\x39\x34\x34\x33\x31\x64\x61\x33\x37\x65\x39\x62\x66\x66\x38\x35\x62\x38\x31\x61\x62\x34\x37\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xA9\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x04\x89\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x0D\x0A\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x5F\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x46\x6F\x6C\x64\x65\x72\x22\x29\x2C\x0D\x0A\x09\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x61\x6E\x79\x29\x0D\x0A\x7D\x29\x0D\x0A\x0D\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x7B\x0D\x0A\x09\x5F\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x46\x6F\x6C\x64\x65\x72\x2C\x0D\x0A\x09\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x3A\x20\x7B\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x7D\x2C\x0D\x0A\x0D\x0A\x09\x5F\x5F\x69\x6E\x64\x65\x78\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x0D\x0A\x0D\x0A\x09\x6E\x65\x77\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x20\x2D\x3E\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x0D\x0A\x09\x69\x73\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x0D\x0A\x0D\x0A\x09\x61\x77\x61\x69\x74\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x3A\x20\x6E\x75\x6D\x62\x65\x72\x3F\x29\x20\x2D\x3E\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2C\x0D\x0A\x09\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x20\x2D\x3E\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2C\x0D\x0A\x09\x6D\x61\x6B\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x20\x2D\x3E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0D\x0A\x09\x64\x6F\x53\x75\x62\x73\x63\x72\x69\x62\x65\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x3F\x29\x20\x2D\x3E\x20\x28\x29\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x65\x6E\x64\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\x87\xA2\x49\x64\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA8\x50\x72\x6F\x6D\x69\x73\x65\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x33\x62\x34\x33\x37\x36\x63\x62\x65\x65\x38\x39\x66\x65\x33\x33\x31\x30\x33\x62\x30\x65\x36\x37\x34\x35\x39\x37\x63\x30\x65\x61\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x39\x63\x38\x35\x32\x32\x65\x33\x30\x37\x33\x35\x37\x63\x62\x39\x35\x38\x34\x39\x32\x65\x65\x39\x38\x66\x64\x39\x33\x30\x34\x32\x87\xA2\x49\x64\xD9\x20\x39\x63\x38\x35\x32\x32\x65\x33\x30\x37\x33\x35\x37\x63\x62\x39\x35\x38\x34\x39\x32\x65\x65\x39\x38\x66\x64\x39\x33\x30\x34\x32\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xA8\x49\x50\x61\x63\x6B\x61\x67\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\x61\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x44\x61\x74\x65\x54\x69\x6D\x65\x28\x76\x61\x6C\x75\x65\x3A\x20\x61\x6E\x79\x29\x3A\x20\x28\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x20\x73\x74\x72\x69\x6E\x67\x3F\x29\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x44\x61\x74\x65\x54\x69\x6D\x65\x22\x20\x74\x68\x65\x6E\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0A\x09\x65\x6C\x73\x65\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x44\x61\x74\x65\x54\x69\x6D\x65\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0A\x09\x65\x6E\x64\x0A\x65\x6E\x64\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x69\x73\x50\x61\x63\x6B\x61\x67\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x44\x61\x74\x65\x54\x69\x6D\x65\x20\x3D\x20\x69\x73\x44\x61\x74\x65\x54\x69\x6D\x65\x2C\x0A\x09\x50\x61\x79\x6C\x6F\x61\x64\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x61\x6E\x79\x29\x2C\x0A\x7D\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x20\x3D\x20\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x54\x69\x6D\x65\x73\x74\x61\x6D\x70\x3A\x20\x44\x61\x74\x65\x54\x69\x6D\x65\x2C\x0A\x09\x50\x61\x79\x6C\x6F\x61\x64\x3A\x20\x7B\x20\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x61\x6E\x79\x20\x7D\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x73\x50\x61\x63\x6B\x61\x67\x65\x28\x6F\x62\x6A\x29\x0A\x65\x6E\x64\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x32\x64\x35\x36\x39\x36\x65\x65\x35\x62\x64\x66\x34\x63\x38\x61\x30\x61\x35\x34\x32\x62\x66\x35\x38\x66\x36\x33\x62\x37\x33\x38\x87\xA2\x49\x64\xD9\x20\x32\x64\x35\x36\x39\x36\x65\x65\x35\x62\x64\x66\x34\x63\x38\x61\x30\x61\x35\x34\x32\x62\x66\x35\x38\x66\x36\x33\x62\x37\x33\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA7\x43\x6F\x6E\x74\x65\x78\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\xB9\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x54\x79\x70\x65\x73\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x0A\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x43\x6F\x6E\x74\x65\x78\x74\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0A\x09\x63\x68\x65\x63\x6B\x28\x63\x6F\x6E\x74\x65\x78\x74\x29\x0A\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x09\x73\x65\x6C\x66\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x0A\x09\x73\x65\x6C\x66\x2E\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x7B\x7D\x0A\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x73\x65\x6C\x66\x2C\x20\x43\x6F\x6E\x74\x65\x78\x74\x29\x20\x3A\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x2E\x69\x73\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x73\x2E\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x28\x6F\x62\x6A\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x50\x75\x62\x6C\x69\x73\x68\x28\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x20\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x29\x20\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x44\x65\x73\x74\x72\x6F\x79\x28\x29\x20\x65\x6E\x64\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x62\x63\x37\x37\x31\x30\x66\x36\x61\x61\x64\x33\x32\x34\x39\x37\x39\x38\x61\x63\x30\x31\x61\x63\x37\x30\x63\x36\x30\x38\x62\x33\x87\xA2\x49\x64\xD9\x20\x62\x63\x37\x37\x31\x30\x66\x36\x61\x61\x64\x33\x32\x34\x39\x37\x39\x38\x61\x63\x30\x31\x61\x63\x37\x30\x63\x36\x30\x38\x62\x33\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xA8\x4C\x69\x67\x68\x74\x69\x6E\x67\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA8\x4C\x69\x67\x68\x74\x69\x6E\x67\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x85\xAA\x42\x72\x69\x67\x68\x74\x6E\x65\x73\x73\x81\xA7\x46\x6C\x6F\x61\x74\x33\x32\x02\xA7\x41\x6D\x62\x69\x65\x6E\x74\x81\xA6\x43\x6F\x6C\x6F\x72\x33\x93\x00\x00\x00\xAD\x47\x6C\x6F\x62\x61\x6C\x53\x68\x61\x64\x6F\x77\x73\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x4F\x75\x74\x6C\x69\x6E\x65\x73\x81\xA4\x42\x6F\x6F\x6C\xC2\xAA\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x79\x81\xA4\x45\x6E\x75\x6D\x01\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x64\x32\x32\x61\x64\x63\x33\x61\x39\x62\x64\x37\x31\x39\x35\x64\x61\x65\x34\x65\x33\x63\x34\x65\x61\x32\x36\x31\x32\x63\x30\x39\x87\xA2\x49\x64\xD9\x20\x64\x32\x32\x61\x64\x63\x33\x61\x39\x62\x64\x37\x31\x39\x35\x64\x61\x65\x34\x65\x33\x63\x34\x65\x61\x32\x36\x31\x32\x63\x30\x39\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA4\x4E\x61\x6D\x65\xA9\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x3B\xE3\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x62\x61\x73\x69\x63\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x61\x6E\x79\x28\x22\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x28\x74\x72\x75\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x6F\x6E\x65\x28\x6E\x69\x6C\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x74\x61\x62\x6C\x65\x28\x7B\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x61\x6E\x79\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x28\x22\x74\x72\x75\x65\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x6F\x6E\x65\x28\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x74\x72\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x74\x72\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x74\x61\x62\x6C\x65\x28\x38\x32\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x70\x65\x63\x69\x61\x6C\x20\x6E\x75\x6D\x62\x65\x72\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x54\x65\x6E\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x31\x30\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x54\x77\x6F\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x32\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x54\x65\x6E\x45\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x31\x30\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x54\x77\x6F\x45\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x28\x38\x2C\x20\x31\x31\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x38\x2C\x20\x31\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x28\x31\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x28\x31\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x28\x32\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x28\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x39\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x31\x30\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x33\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x37\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x38\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x39\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x31\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x31\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x37\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x38\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x39\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x31\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x31\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x22\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x31\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x75\x70\x6C\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x28\x31\x2C\x20\x22\x32\x22\x2C\x20\x33\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x28\x31\x2C\x20\x22\x32\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x28\x31\x2C\x20\x22\x32\x22\x2C\x20\x22\x33\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x75\x6E\x69\x6F\x6E\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x28\x22\x31\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x62\x61\x72\x22\x29\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x6F\x6F\x66\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x62\x61\x72\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x6F\x6F\x66\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x42\x41\x52\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x4F\x4F\x46\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6D\x75\x6C\x74\x69\x70\x6C\x65\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x6F\x6F\x66\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x62\x61\x72\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x6F\x6F\x66\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x42\x41\x52\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x4F\x4F\x46\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x35\x30\x30\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x35\x30\x30\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x31\x2E\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x61\x72\x72\x61\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x61\x72\x72\x61\x79\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x6E\x79\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x61\x6E\x79\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x73\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x22\x66\x6F\x6F\x22\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x31\x2C\x20\x22\x32\x22\x2C\x20\x33\x7D\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x41\x72\x72\x61\x79\x28\x7B\x31\x2C\x20\x22\x32\x22\x2C\x20\x33\x7D\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x41\x72\x72\x61\x79\x28\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x73\x28\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x22\x31\x22\x2C\x20\x22\x32\x22\x2C\x20\x22\x33\x22\x7D\x2C\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x66\x6F\x6F\x20\x3D\x20\x22\x62\x61\x72\x22\x0D\x0A\x09\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x5B\x31\x5D\x20\x3D\x20\x22\x6E\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x09\x09\x5B\x35\x5D\x20\x3D\x20\x22\x73\x65\x71\x75\x65\x6E\x74\x69\x61\x6C\x22\x0D\x0A\x09\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x62\x65\x20\x66\x6F\x6F\x6C\x65\x64\x20\x62\x79\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x6E\x79\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x61\x6E\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x5B\x31\x5D\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x09\x5B\x32\x5D\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x09\x5B\x34\x5D\x20\x3D\x20\x34\x2C\x0D\x0A\x09\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6D\x61\x70\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x61\x20\x3D\x20\x31\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x5B\x31\x5D\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x61\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x65\x74\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x20\x3D\x20\x74\x2E\x73\x65\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x61\x20\x3D\x20\x74\x72\x75\x65\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x5B\x31\x5D\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x61\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x61\x20\x3D\x20\x66\x61\x6C\x73\x65\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x33\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x74\x72\x69\x63\x74\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x30\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x33\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x33\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x64\x65\x65\x70\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x50\x6C\x61\x79\x65\x72\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x31\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x31\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x64\x65\x65\x70\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x50\x6C\x61\x79\x65\x72\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x31\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x6F\x6F\x6C\x56\x61\x6C\x75\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x6F\x6F\x6C\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x28\x62\x6F\x6F\x6C\x56\x61\x6C\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x73\x20\x69\x6E\x68\x65\x72\x69\x74\x61\x6E\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x47\x75\x69\x4F\x62\x6A\x65\x63\x74\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x65\x78\x74\x4C\x61\x62\x65\x6C\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x4C\x61\x62\x65\x6C\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x66\x72\x61\x6D\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x74\x65\x78\x74\x4C\x61\x62\x65\x6C\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x65\x6E\x75\x6D\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x45\x6E\x75\x6D\x28\x22\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x22\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x22\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x4E\x61\x6D\x65\x22\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x43\x75\x73\x74\x6F\x6D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x45\x6E\x75\x6D\x2E\x45\x61\x73\x69\x6E\x67\x53\x74\x79\x6C\x65\x2E\x4C\x69\x6E\x65\x61\x72\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x28\x67\x61\x6D\x65\x2E\x43\x68\x69\x6C\x64\x41\x64\x64\x65\x64\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x28\x56\x65\x63\x74\x6F\x72\x33\x2E\x6E\x65\x77\x28\x29\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x54\x4F\x44\x4F\x3A\x20\x41\x64\x64\x20\x74\x68\x69\x73\x20\x62\x61\x63\x6B\x20\x77\x68\x65\x6E\x20\x4C\x65\x6D\x75\x72\x20\x73\x75\x70\x70\x6F\x72\x74\x73\x20\x69\x74\x0D\x0A\x09\x2D\x2D\x20\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x20\x3D\x20\x67\x61\x6D\x65\x2E\x43\x68\x69\x6C\x64\x41\x64\x64\x65\x64\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x28\x63\x6F\x6E\x6E\x29\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x28\x56\x65\x63\x74\x6F\x72\x33\x2E\x6E\x65\x77\x28\x29\x29\x29\x29\x0D\x0A\x09\x2D\x2D\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x77\x72\x61\x70\x70\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x46\x6F\x6F\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x6F\x6F\x20\x3D\x20\x74\x2E\x77\x72\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x25\x64\x22\x2C\x20\x61\x2C\x20\x62\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x65\x73\x75\x6C\x74\x20\x2E\x2E\x20\x22\x20\x22\x20\x2E\x2E\x20\x63\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x73\x75\x6C\x74\x0D\x0A\x09\x09\x65\x6E\x64\x2C\x20\x63\x68\x65\x63\x6B\x46\x6F\x6F\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x22\x61\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x22\x61\x22\x2C\x20\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x22\x61\x22\x2C\x20\x31\x2C\x20\x22\x62\x22\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x74\x72\x69\x63\x74\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x54\x79\x70\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6D\x79\x54\x79\x70\x65\x28\x22\x61\x22\x2C\x20\x22\x62\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6D\x79\x54\x79\x70\x65\x28\x22\x61\x22\x2C\x20\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x63\x6F\x6D\x6D\x6F\x6E\x20\x4F\x4F\x50\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x4D\x79\x43\x6C\x61\x73\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x4D\x79\x43\x6C\x61\x73\x73\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x4D\x79\x43\x6C\x61\x73\x73\x0D\x0A\x0D\x0A\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x4D\x79\x43\x6C\x61\x73\x73\x2E\x6E\x65\x77\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x4D\x79\x43\x6C\x61\x73\x73\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x43\x6C\x61\x73\x73\x28\x63\x6C\x61\x73\x73\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x74\x20\x3D\x20\x67\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x74\x20\x6F\x72\x20\x6D\x74\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x7E\x3D\x20\x63\x6C\x61\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x62\x61\x64\x20\x6D\x65\x6D\x62\x65\x72\x20\x6F\x66\x20\x63\x6C\x61\x73\x73\x22\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x20\x3D\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x43\x6C\x61\x73\x73\x28\x4D\x79\x43\x6C\x61\x73\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x4F\x62\x6A\x65\x63\x74\x20\x3D\x20\x4D\x79\x43\x6C\x61\x73\x73\x2E\x6E\x65\x77\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x28\x6D\x79\x4F\x62\x6A\x65\x63\x74\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x28\x7B\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x74\x72\x65\x61\x74\x20\x4E\x61\x4E\x20\x61\x73\x20\x6E\x75\x6D\x62\x65\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x30\x2F\x30\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x74\x72\x65\x61\x74\x20\x6E\x75\x6D\x62\x65\x72\x73\x20\x61\x73\x20\x4E\x61\x4E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x61\x6E\x28\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x61\x6E\x28\x30\x2F\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x61\x6E\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x6E\x75\x6D\x62\x65\x72\x20\x61\x6E\x64\x20\x4E\x61\x4E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6E\x61\x6E\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x28\x30\x2F\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6E\x6F\x6E\x2D\x73\x74\x72\x69\x6E\x67\x20\x6B\x65\x79\x73\x20\x66\x6F\x72\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x5B\x6B\x65\x79\x5D\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x20\x7D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x5B\x6B\x65\x79\x5D\x20\x3D\x20\x31\x20\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x5B\x6B\x65\x79\x5D\x20\x3D\x20\x22\x31\x22\x20\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x66\x61\x69\x6C\x69\x6E\x67\x20\x6F\x6E\x20\x6E\x6F\x6E\x2D\x73\x74\x72\x69\x6E\x67\x20\x6B\x65\x79\x73\x20\x66\x6F\x72\x20\x73\x74\x72\x69\x63\x74\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x61\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x20\x7D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x61\x20\x3D\x20\x31\x2C\x20\x5B\x7B\x7D\x5D\x20\x3D\x20\x32\x20\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x2C\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x0D\x0A\x09\x09\x09\x09\x4D\x79\x42\x75\x74\x74\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x7D\x29\x28\x35\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x20\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4E\x6F\x74\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x31\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x31\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x32\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x32\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x20\x73\x68\x6F\x72\x74\x68\x61\x6E\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x46\x72\x61\x6D\x65\x22\x2C\x20\x7B\x0D\x0A\x09\x09\x09\x09\x4D\x79\x42\x75\x74\x74\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x7D\x29\x28\x35\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x20\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4E\x6F\x74\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x31\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x31\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x32\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x32\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x20\x73\x68\x6F\x72\x74\x68\x61\x6E\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x46\x72\x61\x6D\x65\x22\x2C\x20\x7B\x0D\x0A\x09\x09\x09\x09\x4D\x79\x42\x75\x74\x74\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x7D\x29\x28\x35\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x20\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4E\x6F\x74\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x31\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x31\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x32\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x32\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x6D\x61\x74\x63\x68\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6D\x61\x74\x63\x68\x28\x22\x25\x64\x2B\x22\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x22\x31\x32\x33\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x22\x61\x62\x63\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x6B\x65\x79\x4F\x66\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x41\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x42\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6B\x65\x79\x4F\x66\x28\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x22\x4F\x70\x74\x69\x6F\x6E\x41\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x22\x4F\x70\x74\x69\x6F\x6E\x43\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x41\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x42\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x28\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x2E\x4F\x70\x74\x69\x6F\x6E\x41\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x31\x30\x31\x30\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x31\x2C\x20\x32\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x31\x30\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x22\x48\x65\x6C\x6C\x6F\x22\x2C\x20\x31\x30\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x20\x46\x6F\x6F\x20\x3D\x20\x22\x42\x61\x72\x22\x20\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x28\x7B\x31\x30\x2C\x20\x32\x30\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x28\x7B\x31\x30\x2C\x20\x32\x30\x2C\x20\x22\x48\x65\x6C\x6C\x6F\x22\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x28\x7B\x31\x30\x2C\x20\x32\x30\x2C\x20\x33\x30\x7D\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x31\x61\x33\x31\x62\x62\x38\x34\x35\x38\x65\x65\x66\x65\x30\x64\x62\x32\x64\x30\x30\x65\x61\x62\x31\x35\x66\x36\x62\x31\x34\x66\x87\xA2\x49\x64\xD9\x20\x31\x61\x33\x31\x62\x62\x38\x34\x35\x38\x65\x65\x66\x65\x30\x64\x62\x32\x64\x30\x30\x65\x61\x62\x31\x35\x66\x36\x62\x31\x34\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\xA4\x4E\x61\x6D\x65\xA9\x42\x61\x73\x65\x70\x6C\x61\x74\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA4\x50\x61\x72\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x85\xA6\x4C\x6F\x63\x6B\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x50\x6F\x73\x69\x74\x69\x6F\x6E\x81\xA7\x56\x65\x63\x74\x6F\x72\x33\x93\x00\xF6\x00\xA4\x53\x69\x7A\x65\x81\xA7\x56\x65\x63\x74\x6F\x72\x33\x93\xCD\x02\x00\x14\xCD\x02\x00\xA5\x43\x6F\x6C\x6F\x72\x81\xA6\x43\x6F\x6C\x6F\x72\x33\x93\xCB\x3F\xD8\xD8\xC2\xA4\x54\xDE\x7F\xCB\x3F\xD7\xD7\xB2\x03\x1C\xEA\xF2\xCB\x3F\xD8\xD8\xC2\xA4\x54\xDE\x7F\xA8\x41\x6E\x63\x68\x6F\x72\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x38\x39\x37\x33\x34\x66\x31\x64\x66\x39\x39\x37\x64\x65\x38\x35\x66\x64\x32\x62\x64\x64\x34\x32\x37\x64\x64\x66\x33\x34\x66\x62\x87\xA2\x49\x64\xD9\x20\x38\x39\x37\x33\x34\x66\x31\x64\x66\x39\x39\x37\x64\x65\x38\x35\x66\x64\x32\x62\x64\x64\x34\x32\x37\x64\x64\x66\x33\x34\x66\x62\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA8\x57\x6F\x72\x6D\x68\x6F\x6C\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x0D\x94\x6C\x6F\x63\x61\x6C\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x22\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x54\x79\x70\x65\x73\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x72\x6F\x6D\x69\x73\x65\x73\x2E\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x56\x61\x6C\x75\x65\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0D\x0A\x0D\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0D\x0A\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x74\x79\x70\x65\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x50\x61\x63\x6B\x61\x67\x65\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x3D\x20\x22\x50\x6F\x72\x74\x61\x6C\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x46\x6F\x6C\x64\x65\x72\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x46\x69\x6E\x64\x46\x69\x72\x73\x74\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0D\x0A\x0D\x0A\x69\x66\x20\x6E\x6F\x74\x20\x53\x74\x6F\x72\x61\x67\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x69\x66\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x49\x73\x53\x65\x72\x76\x65\x72\x28\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x6F\x6C\x64\x65\x72\x22\x29\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x50\x61\x72\x65\x6E\x74\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65\x50\x61\x63\x6B\x61\x67\x65\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x7B\x0D\x0A\x09\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x09\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x61\x63\x74\x69\x6F\x6E\x2C\x0D\x0A\x09\x09\x54\x69\x6D\x65\x73\x74\x61\x6D\x70\x20\x3D\x20\x44\x61\x74\x65\x54\x69\x6D\x65\x2E\x6E\x6F\x77\x28\x29\x2C\x0D\x0A\x09\x09\x50\x61\x79\x6C\x6F\x61\x64\x20\x3D\x20\x64\x61\x74\x61\x0D\x0A\x09\x7D\x20\x3A\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x53\x74\x6F\x72\x61\x67\x65\x0D\x0A\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6E\x65\x77\x28\x29\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x20\x3A\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x69\x73\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x73\x2E\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x77\x61\x69\x74\x43\x6F\x6E\x74\x65\x78\x74\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x3A\x20\x6E\x75\x6D\x62\x65\x72\x3F\x29\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x29\x29\x0D\x0A\x09\x63\x68\x65\x63\x6B\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x29\x0D\x0A\x09\x69\x66\x20\x74\x69\x6D\x65\x6F\x75\x74\x20\x74\x68\x65\x6E\x20\x0D\x0A\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x29\x0D\x0A\x09\x09\x77\x61\x72\x6E\x28\x22\x55\x68\x20\x6F\x68\x21\x20\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x20\x61\x77\x61\x69\x74\x69\x6E\x67\x20\x63\x6F\x6E\x74\x65\x78\x74\x5C\x6E\x22\x2C\x20\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x20\x3D\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x20\x3A\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x52\x65\x6D\x6F\x74\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x22\x29\x2C\x0D\x0A\x09\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x2C\x0D\x0A\x09\x09\x41\x63\x74\x69\x6F\x6E\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x7D\x0D\x0A\x09\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x20\x3D\x20\x6E\x65\x77\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6D\x61\x6B\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x64\x6F\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x2D\x3E\x28\x29\x3F\x29\x3A\x20\x28\x29\x0D\x0A\x09\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x77\x61\x69\x74\x43\x6F\x6E\x74\x65\x78\x74\x28\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x43\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x09\x69\x66\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x49\x73\x53\x65\x72\x76\x65\x72\x28\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2E\x52\x65\x6D\x6F\x74\x65\x2E\x4F\x6E\x53\x65\x72\x76\x65\x72\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x3A\x20\x50\x6C\x61\x79\x65\x72\x2C\x20\x70\x61\x63\x6B\x61\x67\x65\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x50\x6C\x61\x79\x65\x72\x22\x29\x29\x0D\x0A\x09\x09\x09\x09\x63\x68\x65\x63\x6B\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x29\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2E\x52\x65\x6D\x6F\x74\x65\x2E\x4F\x6E\x43\x6C\x69\x65\x6E\x74\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x3A\x20\x50\x6C\x61\x79\x65\x72\x2C\x20\x70\x61\x63\x6B\x61\x67\x65\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x50\x6C\x61\x79\x65\x72\x22\x29\x29\x0D\x0A\x09\x09\x09\x09\x63\x68\x65\x63\x6B\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\x87\xA2\x49\x64\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\xA4\x4E\x61\x6D\x65\xA8\x50\x61\x63\x6B\x61\x67\x65\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x94\xD9\x20\x38\x64\x37\x32\x31\x37\x63\x37\x66\x32\x61\x61\x66\x39\x38\x61\x34\x35\x62\x37\x36\x34\x63\x64\x36\x66\x35\x65\x37\x30\x61\x33\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xD9\x20\x33\x38\x36\x30\x33\x33\x34\x66\x35\x39\x30\x33\x62\x65\x37\x37\x64\x31\x39\x35\x37\x37\x31\x38\x66\x31\x35\x32\x39\x39\x33\x66\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x61\x31\x34\x33\x30\x35\x39\x65\x63\x61\x65\x38\x33\x34\x61\x65\x65\x34\x31\x62\x39\x34\x66\x35\x61\x63\x32\x39\x66\x35\x31\x32\x87\xA2\x49\x64\xD9\x20\x61\x31\x34\x33\x30\x35\x39\x65\x63\x61\x65\x38\x33\x34\x61\x65\x65\x34\x31\x62\x39\x34\x66\x35\x61\x63\x32\x39\x66\x35\x31\x32\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xAC\x53\x6F\x75\x6E\x64\x53\x65\x72\x76\x69\x63\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x53\x6F\x75\x6E\x64\x53\x65\x72\x76\x69\x63\x65\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xB7\x52\x65\x73\x70\x65\x63\x74\x46\x69\x6C\x74\x65\x72\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\x87\xA2\x49\x64\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xA4\x4E\x61\x6D\x65\xB4\x65\x76\x61\x65\x72\x61\x5F\x70\x72\x6F\x6D\x69\x73\x65\x40\x33\x2E\x31\x2E\x30\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x34\x36\x62\x63\x63\x39\x32\x63\x61\x35\x64\x63\x39\x33\x64\x61\x37\x35\x62\x61\x36\x38\x35\x61\x65\x37\x63\x62\x34\x39\x39\x31\x87\xA2\x49\x64\xD9\x20\x34\x36\x62\x63\x63\x39\x32\x63\x61\x35\x64\x63\x39\x33\x64\x61\x37\x35\x62\x61\x36\x38\x35\x61\x65\x37\x63\x62\x34\x39\x39\x31\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xA8\x49\x43\x6F\x6E\x74\x65\x78\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\x43\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x73\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x4E\x61\x6D\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x7D\x29\x0D\x0A\x0D\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x7B\x0D\x0A\x09\x4E\x61\x6D\x65\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x73\x3A\x20\x7B\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x28\x29\x2D\x3E\x6E\x69\x6C\x7D\x2C\x0D\x0A\x09\x0D\x0A\x09\x5F\x5F\x69\x6E\x64\x65\x78\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x6E\x65\x77\x3A\x20\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x70\x72\x6F\x76\x69\x64\x65\x72\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x69\x73\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x0D\x0A\x0D\x0A\x09\x50\x75\x62\x6C\x69\x73\x68\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x0D\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x62\x65\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x29\x20\x2D\x3E\x20\x28\x29\x2C\x0D\x0A\x09\x44\x65\x73\x74\x72\x6F\x79\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x49\x73\x43\x6F\x6E\x74\x65\x78\x74\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x65\x6E\x64\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\x87\xA2\x49\x64\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA6\x5F\x49\x6E\x64\x65\x78\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x92\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x33\x38\x36\x30\x33\x33\x34\x66\x35\x39\x30\x33\x62\x65\x37\x37\x64\x31\x39\x35\x37\x37\x31\x38\x66\x31\x35\x32\x39\x39\x33\x66\x87\xA2\x49\x64\xD9\x20\x33\x38\x36\x30\x33\x33\x34\x66\x35\x39\x30\x33\x62\x65\x37\x37\x64\x31\x39\x35\x37\x37\x31\x38\x66\x31\x35\x32\x39\x39\x33\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA1\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xD9\x3F\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x5F\x49\x6E\x64\x65\x78\x5B\x22\x73\x68\x61\x6E\x65\x62\x75\x74\x74\x5F\x74\x40\x31\x2E\x33\x2E\x31\x22\x5D\x5B\x22\x74\x22\x5D\x29\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x36\x39\x37\x38\x61\x31\x38\x38\x33\x35\x38\x64\x36\x34\x62\x66\x62\x32\x31\x30\x33\x37\x31\x32\x32\x30\x32\x61\x39\x39\x32\x32\x87\xA2\x49\x64\xD9\x20\x36\x39\x37\x38\x61\x31\x38\x38\x33\x35\x38\x64\x36\x34\x62\x66\x62\x32\x31\x30\x33\x37\x31\x32\x32\x30\x32\x61\x39\x39\x32\x32\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xAD\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\x14\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x73\x53\x55\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x29\x29\x2C\x0A\x7D\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x43\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x2C\x0A\x0A\x09\x5F\x5F\x69\x6E\x64\x65\x78\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x0A\x09\x6E\x65\x77\x3A\x20\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x3F\x29\x20\x2D\x3E\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x09\x69\x73\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x0A\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x62\x65\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x29\x20\x2D\x3E\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x49\x73\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x65\x6E\x64\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\x87\xA2\x49\x64\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\xA4\x4E\x61\x6D\x65\xA6\x70\x6F\x72\x74\x61\x6C\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA9\x44\x61\x74\x61\x4D\x6F\x64\x65\x6C\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x94\xD9\x20\x62\x63\x37\x37\x31\x30\x66\x36\x61\x61\x64\x33\x32\x34\x39\x37\x39\x38\x61\x63\x30\x31\x61\x63\x37\x30\x63\x36\x30\x38\x62\x33\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\xD9\x20\x61\x31\x34\x33\x30\x35\x39\x65\x63\x61\x65\x38\x33\x34\x61\x65\x65\x34\x31\x62\x39\x34\x66\x35\x61\x63\x32\x39\x66\x35\x31\x32\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\x87\xA2\x49\x64\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xB1\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xB1\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\x87\xA2\x49\x64\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\xA4\x4E\x61\x6D\x65\xA7\x70\x72\x6F\x6D\x69\x73\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\xEB\x16\x2D\x2D\x5B\x5B\x0D\x0A\x09\x41\x6E\x20\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x61\x74\x69\x6F\x6E\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2F\x41\x2B\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x20\x3D\x20\x22\x4E\x6F\x6E\x2D\x70\x72\x6F\x6D\x69\x73\x65\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x74\x6F\x20\x25\x73\x20\x61\x74\x20\x69\x6E\x64\x65\x78\x20\x25\x73\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x20\x3D\x20\x22\x50\x6C\x65\x61\x73\x65\x20\x70\x61\x73\x73\x20\x61\x20\x6C\x69\x73\x74\x20\x6F\x66\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x25\x73\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x20\x3D\x20\x22\x50\x6C\x65\x61\x73\x65\x20\x70\x61\x73\x73\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x25\x73\x21\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x4D\x4F\x44\x45\x5F\x4B\x45\x59\x5F\x4D\x45\x54\x41\x54\x41\x42\x4C\x45\x20\x3D\x20\x7B\x5F\x5F\x6D\x6F\x64\x65\x20\x3D\x20\x22\x6B\x22\x7D\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x65\x6E\x75\x6D\x20\x64\x69\x63\x74\x69\x6F\x6E\x61\x72\x79\x20\x77\x69\x74\x68\x20\x73\x6F\x6D\x65\x20\x6D\x65\x74\x61\x6D\x65\x74\x68\x6F\x64\x73\x20\x74\x6F\x20\x70\x72\x65\x76\x65\x6E\x74\x20\x63\x6F\x6D\x6D\x6F\x6E\x20\x6D\x69\x73\x74\x61\x6B\x65\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x61\x6B\x65\x45\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x4E\x61\x6D\x65\x2C\x20\x6D\x65\x6D\x62\x65\x72\x73\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x75\x6D\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x6D\x65\x6D\x62\x65\x72\x4E\x61\x6D\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6D\x65\x6D\x62\x65\x72\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x65\x6E\x75\x6D\x5B\x6D\x65\x6D\x62\x65\x72\x4E\x61\x6D\x65\x5D\x20\x3D\x20\x6D\x65\x6D\x62\x65\x72\x4E\x61\x6D\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x65\x6E\x75\x6D\x2C\x20\x7B\x0D\x0A\x09\x09\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x6B\x29\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x69\x73\x20\x6E\x6F\x74\x20\x69\x6E\x20\x25\x73\x21\x22\x2C\x20\x6B\x2C\x20\x65\x6E\x75\x6D\x4E\x61\x6D\x65\x29\x2C\x20\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x5F\x5F\x6E\x65\x77\x69\x6E\x64\x65\x78\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x6E\x65\x77\x20\x6D\x65\x6D\x62\x65\x72\x73\x20\x69\x6E\x20\x25\x73\x20\x69\x73\x20\x6E\x6F\x74\x20\x61\x6C\x6C\x6F\x77\x65\x64\x21\x22\x2C\x20\x65\x6E\x75\x6D\x4E\x61\x6D\x65\x29\x2C\x20\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x7D\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x6E\x20\x6F\x62\x6A\x65\x63\x74\x20\x74\x6F\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x20\x72\x75\x6E\x74\x69\x6D\x65\x20\x65\x72\x72\x6F\x72\x73\x20\x74\x68\x61\x74\x20\x6F\x63\x63\x75\x72\x20\x64\x75\x72\x69\x6E\x67\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x20\x6C\x69\x6B\x65\x20\x74\x68\x69\x73\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x0D\x0A\x09\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x6F\x62\x6A\x65\x63\x74\x2E\x0D\x0A\x0D\x0A\x09\x40\x63\x6C\x61\x73\x73\x20\x45\x72\x72\x6F\x72\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x72\x72\x6F\x72\x20\x64\x6F\x0D\x0A\x09\x45\x72\x72\x6F\x72\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x4B\x69\x6E\x64\x20\x3D\x20\x6D\x61\x6B\x65\x45\x6E\x75\x6D\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x22\x2C\x20\x7B\x0D\x0A\x09\x09\x09\x22\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x22\x2C\x0D\x0A\x09\x09\x09\x22\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x0D\x0A\x09\x09\x09\x22\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x22\x2C\x0D\x0A\x09\x09\x09\x22\x54\x69\x6D\x65\x64\x4F\x75\x74\x22\x2C\x0D\x0A\x09\x09\x7D\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x09\x45\x72\x72\x6F\x72\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x45\x72\x72\x6F\x72\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x6F\x70\x74\x69\x6F\x6E\x73\x2C\x20\x70\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x09\x6F\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x20\x6F\x72\x20\x7B\x7D\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x65\x72\x72\x6F\x72\x29\x20\x6F\x72\x20\x22\x5B\x54\x68\x69\x73\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x73\x20\x6E\x6F\x20\x65\x72\x72\x6F\x72\x20\x74\x65\x78\x74\x2E\x5D\x22\x2C\x0D\x0A\x09\x09\x09\x74\x72\x61\x63\x65\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x74\x72\x61\x63\x65\x2C\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x6B\x69\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x2C\x0D\x0A\x09\x09\x09\x63\x72\x65\x61\x74\x65\x64\x54\x69\x63\x6B\x20\x3D\x20\x6F\x73\x2E\x63\x6C\x6F\x63\x6B\x28\x29\x2C\x0D\x0A\x09\x09\x09\x63\x72\x65\x61\x74\x65\x64\x54\x72\x61\x63\x65\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x29\x2C\x0D\x0A\x09\x09\x7D\x2C\x20\x45\x72\x72\x6F\x72\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x79\x70\x65\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x20\x67\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x79\x70\x65\x28\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x61\x77\x67\x65\x74\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x2C\x20\x22\x65\x72\x72\x6F\x72\x22\x29\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x74\x79\x70\x65\x28\x72\x61\x77\x67\x65\x74\x28\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x22\x65\x78\x74\x65\x6E\x64\x22\x29\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x2C\x20\x6B\x69\x6E\x64\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6B\x69\x6E\x64\x20\x7E\x3D\x20\x6E\x69\x6C\x2C\x20\x22\x41\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x20\x6D\x75\x73\x74\x20\x6E\x6F\x74\x20\x62\x65\x20\x6E\x69\x6C\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x20\x61\x6E\x64\x20\x61\x6E\x79\x74\x68\x69\x6E\x67\x2E\x6B\x69\x6E\x64\x20\x3D\x3D\x20\x6B\x69\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x65\x78\x74\x65\x6E\x64\x28\x6F\x70\x74\x69\x6F\x6E\x73\x29\x0D\x0A\x09\x09\x6F\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x20\x6F\x72\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x6B\x69\x6E\x64\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x6B\x69\x6E\x64\x20\x6F\x72\x20\x73\x65\x6C\x66\x2E\x6B\x69\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x6F\x70\x74\x69\x6F\x6E\x73\x2C\x20\x73\x65\x6C\x66\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x67\x65\x74\x45\x72\x72\x6F\x72\x43\x68\x61\x69\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x20\x3D\x20\x7B\x20\x73\x65\x6C\x66\x20\x7D\x0D\x0A\x0D\x0A\x09\x09\x77\x68\x69\x6C\x65\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5B\x23\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5D\x2E\x70\x61\x72\x65\x6E\x74\x20\x64\x6F\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x2C\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5B\x23\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5D\x2E\x70\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x5F\x5F\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x6F\x72\x53\x74\x72\x69\x6E\x67\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x2D\x2D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x25\x73\x29\x20\x2D\x2D\x22\x2C\x20\x73\x65\x6C\x66\x2E\x6B\x69\x6E\x64\x20\x6F\x72\x20\x22\x3F\x22\x29\x2C\x0D\x0A\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x3A\x67\x65\x74\x45\x72\x72\x6F\x72\x43\x68\x61\x69\x6E\x28\x29\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x65\x72\x72\x6F\x72\x53\x74\x72\x69\x6E\x67\x73\x2C\x20\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6E\x63\x61\x74\x28\x7B\x0D\x0A\x09\x09\x09\x09\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2E\x74\x72\x61\x63\x65\x20\x6F\x72\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2E\x65\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2E\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x22\x5C\x6E\x22\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6E\x63\x61\x74\x28\x65\x72\x72\x6F\x72\x53\x74\x72\x69\x6E\x67\x73\x2C\x20\x22\x5C\x6E\x22\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x50\x61\x63\x6B\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x69\x6E\x74\x6F\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x69\x74\x73\x20\x6C\x65\x6E\x67\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x55\x73\x65\x64\x20\x74\x6F\x20\x63\x61\x6A\x6F\x6C\x65\x20\x76\x61\x72\x61\x72\x67\x73\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x64\x72\x6F\x70\x70\x69\x6E\x67\x20\x73\x70\x61\x72\x73\x65\x20\x76\x61\x6C\x75\x65\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x2C\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x66\x69\x72\x73\x74\x20\x76\x61\x6C\x75\x65\x20\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2C\x20\x61\x6E\x64\x20\x70\x61\x63\x6B\x73\x20\x61\x6C\x6C\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x76\x61\x6C\x75\x65\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x61\x63\x6B\x52\x65\x73\x75\x6C\x74\x28\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x2C\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x61\x6B\x65\x45\x72\x72\x6F\x72\x48\x61\x6E\x64\x6C\x65\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x7E\x3D\x20\x6E\x69\x6C\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x72\x72\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x20\x6F\x62\x6A\x65\x63\x74\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x61\x20\x74\x61\x62\x6C\x65\x2C\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x69\x74\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x53\x68\x6F\x75\x6C\x64\x20\x77\x65\x20\x65\x78\x74\x65\x6E\x64\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x20\x68\x65\x72\x65\x20\x61\x6E\x64\x20\x61\x64\x64\x20\x6F\x75\x72\x20\x6F\x77\x6E\x20\x74\x72\x61\x63\x65\x3F\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x74\x79\x70\x65\x28\x65\x72\x72\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x65\x72\x72\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x65\x72\x72\x2C\x0D\x0A\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x74\x72\x61\x63\x65\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x65\x72\x72\x29\x2C\x20\x32\x29\x2C\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x22\x20\x2E\x2E\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x61\x6C\x6C\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x6E\x64\x6C\x69\x6E\x67\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x61\x63\x6B\x52\x65\x73\x75\x6C\x74\x28\x78\x70\x63\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x6D\x61\x6B\x65\x45\x72\x72\x6F\x72\x48\x61\x6E\x64\x6C\x65\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x29\x2C\x20\x2E\x2E\x2E\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x69\x6E\x76\x6F\x6B\x65\x73\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x6E\x64\x6C\x69\x6E\x67\x20\x61\x6E\x64\x0D\x0A\x09\x72\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x6D\x65\x63\x68\x61\x6E\x69\x73\x6D\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x45\x6D\x70\x74\x79\x28\x74\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x6E\x65\x78\x74\x28\x74\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x6E\x20\x65\x6E\x75\x6D\x20\x76\x61\x6C\x75\x65\x20\x75\x73\x65\x64\x20\x74\x6F\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x27\x73\x20\x73\x74\x61\x74\x75\x73\x2E\x0D\x0A\x09\x40\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x53\x74\x61\x74\x75\x73\x0D\x0A\x09\x40\x74\x61\x67\x20\x65\x6E\x75\x6D\x0D\x0A\x09\x40\x77\x69\x74\x68\x69\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x22\x53\x74\x61\x72\x74\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x2C\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x73\x65\x74\x74\x6C\x65\x64\x20\x79\x65\x74\x2E\x0D\x0A\x09\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x22\x52\x65\x73\x6F\x6C\x76\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x2E\x0D\x0A\x09\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x22\x52\x65\x6A\x65\x63\x74\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x2E\x0D\x0A\x09\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x22\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x62\x65\x66\x6F\x72\x65\x20\x69\x74\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x40\x70\x72\x6F\x70\x20\x53\x74\x61\x74\x75\x73\x20\x53\x74\x61\x74\x75\x73\x0D\x0A\x09\x40\x77\x69\x74\x68\x69\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x72\x65\x61\x64\x6F\x6E\x6C\x79\x0D\x0A\x09\x40\x74\x61\x67\x20\x65\x6E\x75\x6D\x73\x0D\x0A\x09\x41\x20\x74\x61\x62\x6C\x65\x20\x63\x6F\x6E\x74\x61\x69\x6E\x69\x6E\x67\x20\x61\x6C\x6C\x20\x6D\x65\x6D\x62\x65\x72\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x60\x53\x74\x61\x74\x75\x73\x60\x20\x65\x6E\x75\x6D\x2C\x20\x65\x2E\x67\x2E\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x60\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6E\x20\x6F\x62\x6A\x65\x63\x74\x20\x74\x68\x61\x74\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x73\x20\x61\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x65\x78\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x66\x75\x74\x75\x72\x65\x2C\x20\x62\x75\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x72\x69\x67\x68\x74\x20\x6E\x6F\x77\x2E\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6C\x6C\x6F\x77\x20\x79\x6F\x75\x20\x74\x6F\x20\x74\x68\x65\x6E\x20\x61\x74\x74\x61\x63\x68\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x74\x68\x61\x74\x20\x63\x61\x6E\x20\x72\x75\x6E\x20\x6F\x6E\x63\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x62\x65\x63\x6F\x6D\x65\x73\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x28\x6B\x6E\x6F\x77\x6E\x20\x61\x73\x20\x2A\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x2A\x29\x2C\x0D\x0A\x09\x6F\x72\x20\x69\x66\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x73\x20\x6F\x63\x63\x75\x72\x72\x65\x64\x20\x28\x6B\x6E\x6F\x77\x6E\x20\x61\x73\x20\x2A\x72\x65\x6A\x65\x63\x74\x69\x6E\x67\x2A\x29\x2E\x0D\x0A\x0D\x0A\x09\x40\x63\x6C\x61\x73\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x5F\x5F\x69\x6E\x64\x65\x78\x20\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x7B\x0D\x0A\x09\x45\x72\x72\x6F\x72\x20\x3D\x20\x45\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x53\x74\x61\x74\x75\x73\x20\x3D\x20\x6D\x61\x6B\x65\x45\x6E\x75\x6D\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x22\x2C\x20\x7B\x22\x53\x74\x61\x72\x74\x65\x64\x22\x2C\x20\x22\x52\x65\x73\x6F\x6C\x76\x65\x64\x22\x2C\x20\x22\x52\x65\x6A\x65\x63\x74\x65\x64\x22\x2C\x20\x22\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x7D\x29\x2C\x0D\x0A\x09\x5F\x67\x65\x74\x54\x69\x6D\x65\x20\x3D\x20\x6F\x73\x2E\x63\x6C\x6F\x63\x6B\x2C\x0D\x0A\x09\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x22\x29\x2E\x48\x65\x61\x72\x74\x62\x65\x61\x74\x2C\x0D\x0A\x7D\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x70\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x69\x66\x20\x70\x61\x72\x65\x6E\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x61\x72\x65\x6E\x74\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x41\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x20\x6E\x69\x6C\x22\x2C\x20\x32\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x2D\x2D\x20\x55\x73\x65\x64\x20\x74\x6F\x20\x6C\x6F\x63\x61\x74\x65\x20\x77\x68\x65\x72\x65\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x72\x65\x61\x74\x65\x64\x0D\x0A\x09\x09\x5F\x73\x6F\x75\x72\x63\x65\x20\x3D\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x0D\x0A\x09\x09\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x20\x74\x61\x62\x6C\x65\x20\x63\x6F\x6E\x74\x61\x69\x6E\x69\x6E\x67\x20\x61\x20\x6C\x69\x73\x74\x20\x6F\x66\x20\x61\x6C\x6C\x20\x72\x65\x73\x75\x6C\x74\x73\x2C\x20\x77\x68\x65\x74\x68\x65\x72\x20\x73\x75\x63\x63\x65\x73\x73\x20\x6F\x72\x20\x66\x61\x69\x6C\x75\x72\x65\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x4F\x6E\x6C\x79\x20\x76\x61\x6C\x69\x64\x20\x69\x66\x20\x5F\x73\x74\x61\x74\x75\x73\x20\x69\x73\x20\x73\x65\x74\x20\x74\x6F\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x65\x73\x69\x64\x65\x73\x20\x53\x74\x61\x72\x74\x65\x64\x0D\x0A\x09\x09\x5F\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x6E\x69\x6C\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x4C\x75\x61\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x6C\x69\x6B\x65\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x20\x76\x65\x72\x79\x20\x6D\x75\x63\x68\x2C\x20\x73\x6F\x20\x77\x65\x20\x65\x78\x70\x6C\x69\x63\x69\x74\x6C\x79\x20\x73\x74\x6F\x72\x65\x20\x74\x68\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x6C\x65\x6E\x67\x74\x68\x20\x6F\x66\x20\x5F\x76\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x68\x61\x6E\x64\x6C\x65\x20\x6D\x69\x64\x64\x6C\x65\x20\x6E\x69\x6C\x73\x2E\x0D\x0A\x09\x09\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x20\x3D\x20\x2D\x31\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x72\x61\x63\x6B\x73\x20\x69\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x20\x6E\x6F\x20\x65\x72\x72\x6F\x72\x20\x6F\x62\x73\x65\x72\x76\x65\x72\x73\x2E\x2E\x0D\x0A\x09\x09\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x74\x72\x75\x65\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x51\x75\x65\x75\x65\x73\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x77\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x69\x6E\x76\x6F\x6B\x65\x20\x77\x68\x65\x6E\x20\x77\x65\x20\x75\x70\x64\x61\x74\x65\x21\x0D\x0A\x09\x09\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x72\x75\x6E\x20\x77\x68\x65\x6E\x2F\x69\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x09\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x3D\x20\x6E\x69\x6C\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x22\x70\x61\x72\x65\x6E\x74\x22\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x2E\x20\x52\x65\x71\x75\x69\x72\x65\x64\x20\x66\x6F\x72\x0D\x0A\x09\x09\x2D\x2D\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E\x20\x75\x70\x73\x74\x72\x65\x61\x6D\x2E\x0D\x0A\x09\x09\x5F\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x61\x72\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x68\x61\x76\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x6E\x74\x6F\x20\x74\x68\x69\x73\x20\x6F\x6E\x65\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x74\x72\x61\x63\x6B\x20\x74\x68\x65\x6D\x20\x66\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E\x20\x64\x6F\x77\x6E\x73\x74\x72\x65\x61\x6D\x2E\x0D\x0A\x09\x09\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x4D\x4F\x44\x45\x5F\x4B\x45\x59\x5F\x4D\x45\x54\x41\x54\x41\x42\x4C\x45\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x70\x61\x72\x65\x6E\x74\x20\x61\x6E\x64\x20\x70\x61\x72\x65\x6E\x74\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x70\x61\x72\x65\x6E\x74\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x73\x65\x6C\x66\x5D\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x73\x65\x6C\x66\x2C\x20\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x29\x0D\x0A\x09\x09\x69\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x3D\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x5F\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x0D\x0A\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x2C\x0D\x0A\x09\x09\x09\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x2C\x0D\x0A\x09\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x0D\x0A\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x6F\x6E\x73\x74\x72\x75\x63\x74\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x79\x6F\x75\x20\x60\x72\x65\x73\x6F\x6C\x76\x65\x60\x20\x77\x69\x74\x68\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x6E\x74\x6F\x2E\x0D\x0A\x0D\x0A\x09\x59\x6F\x75\x20\x63\x61\x6E\x20\x73\x61\x66\x65\x6C\x79\x20\x79\x69\x65\x6C\x64\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x6E\x64\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x62\x6C\x6F\x63\x6B\x20\x74\x68\x65\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x74\x68\x72\x65\x61\x64\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x46\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x09\x77\x61\x69\x74\x28\x31\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x48\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6D\x79\x46\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x70\x72\x69\x6E\x74\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x59\x6F\x75\x20\x64\x6F\x20\x6E\x6F\x74\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x75\x73\x65\x20\x60\x70\x63\x61\x6C\x6C\x60\x20\x77\x69\x74\x68\x69\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x20\x45\x72\x72\x6F\x72\x73\x20\x74\x68\x61\x74\x20\x6F\x63\x63\x75\x72\x20\x64\x75\x72\x69\x6E\x67\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x75\x67\x68\x74\x20\x61\x6E\x64\x20\x74\x75\x72\x6E\x65\x64\x20\x69\x6E\x74\x6F\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x61\x75\x74\x6F\x6D\x61\x74\x69\x63\x61\x6C\x6C\x79\x2E\x20\x49\x66\x20\x60\x65\x72\x72\x6F\x72\x28\x29\x60\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x77\x69\x74\x68\x20\x61\x20\x74\x61\x62\x6C\x65\x2C\x20\x74\x68\x61\x74\x20\x74\x61\x62\x6C\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x2E\x20\x4F\x74\x68\x65\x72\x77\x69\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x20\x65\x72\x72\x6F\x72\x73\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x69\x6E\x74\x6F\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x29\x60\x20\x6F\x62\x6A\x65\x63\x74\x73\x20\x66\x6F\x72\x20\x74\x72\x61\x63\x6B\x69\x6E\x67\x20\x64\x65\x62\x75\x67\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x0D\x0A\x09\x59\x6F\x75\x20\x6D\x61\x79\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x61\x6E\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x62\x79\x20\x75\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x3A\x0D\x0A\x0D\x0A\x09\x2A\x20\x54\x68\x69\x73\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6F\x20\x61\x62\x6F\x72\x74\x20\x61\x6E\x79\x20\x6F\x6E\x67\x6F\x69\x6E\x67\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x6C\x65\x61\x64\x69\x6E\x67\x20\x75\x70\x20\x74\x6F\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x62\x65\x69\x6E\x67\x20\x73\x65\x74\x74\x6C\x65\x64\x2E\x0D\x0A\x09\x2A\x20\x43\x61\x6C\x6C\x20\x74\x68\x65\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x74\x68\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x61\x73\x20\x69\x74\x73\x20\x6F\x6E\x6C\x79\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x74\x6F\x20\x73\x65\x74\x20\x61\x20\x68\x6F\x6F\x6B\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x69\x6E\x20\x74\x75\x72\x6E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x2F\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x2A\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x79\x6F\x75\x20\x63\x61\x6C\x6C\x65\x64\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x2E\x0D\x0A\x09\x2A\x20\x43\x61\x6C\x6C\x69\x6E\x67\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x77\x69\x74\x68\x20\x6E\x6F\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x6F\x76\x65\x72\x72\x69\x64\x65\x20\x61\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x6C\x79\x20\x73\x65\x74\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x2C\x20\x62\x75\x74\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x73\x74\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6E\x74\x6C\x79\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x2A\x20\x59\x6F\x75\x20\x63\x61\x6E\x20\x73\x65\x74\x20\x74\x68\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x61\x74\x20\x61\x6E\x79\x20\x74\x69\x6D\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x2E\x0D\x0A\x09\x2A\x20\x57\x68\x65\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x63\x61\x6C\x6C\x73\x20\x74\x6F\x20\x60\x72\x65\x73\x6F\x6C\x76\x65\x60\x20\x6F\x72\x20\x60\x72\x65\x6A\x65\x63\x74\x60\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x69\x67\x6E\x6F\x72\x65\x64\x2C\x20\x72\x65\x67\x61\x72\x64\x6C\x65\x73\x73\x20\x6F\x66\x20\x69\x66\x20\x79\x6F\x75\x20\x73\x65\x74\x20\x61\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x6F\x72\x20\x6E\x6F\x74\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x28\x72\x65\x73\x6F\x6C\x76\x65\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x72\x65\x6A\x65\x63\x74\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x3A\x20\x28\x61\x62\x6F\x72\x74\x48\x61\x6E\x64\x6C\x65\x72\x3A\x20\x28\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x29\x29\x20\x2D\x3E\x20\x28\x29\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x65\x78\x65\x63\x75\x74\x6F\x72\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x5F\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x28\x25\x73\x29\x22\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x54\x68\x65\x20\x73\x61\x6D\x65\x20\x61\x73\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x5D\x28\x2F\x61\x70\x69\x2F\x50\x72\x6F\x6D\x69\x73\x65\x23\x6E\x65\x77\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x20\x62\x65\x67\x69\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x60\x48\x65\x61\x72\x74\x62\x65\x61\x74\x60\x20\x65\x76\x65\x6E\x74\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x70\x69\x72\x69\x74\x75\x61\x6C\x20\x72\x65\x70\x6C\x61\x63\x65\x6D\x65\x6E\x74\x20\x66\x6F\x72\x20\x60\x73\x70\x61\x77\x6E\x60\x2C\x20\x62\x75\x74\x20\x69\x74\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x73\x75\x66\x66\x65\x72\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x5B\x69\x73\x73\x75\x65\x73\x5D\x28\x68\x74\x74\x70\x73\x3A\x2F\x2F\x65\x72\x79\x6E\x2E\x69\x6F\x2F\x67\x69\x73\x74\x2F\x33\x64\x62\x38\x34\x35\x37\x39\x38\x36\x36\x63\x30\x39\x39\x63\x64\x64\x35\x62\x62\x32\x66\x66\x33\x37\x39\x34\x37\x63\x65\x63\x29\x20\x61\x73\x20\x60\x73\x70\x61\x77\x6E\x60\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x2C\x20\x63\x68\x69\x6C\x64\x4E\x61\x6D\x65\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x09\x20\x20\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x20\x3D\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x63\x68\x69\x6C\x64\x4E\x61\x6D\x65\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x0D\x0A\x09\x09\x3B\x28\x63\x68\x69\x6C\x64\x20\x61\x6E\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x29\x28\x63\x68\x69\x6C\x64\x29\x0D\x0A\x09\x20\x20\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x28\x72\x65\x73\x6F\x6C\x76\x65\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x72\x65\x6A\x65\x63\x74\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x3A\x20\x28\x61\x62\x6F\x72\x74\x48\x61\x6E\x64\x6C\x65\x72\x3A\x20\x28\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x29\x29\x20\x2D\x3E\x20\x28\x29\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x5F\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x42\x61\x63\x6B\x77\x61\x72\x64\x73\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x73\x79\x6E\x63\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x6E\x65\x65\x64\x73\x20\x74\x6F\x20\x63\x6F\x6E\x73\x75\x6D\x65\x20\x74\x68\x69\x73\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x28\x69\x2E\x65\x2E\x20\x60\x3A\x63\x61\x74\x63\x68\x28\x29\x60\x20\x69\x74\x29\x2C\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x65\x6D\x69\x74\x20\x61\x6E\x20\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x77\x61\x72\x6E\x69\x6E\x67\x20\x6F\x6E\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x66\x72\x61\x6D\x65\x2E\x20\x54\x68\x75\x73\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x63\x72\x65\x61\x74\x65\x20\x61\x6E\x64\x20\x73\x74\x6F\x72\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x66\x6F\x72\x20\x6C\x61\x74\x65\x72\x20\x75\x73\x65\x2E\x20\x4F\x6E\x6C\x79\x20\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65\x6D\x20\x6F\x6E\x2D\x64\x65\x6D\x61\x6E\x64\x20\x61\x73\x20\x6E\x65\x65\x64\x65\x64\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x2D\x2D\x20\x45\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x20\x74\x6F\x20\x64\x65\x6C\x69\x76\x65\x72\x20\x63\x61\x63\x68\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x3A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x67\x65\x74\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x6E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x63\x61\x63\x68\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x63\x61\x63\x68\x65\x5B\x6E\x61\x6D\x65\x5D\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x68\x69\x6E\x67\x20\x3D\x20\x67\x65\x74\x54\x68\x65\x54\x68\x69\x6E\x67\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x63\x68\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x3D\x20\x74\x68\x69\x6E\x67\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x52\x75\x6E\x73\x20\x61\x20\x6E\x6F\x6E\x2D\x70\x72\x6F\x6D\x69\x73\x65\x2D\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x0D\x0A\x20\x20\x67\x69\x76\x65\x6E\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x72\x79\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x42\x65\x67\x69\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x2C\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x20\x77\x69\x74\x68\x20\x69\x74\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x2E\x20\x49\x66\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72\x73\x2C\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x2E\x20\x59\x6F\x75\x20\x63\x61\x6E\x20\x73\x61\x66\x65\x6C\x79\x20\x79\x69\x65\x6C\x64\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x60\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x5D\x28\x23\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x73\x20\x69\x6E\x76\x6F\x6B\x65\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x61\x20\x6E\x65\x77\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6D\x61\x74\x68\x2E\x72\x61\x6E\x64\x6F\x6D\x28\x31\x2C\x20\x32\x29\x20\x3D\x3D\x20\x31\x20\x61\x6E\x64\x20\x22\x6F\x6B\x22\x20\x6F\x72\x20\x65\x72\x72\x6F\x72\x28\x22\x4F\x68\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x21\x22\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x72\x72\x29\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x72\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x3A\x0D\x0A\x09\x09\x2A\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x77\x68\x65\x6E\x20\x61\x6C\x6C\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x2A\x20\x69\x73\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x69\x66\x20\x41\x4E\x59\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x61\x6D\x6F\x75\x6E\x74\x29\x0D\x0A\x09\x69\x66\x20\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x7E\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x22\x29\x2C\x20\x33\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x61\x74\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x65\x72\x65\x20\x73\x6F\x20\x74\x68\x61\x74\x20\x77\x65\x20\x63\x61\x6E\x20\x70\x72\x6F\x64\x75\x63\x65\x0D\x0A\x09\x2D\x2D\x20\x61\x20\x70\x72\x6F\x70\x65\x72\x20\x65\x72\x72\x6F\x72\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6E\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x69\x29\x29\x2C\x20\x33\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x6E\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x09\x69\x66\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x3D\x20\x30\x20\x6F\x72\x20\x61\x6D\x6F\x75\x6E\x74\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x7B\x7D\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x6E\x20\x61\x72\x72\x61\x79\x20\x74\x6F\x20\x63\x6F\x6E\x74\x61\x69\x6E\x20\x6F\x75\x72\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x4B\x65\x65\x70\x20\x61\x20\x63\x6F\x75\x6E\x74\x20\x6F\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x6A\x75\x73\x74\x20\x63\x68\x65\x63\x6B\x69\x6E\x67\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x09\x2D\x2D\x20\x76\x61\x6C\x75\x65\x73\x20\x6C\x65\x6E\x67\x74\x68\x20\x77\x6F\x75\x6C\x64\x6E\x27\x74\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x66\x6F\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x6E\x69\x6C\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x64\x6F\x6E\x65\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x61\x6C\x6C\x20\x61\x72\x65\x20\x64\x6F\x6E\x65\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x64\x6F\x6E\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x61\x6D\x6F\x75\x6E\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x5B\x69\x5D\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x5B\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x5D\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x3E\x3D\x20\x28\x61\x6D\x6F\x75\x6E\x74\x20\x6F\x72\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x64\x6F\x6E\x65\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x63\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x63\x61\x6E\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x73\x69\x64\x65\x20\x60\x70\x72\x6F\x6D\x69\x73\x65\x73\x60\x20\x61\x72\x65\x20\x61\x6C\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x73\x69\x6E\x63\x65\x20\x77\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x61\x62\x6F\x76\x65\x2E\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x61\x6D\x6F\x75\x6E\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x2D\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x3C\x20\x61\x6D\x6F\x75\x6E\x74\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x64\x6F\x6E\x65\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x64\x6F\x6E\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x3A\x0D\x0A\x09\x2A\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x66\x74\x65\x72\x20\x61\x6C\x6C\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x2E\x0D\x0A\x09\x2A\x20\x69\x73\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x69\x66\x20\x2A\x61\x6E\x79\x2A\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x6A\x65\x63\x74\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x4F\x6E\x6C\x79\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x65\x61\x63\x68\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x72\x65\x73\x65\x6E\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x69\x6E\x67\x20\x61\x72\x72\x61\x79\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x41\x66\x74\x65\x72\x20\x61\x6E\x79\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x61\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x61\x72\x65\x20\x73\x74\x69\x6C\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x54\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x46\x6F\x6C\x64\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x6E\x74\x6F\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x76\x61\x6C\x75\x65\x2E\x20\x54\x68\x65\x20\x61\x72\x72\x61\x79\x20\x69\x73\x20\x74\x72\x61\x76\x65\x72\x73\x65\x64\x20\x73\x65\x71\x75\x65\x6E\x74\x69\x61\x6C\x6C\x79\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x72\x65\x64\x75\x63\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x20\x76\x61\x6C\x75\x65\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x2E\x20\x45\x61\x63\x68\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x72\x65\x63\x65\x69\x76\x65\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x2C\x20\x61\x6E\x64\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x63\x65\x69\x76\x65\x73\x20\x79\x6F\x75\x72\x20\x64\x65\x66\x69\x6E\x65\x64\x20\x69\x6E\x69\x74\x69\x61\x6C\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x66\x6F\x6C\x64\x69\x6E\x67\x20\x77\x69\x6C\x6C\x20\x73\x74\x6F\x70\x20\x61\x74\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x2E\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x73\x6B\x65\x74\x20\x3D\x20\x7B\x22\x62\x6C\x75\x65\x62\x65\x72\x72\x79\x22\x2C\x20\x22\x6D\x65\x6C\x6F\x6E\x22\x2C\x20\x22\x70\x65\x61\x72\x22\x2C\x20\x22\x6D\x65\x6C\x6F\x6E\x22\x7D\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x62\x61\x73\x6B\x65\x74\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x63\x6F\x73\x74\x2C\x20\x66\x72\x75\x69\x74\x29\x0D\x0A\x09\x09\x69\x66\x20\x66\x72\x75\x69\x74\x20\x3D\x3D\x20\x22\x62\x6C\x75\x65\x62\x65\x72\x72\x79\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x6F\x73\x74\x20\x2D\x2D\x20\x62\x6C\x75\x65\x62\x65\x72\x72\x69\x65\x73\x20\x61\x72\x65\x20\x66\x72\x65\x65\x21\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x63\x61\x6C\x6C\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x72\x75\x69\x74\x20\x70\x72\x69\x63\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x65\x74\x63\x68\x50\x72\x69\x63\x65\x28\x66\x72\x75\x69\x74\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x66\x72\x75\x69\x74\x43\x6F\x73\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x6F\x73\x74\x20\x2B\x20\x66\x72\x75\x69\x74\x43\x6F\x73\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x76\x33\x2E\x31\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x73\x74\x20\x7B\x54\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x72\x65\x64\x75\x63\x65\x72\x20\x28\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x3A\x20\x55\x2C\x20\x76\x61\x6C\x75\x65\x3A\x20\x54\x2C\x20\x69\x6E\x64\x65\x78\x3A\x20\x6E\x75\x6D\x62\x65\x72\x29\x20\x2D\x3E\x20\x55\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x55\x3E\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x20\x55\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x6C\x69\x73\x74\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x6C\x69\x73\x74\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x31\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x3A\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x3A\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x6C\x69\x73\x74\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x45\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x29\x0D\x0A\x09\x09\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x20\x3D\x20\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x72\x65\x76\x69\x6F\x75\x73\x56\x61\x6C\x75\x65\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x70\x72\x65\x76\x69\x6F\x75\x73\x56\x61\x6C\x75\x65\x52\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x45\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x60\x63\x6F\x75\x6E\x74\x60\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x69\x6E\x70\x75\x74\x20\x61\x72\x72\x61\x79\x2E\x20\x54\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x72\x72\x61\x79\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6F\x72\x64\x65\x72\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x69\x6E\x2E\x20\x57\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x61\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x63\x6F\x75\x6E\x74\x60\x20\x30\x20\x72\x65\x73\x75\x6C\x74\x73\x20\x69\x6E\x20\x61\x6E\x20\x65\x6D\x70\x74\x79\x20\x61\x72\x72\x61\x79\x2E\x20\x54\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x61\x6E\x74\x20\x61\x72\x72\x61\x79\x20\x77\x69\x6C\x6C\x20\x6E\x65\x76\x65\x72\x20\x68\x61\x76\x65\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x60\x63\x6F\x75\x6E\x74\x60\x20\x65\x6C\x65\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x32\x29\x20\x2D\x2D\x20\x4F\x6E\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x66\x69\x72\x73\x74\x20\x32\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6F\x75\x6E\x74\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x54\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x61\x6D\x6F\x75\x6E\x74\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x61\x6D\x6F\x75\x6E\x74\x29\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x3A\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x61\x6D\x6F\x75\x6E\x74\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x2A\x61\x6E\x79\x2A\x20\x6F\x66\x20\x74\x68\x65\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2E\x20\x49\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x6C\x79\x20\x69\x66\x20\x2A\x61\x6C\x6C\x2A\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x6A\x65\x63\x74\x2E\x20\x41\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x6F\x6E\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x61\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x73\x6F\x6C\x76\x65\x73\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x65\x73\x73\x65\x6E\x74\x69\x61\x6C\x6C\x79\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x5D\x5D\x20\x77\x69\x74\x68\x20\x60\x31\x60\x20\x63\x6F\x75\x6E\x74\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x77\x69\x74\x68\x20\x6F\x6E\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x2D\x2D\x20\x52\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x66\x69\x72\x73\x74\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x28\x6F\x6E\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x69\x66\x20\x61\x6C\x6C\x20\x33\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x73\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x69\x6E\x2D\x70\x6C\x61\x63\x65\x20\x53\x74\x61\x74\x75\x73\x65\x73\x20\x77\x68\x65\x6E\x20\x61\x6C\x6C\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x68\x61\x76\x65\x20\x73\x65\x74\x74\x6C\x65\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x65\x71\x75\x69\x76\x61\x6C\x65\x6E\x74\x20\x74\x6F\x20\x6D\x61\x70\x70\x69\x6E\x67\x20\x60\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x53\x74\x61\x74\x75\x73\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x69\x66\x20\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x7E\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x22\x29\x2C\x20\x32\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x61\x74\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x65\x72\x65\x20\x73\x6F\x20\x74\x68\x61\x74\x20\x77\x65\x20\x63\x61\x6E\x20\x70\x72\x6F\x64\x75\x63\x65\x0D\x0A\x09\x2D\x2D\x20\x61\x20\x70\x72\x6F\x70\x65\x72\x20\x65\x72\x72\x6F\x72\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6E\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x69\x29\x29\x2C\x20\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x6E\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x09\x69\x66\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x7B\x7D\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x6E\x20\x61\x72\x72\x61\x79\x20\x74\x6F\x20\x63\x6F\x6E\x74\x61\x69\x6E\x20\x6F\x75\x72\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x61\x74\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x4B\x65\x65\x70\x20\x61\x20\x63\x6F\x75\x6E\x74\x20\x6F\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x6A\x75\x73\x74\x20\x63\x68\x65\x63\x6B\x69\x6E\x67\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x09\x2D\x2D\x20\x76\x61\x6C\x75\x65\x73\x20\x6C\x65\x6E\x67\x74\x68\x20\x77\x6F\x75\x6C\x64\x6E\x27\x74\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x66\x6F\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x6E\x69\x6C\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x61\x6C\x6C\x20\x61\x72\x65\x20\x64\x6F\x6E\x65\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x61\x74\x65\x73\x5B\x69\x5D\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x3E\x3D\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x66\x61\x74\x65\x73\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x63\x61\x6E\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x73\x69\x64\x65\x20\x60\x70\x72\x6F\x6D\x69\x73\x65\x73\x60\x20\x61\x72\x65\x20\x61\x6C\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x73\x69\x6E\x63\x65\x20\x77\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x61\x62\x6F\x76\x65\x2E\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x61\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x73\x65\x74\x74\x6C\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x73\x65\x74\x74\x6C\x65\x73\x20\x77\x69\x74\x68\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x2C\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x60\x72\x61\x63\x65\x60\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x79\x6F\x75\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x74\x6F\x6C\x65\x72\x61\x74\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x2C\x20\x61\x6E\x64\x20\x6F\x6E\x6C\x79\x20\x63\x61\x72\x65\x20\x61\x62\x6F\x75\x74\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x5D\x28\x23\x61\x6E\x79\x29\x20\x6F\x72\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x5D\x28\x23\x73\x6F\x6D\x65\x29\x20\x69\x6E\x73\x74\x65\x61\x64\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x41\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6F\x6E\x27\x74\x20\x77\x69\x6E\x20\x74\x68\x65\x20\x72\x61\x63\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x2D\x2D\x20\x4F\x6E\x6C\x79\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x31\x73\x74\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x3A\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x69\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x72\x65\x6A\x65\x63\x74\x29\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x2C\x20\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x72\x65\x6A\x65\x63\x74\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x49\x74\x65\x72\x61\x74\x65\x73\x20\x73\x65\x72\x69\x61\x6C\x6C\x79\x20\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x2C\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x6F\x6E\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x63\x6F\x6E\x74\x69\x6E\x75\x69\x6E\x67\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x65\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x74\x68\x61\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x6D\x6F\x76\x69\x6E\x67\x20\x6F\x6E\x20\x74\x6F\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x69\x74\x65\x6D\x0D\x0A\x09\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x72\x61\x6E\x20\x69\x6E\x20\x6F\x72\x64\x65\x72\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x61\x6C\x6C\x20\x61\x74\x20\x6F\x6E\x63\x65\x2E\x0D\x0A\x0D\x0A\x09\x42\x75\x74\x20\x62\x65\x63\x61\x75\x73\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x65\x61\x67\x65\x72\x2C\x20\x62\x79\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x74\x68\x65\x79\x20\x61\x72\x65\x20\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x79\x27\x72\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x75\x6E\x6E\x69\x6E\x67\x2E\x20\x54\x68\x75\x73\x2C\x20\x77\x65\x20\x6E\x65\x65\x64\x20\x61\x20\x77\x61\x79\x20\x74\x6F\x20\x64\x65\x66\x65\x72\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x75\x6E\x74\x69\x6C\x20\x61\x20\x6C\x61\x74\x65\x72\x20\x74\x69\x6D\x65\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x65\x78\x69\x73\x74\x73\x20\x61\x73\x20\x61\x20\x77\x61\x79\x20\x66\x6F\x72\x20\x75\x73\x20\x74\x6F\x20\x6F\x70\x65\x72\x61\x74\x65\x20\x6F\x6E\x20\x6F\x75\x72\x20\x64\x61\x74\x61\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x61\x20\x6E\x65\x77\x20\x63\x6C\x6F\x73\x75\x72\x65\x20\x66\x6F\x72\x20\x65\x61\x63\x68\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x77\x6F\x75\x6C\x64\x20\x70\x72\x65\x66\x65\x72\x2C\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x70\x61\x73\x73\x20\x69\x6E\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x2C\x20\x61\x6E\x64\x20\x69\x6E\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x2C\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x69\x74\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x22\x66\x6F\x6F\x22\x2C\x0D\x0A\x09\x09\x22\x62\x61\x72\x22\x2C\x0D\x0A\x09\x09\x22\x62\x61\x7A\x22\x2C\x0D\x0A\x09\x09\x22\x71\x75\x78\x22\x0D\x0A\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x70\x72\x69\x6E\x74\x28\x28\x22\x25\x64\x29\x20\x47\x6F\x74\x20\x25\x73\x21\x22\x29\x3A\x66\x6F\x72\x6D\x61\x74\x28\x69\x6E\x64\x65\x78\x2C\x20\x76\x61\x6C\x75\x65\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x5B\x5B\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x31\x29\x20\x47\x6F\x74\x20\x66\x6F\x6F\x21\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x32\x29\x20\x47\x6F\x74\x20\x62\x61\x72\x21\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x33\x29\x20\x47\x6F\x74\x20\x62\x61\x7A\x21\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x34\x29\x20\x47\x6F\x74\x20\x71\x75\x78\x21\x0D\x0A\x09\x5D\x5D\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x61\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x61\x6C\x73\x6F\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x63\x6F\x6E\x74\x61\x69\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x65\x6E\x20\x77\x65\x20\x67\x65\x74\x20\x74\x6F\x20\x74\x68\x61\x74\x20\x70\x6F\x69\x6E\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x2C\x20\x77\x65\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x68\x65\x6E\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x77\x69\x74\x68\x20\x74\x68\x61\x74\x20\x76\x61\x6C\x75\x65\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x28\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x6C\x6C\x20\x6E\x65\x76\x65\x72\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x65\x76\x65\x6E\x20\x6F\x6E\x63\x65\x29\x2E\x20\x49\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x77\x69\x74\x68\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x60\x29\x2E\x20\x49\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x73\x20\x53\x74\x61\x72\x74\x65\x64\x20\x61\x74\x20\x66\x69\x72\x73\x74\x2C\x20\x62\x75\x74\x20\x6C\x61\x74\x65\x72\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x61\x74\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x63\x6F\x6E\x74\x69\x6E\x75\x65\x20\x6F\x6E\x63\x65\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x73\x20\x74\x68\x61\x74\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6E\x74\x61\x69\x6E\x69\x6E\x67\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2F\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x66\x6F\x72\x20\x65\x61\x63\x68\x20\x69\x74\x65\x6D\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x6F\x72\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x66\x6F\x72\x20\x61\x6E\x79\x20\x72\x65\x61\x73\x6F\x6E\x2C\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x61\x72\x65\x20\x74\x72\x75\x65\x3A\x0D\x0A\x09\x2D\x20\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x63\x6F\x6E\x74\x69\x6E\x75\x65\x2E\x0D\x0A\x09\x2D\x20\x41\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x77\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x09\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x6C\x79\x20\x61\x63\x74\x69\x76\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x69\x74\x20\x68\x61\x73\x6E\x27\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x79\x65\x74\x2E\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x33\x2E\x30\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x73\x74\x20\x7B\x54\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x28\x76\x61\x6C\x75\x65\x3A\x20\x54\x2C\x20\x69\x6E\x64\x65\x78\x3A\x20\x6E\x75\x6D\x62\x65\x72\x29\x20\x2D\x3E\x20\x55\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x55\x3E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x55\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x6C\x69\x73\x74\x2C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x6C\x69\x73\x74\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x22\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x70\x72\x65\x64\x69\x63\x61\x74\x65\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x54\x6F\x43\x61\x6E\x63\x65\x6C\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x54\x6F\x43\x61\x6E\x63\x65\x6C\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x6E\x64\x20\x6C\x6F\x6F\x6B\x20\x66\x6F\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x49\x66\x20\x77\x65\x20\x66\x69\x6E\x64\x20\x73\x6F\x6D\x65\x2C\x20\x77\x65\x20\x6D\x75\x73\x74\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x6F\x75\x72\x20\x61\x6E\x64\x54\x68\x65\x6E\x20\x63\x61\x6C\x6C\x73\x20\x6E\x6F\x77\x2C\x20\x73\x6F\x20\x74\x68\x61\x74\x20\x74\x68\x6F\x73\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x68\x61\x76\x65\x20\x61\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x0D\x0A\x09\x09\x2D\x2D\x20\x66\x72\x6F\x6D\x20\x75\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x2E\x20\x49\x66\x20\x77\x65\x20\x64\x6F\x6E\x27\x74\x20\x64\x6F\x20\x74\x68\x69\x73\x2C\x20\x74\x68\x6F\x73\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x6D\x69\x67\x68\x74\x20\x67\x65\x74\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x62\x79\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x65\x6C\x73\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x62\x65\x66\x6F\x72\x65\x20\x77\x65\x20\x67\x65\x74\x20\x74\x6F\x20\x74\x68\x65\x6D\x20\x69\x6E\x20\x74\x68\x65\x20\x73\x65\x72\x69\x65\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x27\x73\x20\x6E\x6F\x74\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x20\x74\x6F\x20\x74\x65\x6C\x6C\x20\x74\x68\x61\x74\x20\x77\x65\x20\x70\x6C\x61\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x69\x74\x0D\x0A\x09\x09\x2D\x2D\x20\x75\x6E\x6C\x65\x73\x73\x20\x77\x65\x20\x69\x6E\x64\x69\x63\x61\x74\x65\x20\x69\x74\x20\x68\x65\x72\x65\x2E\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x6E\x64\x65\x78\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6C\x69\x73\x74\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x22\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x77\x61\x73\x20\x70\x61\x72\x74\x20\x6F\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x61\x74\x20\x69\x6E\x64\x65\x78\x20\x25\x64\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x77\x61\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x62\x65\x67\x61\x6E\x2E\x5C\x6E\x5C\x6E\x54\x68\x61\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x69\x6E\x64\x65\x78\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x09\x09\x09\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x76\x61\x6C\x75\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x73\x65\x6C\x65\x63\x74\x28\x32\x2C\x20\x76\x61\x6C\x75\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x43\x68\x61\x69\x6E\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x6F\x6E\x65\x20\x73\x6F\x20\x77\x65\x20\x6F\x6E\x6C\x79\x20\x63\x61\x6E\x63\x65\x6C\x20\x6F\x75\x72\x73\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x75\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x76\x61\x6C\x75\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x2C\x20\x6F\x75\x72\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x09\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x6F\x75\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x6E\x64\x65\x78\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x0D\x0A\x09\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x76\x61\x6C\x75\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x70\x72\x65\x64\x69\x63\x61\x74\x65\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x2C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x75\x6C\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x72\x65\x73\x75\x6C\x74\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x72\x65\x73\x75\x6C\x74\x73\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x68\x65\x63\x6B\x73\x20\x77\x68\x65\x74\x68\x65\x72\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x6F\x62\x6A\x65\x63\x74\x20\x69\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x76\x69\x61\x20\x64\x75\x63\x6B\x20\x74\x79\x70\x69\x6E\x67\x2E\x20\x54\x68\x69\x73\x20\x6F\x6E\x6C\x79\x20\x63\x68\x65\x63\x6B\x73\x20\x69\x66\x20\x74\x68\x65\x20\x6F\x62\x6A\x65\x63\x74\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x68\x61\x73\x20\x61\x6E\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x6D\x65\x74\x68\x6F\x64\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6F\x62\x6A\x65\x63\x74\x20\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x2D\x2D\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x60\x6F\x62\x6A\x65\x63\x74\x60\x20\x69\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x09\x69\x66\x20\x74\x79\x70\x65\x28\x6F\x62\x6A\x65\x63\x74\x29\x20\x7E\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x20\x67\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x61\x6D\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x6C\x69\x62\x72\x61\x72\x79\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x69\x66\x20\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x4E\x6F\x20\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x62\x75\x74\x20\x77\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x73\x74\x69\x6C\x6C\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x74\x61\x62\x6C\x65\x73\x20\x77\x69\x74\x68\x20\x61\x6E\x64\x54\x68\x65\x6E\x20\x6D\x65\x74\x68\x6F\x64\x73\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x28\x6F\x62\x6A\x65\x63\x74\x2E\x61\x6E\x64\x54\x68\x65\x6E\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x0D\x0A\x09\x65\x6C\x73\x65\x69\x66\x0D\x0A\x09\x09\x74\x79\x70\x65\x28\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x0D\x0A\x09\x09\x61\x6E\x64\x20\x74\x79\x70\x65\x28\x72\x61\x77\x67\x65\x74\x28\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x22\x5F\x5F\x69\x6E\x64\x65\x78\x22\x29\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x0D\x0A\x09\x09\x61\x6E\x64\x20\x74\x79\x70\x65\x28\x72\x61\x77\x67\x65\x74\x28\x72\x61\x77\x67\x65\x74\x28\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x22\x5F\x5F\x69\x6E\x64\x65\x78\x22\x29\x2C\x20\x22\x61\x6E\x64\x54\x68\x65\x6E\x22\x29\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x0D\x0A\x09\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x4D\x61\x79\x62\x65\x20\x74\x68\x69\x73\x20\x63\x61\x6D\x65\x20\x66\x72\x6F\x6D\x20\x61\x20\x64\x69\x66\x66\x65\x72\x65\x6E\x74\x20\x6F\x72\x20\x6F\x6C\x64\x65\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x57\x72\x61\x70\x73\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x79\x69\x65\x6C\x64\x73\x20\x69\x6E\x74\x6F\x20\x6F\x6E\x65\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x41\x6E\x79\x20\x65\x72\x72\x6F\x72\x73\x20\x74\x68\x61\x74\x20\x6F\x63\x63\x75\x72\x20\x77\x68\x69\x6C\x65\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x74\x75\x72\x6E\x65\x64\x20\x69\x6E\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x60\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x5D\x28\x23\x74\x72\x79\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x61\x73\x20\x61\x20\x63\x61\x6C\x6C\x61\x62\x6C\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x62\x65\x69\x6E\x67\x20\x69\x6E\x76\x6F\x6B\x65\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x6C\x65\x65\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x77\x61\x69\x74\x29\x0D\x0A\x0D\x0A\x09\x73\x6C\x65\x65\x70\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x70\x72\x69\x6E\x74\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x69\x73\x50\x6C\x61\x79\x65\x72\x49\x6E\x47\x72\x6F\x75\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x6C\x61\x79\x65\x72\x2C\x20\x67\x72\x6F\x75\x70\x49\x64\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x6C\x61\x79\x65\x72\x3A\x49\x73\x49\x6E\x47\x72\x6F\x75\x70\x28\x67\x72\x6F\x75\x70\x49\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x72\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x61\x66\x74\x65\x72\x20\x60\x73\x65\x63\x6F\x6E\x64\x73\x60\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x68\x61\x76\x65\x20\x70\x61\x73\x73\x65\x64\x2E\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x61\x63\x74\x75\x61\x6C\x20\x61\x6D\x6F\x75\x6E\x74\x20\x6F\x66\x20\x74\x69\x6D\x65\x20\x74\x68\x61\x74\x20\x77\x61\x73\x20\x77\x61\x69\x74\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x2A\x2A\x6E\x6F\x74\x2A\x2A\x20\x61\x20\x77\x72\x61\x70\x70\x65\x72\x20\x61\x72\x6F\x75\x6E\x64\x20\x60\x77\x61\x69\x74\x60\x2E\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x60\x20\x75\x73\x65\x73\x20\x61\x20\x63\x75\x73\x74\x6F\x6D\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x20\x77\x68\x69\x63\x68\x20\x70\x72\x6F\x76\x69\x64\x65\x73\x20\x6D\x6F\x72\x65\x20\x61\x63\x63\x75\x72\x61\x74\x65\x20\x74\x69\x6D\x69\x6E\x67\x2E\x20\x41\x73\x20\x61\x6E\x20\x6F\x70\x74\x69\x6D\x69\x7A\x61\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x69\x6E\x67\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x73\x74\x61\x6E\x74\x6C\x79\x20\x72\x65\x6D\x6F\x76\x65\x73\x20\x74\x68\x65\x20\x74\x61\x73\x6B\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x50\x61\x73\x73\x69\x6E\x67\x20\x60\x4E\x61\x4E\x60\x2C\x20\x69\x6E\x66\x69\x6E\x69\x74\x79\x2C\x20\x6F\x72\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x6C\x65\x73\x73\x20\x74\x68\x61\x6E\x20\x31\x2F\x36\x30\x20\x69\x73\x20\x65\x71\x75\x69\x76\x61\x6C\x65\x6E\x74\x20\x74\x6F\x20\x70\x61\x73\x73\x69\x6E\x67\x20\x31\x2F\x36\x30\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x35\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x70\x72\x69\x6E\x74\x2C\x20\x22\x54\x68\x69\x73\x20\x70\x72\x69\x6E\x74\x73\x20\x61\x66\x74\x65\x72\x20\x35\x20\x73\x65\x63\x6F\x6E\x64\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x64\x65\x6C\x61\x79\x0D\x0A\x09\x40\x77\x69\x74\x68\x69\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x6E\x75\x6D\x62\x65\x72\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x64\x6F\x0D\x0A\x09\x2D\x2D\x20\x75\x73\x65\x73\x20\x61\x20\x73\x6F\x72\x74\x65\x64\x20\x64\x6F\x75\x62\x6C\x79\x20\x6C\x69\x6E\x6B\x65\x64\x20\x6C\x69\x73\x74\x20\x28\x71\x75\x65\x75\x65\x29\x20\x74\x6F\x20\x61\x63\x68\x69\x65\x76\x65\x20\x4F\x28\x31\x29\x20\x72\x65\x6D\x6F\x76\x65\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x61\x6E\x64\x20\x4F\x28\x6E\x29\x20\x66\x6F\x72\x20\x69\x6E\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x74\x68\x65\x20\x69\x6E\x69\x74\x69\x61\x6C\x20\x6E\x6F\x64\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x6E\x6B\x65\x64\x20\x6C\x69\x73\x74\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x31\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x2C\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x2E\x22\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x49\x66\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x69\x73\x20\x2D\x49\x4E\x46\x2C\x20\x49\x4E\x46\x2C\x20\x4E\x61\x4E\x2C\x20\x6F\x72\x20\x6C\x65\x73\x73\x20\x74\x68\x61\x6E\x20\x31\x20\x2F\x20\x36\x30\x2C\x20\x61\x73\x73\x75\x6D\x65\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x69\x73\x20\x31\x20\x2F\x20\x36\x30\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x6D\x69\x72\x72\x6F\x72\x73\x20\x74\x68\x65\x20\x62\x65\x68\x61\x76\x69\x6F\x72\x20\x6F\x66\x20\x77\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x28\x73\x65\x63\x6F\x6E\x64\x73\x20\x3E\x3D\x20\x31\x20\x2F\x20\x36\x30\x29\x20\x6F\x72\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x3D\x3D\x20\x6D\x61\x74\x68\x2E\x68\x75\x67\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x73\x20\x3D\x20\x31\x20\x2F\x20\x36\x30\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x64\x54\x69\x6D\x65\x20\x3D\x20\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x20\x2B\x20\x73\x65\x63\x6F\x6E\x64\x73\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x6F\x64\x65\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x20\x3D\x20\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x2C\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x54\x69\x6D\x65\x20\x3D\x20\x65\x6E\x64\x54\x69\x6D\x65\x2C\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x20\x2D\x2D\x20\x66\x69\x72\x73\x74\x20\x69\x73\x20\x6E\x69\x6C\x20\x77\x68\x65\x6E\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x68\x72\x65\x61\x64\x53\x74\x61\x72\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x77\x68\x69\x6C\x65\x20\x66\x69\x72\x73\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x66\x69\x72\x73\x74\x2E\x65\x6E\x64\x54\x69\x6D\x65\x20\x3C\x20\x74\x68\x72\x65\x61\x64\x53\x74\x61\x72\x74\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x3D\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x09\x69\x66\x20\x66\x69\x72\x73\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x75\x72\x72\x65\x6E\x74\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x28\x29\x20\x2D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x20\x2D\x2D\x20\x66\x69\x72\x73\x74\x20\x69\x73\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x66\x69\x72\x73\x74\x2E\x65\x6E\x64\x54\x69\x6D\x65\x20\x3C\x20\x65\x6E\x64\x54\x69\x6D\x65\x20\x74\x68\x65\x6E\x20\x2D\x2D\x20\x69\x66\x20\x60\x6E\x6F\x64\x65\x60\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x70\x6C\x61\x63\x65\x64\x20\x61\x66\x74\x65\x72\x20\x60\x66\x69\x72\x73\x74\x60\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x77\x65\x20\x77\x69\x6C\x6C\x20\x69\x6E\x73\x65\x72\x74\x20\x60\x6E\x6F\x64\x65\x60\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x60\x63\x75\x72\x72\x65\x6E\x74\x60\x20\x61\x6E\x64\x20\x60\x6E\x65\x78\x74\x60\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x28\x69\x2E\x65\x2E\x20\x61\x66\x74\x65\x72\x20\x60\x63\x75\x72\x72\x65\x6E\x74\x60\x20\x69\x66\x20\x60\x6E\x65\x78\x74\x60\x20\x69\x73\x20\x6E\x69\x6C\x29\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x3D\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x78\x74\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x77\x68\x69\x6C\x65\x20\x6E\x65\x78\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x6E\x65\x78\x74\x2E\x65\x6E\x64\x54\x69\x6D\x65\x20\x3C\x20\x65\x6E\x64\x54\x69\x6D\x65\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x75\x72\x72\x65\x6E\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x60\x63\x75\x72\x72\x65\x6E\x74\x60\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x2C\x20\x62\x75\x74\x20\x60\x6E\x65\x78\x74\x60\x20\x63\x6F\x75\x6C\x64\x20\x62\x65\x20\x60\x6E\x69\x6C\x60\x20\x28\x69\x2E\x65\x2E\x20\x6C\x61\x73\x74\x20\x69\x74\x65\x6D\x20\x69\x6E\x20\x6C\x69\x73\x74\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x09\x6E\x6F\x64\x65\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x6E\x65\x78\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x6F\x64\x65\x2E\x6E\x65\x78\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x73\x65\x74\x20\x60\x6E\x6F\x64\x65\x60\x20\x74\x6F\x20\x60\x66\x69\x72\x73\x74\x60\x0D\x0A\x09\x09\x09\x09\x09\x6E\x6F\x64\x65\x2E\x6E\x65\x78\x74\x20\x3D\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x72\x65\x6D\x6F\x76\x65\x20\x6E\x6F\x64\x65\x20\x66\x72\x6F\x6D\x20\x71\x75\x65\x75\x65\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x78\x74\x20\x3D\x20\x6E\x6F\x64\x65\x2E\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x66\x69\x72\x73\x74\x20\x3D\x3D\x20\x6E\x6F\x64\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x6E\x65\x78\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x20\x2D\x2D\x20\x69\x66\x20\x60\x6E\x6F\x64\x65\x60\x20\x69\x73\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x61\x6E\x64\x20\x6C\x61\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x65\x6C\x73\x65\x20\x2D\x2D\x20\x69\x66\x20\x60\x6E\x6F\x64\x65\x60\x20\x69\x73\x20\x60\x66\x69\x72\x73\x74\x60\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x74\x68\x65\x20\x6C\x61\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x6F\x64\x65\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x73\x69\x6E\x63\x65\x20\x60\x6E\x6F\x64\x65\x60\x20\x69\x73\x20\x6E\x6F\x74\x20\x60\x66\x69\x72\x73\x74\x60\x2C\x20\x74\x68\x65\x6E\x20\x77\x65\x20\x6B\x6E\x6F\x77\x20\x60\x70\x72\x65\x76\x69\x6F\x75\x73\x60\x20\x69\x73\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x70\x72\x65\x76\x69\x6F\x75\x73\x2E\x6E\x65\x78\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x6E\x65\x78\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x74\x68\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x60\x73\x65\x63\x6F\x6E\x64\x73\x60\x20\x73\x65\x63\x6F\x6E\x64\x73\x2C\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x69\x66\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x20\x74\x69\x6D\x65\x20\x65\x78\x63\x65\x65\x64\x73\x20\x60\x73\x65\x63\x6F\x6E\x64\x73\x60\x2E\x20\x54\x68\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x6F\x75\x74\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x6A\x65\x63\x74\x73\x20\x77\x69\x74\x68\x20\x60\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x60\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x2E\x20\x49\x66\x20\x61\x20\x60\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x60\x20\x69\x73\x20\x6E\x6F\x74\x20\x67\x69\x76\x65\x6E\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x29\x60\x2E\x20\x54\x68\x69\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x77\x69\x74\x68\x20\x5B\x5B\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x5D\x5D\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x67\x65\x74\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x29\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x35\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x67\x6F\x74\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x61\x6E\x64\x20\x69\x74\x20\x6F\x6E\x6C\x79\x20\x74\x6F\x6F\x6B\x20\x61\x74\x20\x6D\x61\x78\x20\x35\x20\x73\x65\x63\x6F\x6E\x64\x73\x0D\x0A\x09\x65\x6E\x64\x29\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x45\x69\x74\x68\x65\x72\x20\x67\x65\x74\x74\x69\x6E\x67\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x66\x61\x69\x6C\x65\x64\x20\x6F\x72\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x77\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x65\x2C\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x4F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x74\x69\x6D\x65\x64\x20\x6F\x75\x74\x21\x22\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x4F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x53\x75\x67\x61\x72\x20\x66\x6F\x72\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x61\x6E\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x20\x6B\x69\x6E\x64\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x20\x7D\x29\x0D\x0A\x09\x09\x09\x09\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x7D\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x69\x66\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x6F\x75\x74\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x73\x65\x63\x6F\x6E\x64\x73\x2C\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x2C\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x54\x69\x6D\x65\x64\x20\x6F\x75\x74\x22\x2C\x0D\x0A\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x09\x22\x54\x69\x6D\x65\x6F\x75\x74\x20\x6F\x66\x20\x25\x64\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x2E\x5C\x6E\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x29\x20\x63\x61\x6C\x6C\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x73\x2C\x0D\x0A\x09\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x0D\x0A\x09\x09\x09\x09\x29\x2C\x0D\x0A\x09\x09\x09\x7D\x29\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2C\x0D\x0A\x09\x7D\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x73\x74\x61\x74\x75\x73\x2E\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x53\x74\x61\x74\x75\x73\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x63\x65\x69\x76\x65\x73\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x61\x72\x65\x20\x69\x6E\x76\x6F\x6B\x65\x64\x20\x64\x65\x70\x65\x6E\x64\x69\x6E\x67\x20\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x73\x75\x6C\x74\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x43\x72\x65\x61\x74\x65\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x66\x6F\x6C\x6C\x6F\x77\x20\x74\x68\x69\x73\x20\x70\x61\x72\x74\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x68\x61\x69\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x4F\x75\x72\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x6A\x75\x73\x74\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x6E\x74\x6F\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x6C\x65\x74\x73\x20\x73\x75\x63\x63\x65\x73\x73\x20\x61\x6E\x64\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x63\x61\x73\x63\x61\x64\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x6C\x79\x21\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x0D\x0A\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x69\x66\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x0D\x0A\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x49\x66\x20\x77\x65\x20\x68\x61\x76\x65\x6E\x27\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x79\x65\x74\x2C\x20\x70\x75\x74\x20\x6F\x75\x72\x73\x65\x6C\x76\x65\x73\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x71\x75\x65\x75\x65\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x2C\x20\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x21\x20\x54\x72\x69\x67\x67\x65\x72\x20\x73\x75\x63\x63\x65\x73\x73\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x2E\x0D\x0A\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x64\x69\x65\x64\x20\x61\x20\x74\x65\x72\x72\x69\x62\x6C\x65\x20\x64\x65\x61\x74\x68\x21\x20\x54\x72\x69\x67\x67\x65\x72\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x2E\x0D\x0A\x09\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x57\x65\x20\x64\x6F\x6E\x27\x74\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x73\x75\x63\x63\x65\x73\x73\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x6F\x72\x20\x74\x68\x65\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x77\x65\x20\x6A\x75\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x6F\x75\x74\x72\x69\x67\x68\x74\x2E\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x0D\x0A\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x0D\x0A\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x5C\x6E\x5C\x6E\x22\x20\x2E\x2E\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x73\x65\x6C\x66\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x68\x61\x69\x6E\x73\x20\x6F\x6E\x74\x6F\x20\x61\x6E\x20\x65\x78\x69\x73\x74\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x57\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x65\x76\x65\x72\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x2E\x20\x53\x6F\x6D\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x61\x72\x65\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x65\x64\x20\x62\x79\x20\x5B\x5B\x45\x72\x72\x6F\x72\x5D\x5D\x20\x6F\x62\x6A\x65\x63\x74\x73\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x74\x72\x65\x61\x74\x20\x69\x74\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x6F\x72\x20\x64\x65\x62\x75\x67\x67\x69\x6E\x67\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x60\x74\x6F\x73\x74\x72\x69\x6E\x67\x60\x20\x6F\x6E\x20\x69\x74\x20\x66\x69\x72\x73\x74\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x75\x63\x63\x65\x73\x73\x20\x6F\x72\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x61\x6E\x64\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x6E\x74\x6F\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x3F\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x68\x6F\x72\x74\x68\x61\x6E\x64\x20\x66\x6F\x72\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x6E\x69\x6C\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x60\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x74\x68\x65\x20\x60\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x60\x20\x77\x6F\x72\x6B\x65\x64\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x69\x6E\x67\x20\x61\x6E\x20\x61\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x57\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x65\x76\x65\x72\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x2E\x20\x53\x6F\x6D\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x61\x72\x65\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x65\x64\x20\x62\x79\x20\x5B\x5B\x45\x72\x72\x6F\x72\x5D\x5D\x20\x6F\x62\x6A\x65\x63\x74\x73\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x74\x72\x65\x61\x74\x20\x69\x74\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x6F\x72\x20\x64\x65\x62\x75\x67\x67\x69\x6E\x67\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x60\x74\x6F\x73\x74\x72\x69\x6E\x67\x60\x20\x6F\x6E\x20\x69\x74\x20\x66\x69\x72\x73\x74\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x63\x61\x74\x63\x68\x28\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x74\x63\x68\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x6E\x69\x6C\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x64\x54\x68\x65\x6E\x5D\x28\x23\x61\x6E\x64\x54\x68\x65\x6E\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x61\x73\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2E\x20\x49\x6E\x20\x6F\x74\x68\x65\x72\x20\x77\x6F\x72\x64\x73\x2C\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x69\x6E\x73\x65\x72\x74\x20\x61\x20\x60\x3A\x74\x61\x70\x60\x20\x69\x6E\x74\x6F\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x61\x66\x66\x65\x63\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x61\x74\x20\x64\x6F\x77\x6E\x73\x74\x72\x65\x61\x6D\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x63\x65\x69\x76\x65\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x67\x65\x74\x54\x68\x65\x56\x61\x6C\x75\x65\x28\x29\x0D\x0A\x09\x09\x3A\x74\x61\x70\x28\x70\x72\x69\x6E\x74\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x74\x68\x65\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x47\x6F\x74\x22\x2C\x20\x74\x68\x65\x56\x61\x6C\x75\x65\x2C\x20\x22\x65\x76\x65\x6E\x20\x74\x68\x6F\x75\x67\x68\x20\x70\x72\x69\x6E\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x6E\x69\x6C\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x79\x6F\x75\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x74\x61\x70\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x69\x74\x73\x20\x76\x61\x6C\x75\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x20\x62\x75\x74\x20\x60\x74\x61\x70\x60\x20\x77\x69\x6C\x6C\x20\x73\x74\x69\x6C\x6C\x20\x77\x61\x69\x74\x20\x75\x6E\x74\x69\x6C\x20\x69\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x62\x65\x66\x6F\x72\x65\x20\x70\x61\x73\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x6F\x72\x69\x67\x69\x6E\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x72\x6F\x75\x67\x68\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x74\x61\x70\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x74\x61\x70\x28\x74\x61\x70\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x74\x61\x70\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x74\x61\x70\x22\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x52\x65\x74\x75\x72\x6E\x20\x3D\x20\x74\x61\x70\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x52\x65\x74\x75\x72\x6E\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x52\x65\x74\x75\x72\x6E\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x6E\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x65\x66\x69\x6E\x65\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x20\x54\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x73\x6F\x6D\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x2C\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x6F\x6D\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x41\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x60\x63\x61\x6C\x6C\x62\x61\x63\x6B\x60\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x22\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x6E\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x64\x69\x73\x63\x61\x72\x64\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x69\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x65\x61\x67\x65\x72\x2C\x20\x73\x6F\x20\x69\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x60\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x67\x69\x6E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x62\x65\x66\x6F\x72\x65\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x60\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x68\x61\x69\x6E\x2E\x20\x4C\x69\x6B\x65\x77\x69\x73\x65\x2C\x20\x69\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x66\x72\x6F\x6D\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x5D\x5D\x20\x69\x6E\x74\x6F\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x60\x2C\x20\x69\x74\x27\x73\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x20\x74\x68\x61\x74\x20\x74\x68\x69\x73\x20\x77\x69\x6C\x6C\x20\x74\x72\x69\x67\x67\x65\x72\x20\x74\x68\x65\x20\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x77\x61\x72\x6E\x69\x6E\x67\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x69\x74\x27\x73\x20\x75\x73\x75\x61\x6C\x6C\x79\x20\x62\x65\x73\x74\x20\x70\x72\x61\x63\x74\x69\x63\x65\x20\x74\x6F\x20\x75\x73\x65\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x64\x54\x68\x65\x6E\x5D\x5D\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x20\x2D\x2D\x20\x56\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x61\x6E\x63\x65\x6C\x73\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2C\x20\x70\x72\x65\x76\x65\x6E\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6E\x67\x2E\x20\x44\x6F\x65\x73\x20\x6E\x6F\x74\x20\x64\x6F\x20\x61\x6E\x79\x74\x68\x69\x6E\x67\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x73\x65\x74\x74\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x43\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x73\x20\x77\x69\x6C\x6C\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x65\x20\x75\x70\x77\x61\x72\x64\x73\x20\x61\x6E\x64\x20\x64\x6F\x77\x6E\x77\x61\x72\x64\x73\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x77\x69\x6C\x6C\x20\x6F\x6E\x6C\x79\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x61\x6C\x6C\x20\x6F\x66\x20\x74\x68\x65\x69\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x61\x72\x65\x20\x61\x6C\x73\x6F\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x74\x6F\x20\x73\x61\x79\x20\x74\x68\x61\x74\x20\x69\x66\x20\x79\x6F\x75\x20\x63\x61\x6C\x6C\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x74\x77\x69\x63\x65\x20\x6F\x6E\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x2C\x20\x61\x6E\x64\x20\x79\x6F\x75\x20\x63\x61\x6E\x63\x65\x6C\x20\x6F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x68\x69\x6C\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x63\x61\x6E\x63\x65\x6C\x20\x74\x68\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x6F\x74\x68\x65\x72\x20\x63\x68\x69\x6C\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6C\x73\x6F\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x3A\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x28\x73\x65\x6C\x66\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x6F\x72\x20\x63\x68\x69\x6C\x64\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x55\x73\x65\x64\x20\x74\x6F\x20\x64\x65\x63\x72\x65\x61\x73\x65\x20\x74\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x62\x79\x20\x31\x2C\x20\x61\x6E\x64\x20\x69\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x6D\x6F\x72\x65\x2C\x0D\x0A\x09\x63\x61\x6E\x63\x65\x6C\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x63\x6F\x6E\x73\x75\x6D\x65\x72\x5D\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x6E\x65\x78\x74\x28\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x55\x73\x65\x64\x20\x74\x6F\x20\x73\x65\x74\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x6F\x72\x20\x69\x73\x0D\x0A\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x6F\x6E\x6C\x79\x4F\x6B\x29\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x79\x4F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x52\x65\x74\x75\x72\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x66\x66\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x69\x66\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x0D\x0A\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6F\x6E\x6C\x79\x4F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x28\x73\x65\x6C\x66\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x65\x74\x74\x6C\x65\x64\x2C\x20\x73\x6F\x20\x71\x75\x65\x75\x65\x20\x74\x68\x69\x73\x2E\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x73\x65\x74\x74\x6C\x65\x64\x20\x6F\x72\x20\x77\x61\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x72\x75\x6E\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x6E\x6F\x77\x2E\x0D\x0A\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x73\x65\x6C\x66\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x65\x74\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x72\x65\x67\x61\x72\x64\x6C\x65\x73\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x27\x73\x20\x66\x61\x74\x65\x2E\x20\x54\x68\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x2C\x20\x2A\x6F\x72\x2A\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x61\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x66\x66\x20\x6F\x66\x20\x69\x74\x20\x77\x69\x74\x68\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x77\x6F\x6E\x27\x74\x20\x72\x75\x6E\x2E\x20\x4F\x6E\x6C\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x6F\x72\x20\x60\x64\x6F\x6E\x65\x60\x20\x77\x69\x6C\x6C\x20\x72\x75\x6E\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x61\x73\x65\x20\x6F\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x68\x69\x6E\x67\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x29\x0D\x0A\x0D\x0A\x09\x64\x6F\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x57\x69\x74\x68\x28\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x49\x74\x20\x77\x6F\x72\x6B\x65\x64\x21\x22\x29\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x64\x6F\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x2E\x2E\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x4F\x68\x20\x6E\x6F\x20\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x65\x69\x74\x68\x65\x72\x20\x77\x61\x79\x2C\x20\x64\x65\x73\x74\x72\x6F\x79\x20\x74\x68\x69\x6E\x67\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x68\x69\x6E\x67\x3A\x44\x65\x73\x74\x72\x6F\x79\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x73\x74\x61\x74\x75\x73\x3A\x20\x53\x74\x61\x74\x75\x73\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x61\x6D\x65\x20\x61\x73\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x66\x6F\x72\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x2E\x0D\x0A\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x65\x66\x69\x6E\x65\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x41\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x60\x63\x61\x6C\x6C\x62\x61\x63\x6B\x60\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x22\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x64\x69\x73\x63\x61\x72\x64\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x69\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x52\x65\x74\x75\x72\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x20\x2D\x2D\x20\x56\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x52\x65\x74\x75\x72\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x65\x74\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x6F\x6E\x6C\x79\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x6F\x72\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x20\x54\x68\x69\x73\x20\x6D\x65\x74\x68\x6F\x64\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x69\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x63\x61\x74\x63\x68\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x60\x64\x6F\x6E\x65\x60\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x72\x65\x73\x65\x72\x76\x65\x64\x20\x73\x70\x65\x63\x69\x66\x69\x63\x61\x6C\x6C\x79\x20\x77\x68\x65\x6E\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x70\x65\x72\x66\x6F\x72\x6D\x20\x73\x6F\x6D\x65\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x28\x6C\x69\x6B\x65\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x29\x2C\x20\x62\x75\x74\x20\x79\x6F\x75\x20\x64\x6F\x6E\x27\x74\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x6F\x6E\x73\x75\x6D\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x20\x28\x6C\x69\x6B\x65\x20\x69\x6E\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x72\x6F\x62\x6C\x6F\x78\x2D\x6C\x75\x61\x2D\x70\x72\x6F\x6D\x69\x73\x65\x2F\x6C\x69\x62\x2F\x45\x78\x61\x6D\x70\x6C\x65\x73\x2E\x68\x74\x6D\x6C\x23\x63\x61\x6E\x63\x65\x6C\x6C\x61\x62\x6C\x65\x2D\x61\x6E\x69\x6D\x61\x74\x69\x6F\x6E\x2D\x73\x65\x71\x75\x65\x6E\x63\x65\x22\x3E\x74\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x61\x3E\x29\x2E\x20\x59\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x69\x66\x20\x79\x6F\x75\x20\x6F\x6E\x6C\x79\x20\x63\x61\x72\x65\x20\x61\x62\x6F\x75\x74\x20\x74\x68\x65\x20\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x63\x61\x73\x65\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x4C\x69\x6B\x65\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x2C\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x61\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x66\x66\x20\x6F\x66\x20\x69\x74\x20\x77\x69\x74\x68\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x77\x6F\x6E\x27\x74\x20\x72\x75\x6E\x2E\x20\x4F\x6E\x6C\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x60\x64\x6F\x6E\x65\x60\x20\x61\x6E\x64\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x77\x69\x6C\x6C\x20\x72\x75\x6E\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x61\x73\x65\x20\x6F\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x64\x6F\x6E\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x73\x74\x61\x74\x75\x73\x3A\x20\x53\x74\x61\x74\x75\x73\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x64\x6F\x6E\x65\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x74\x72\x75\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x61\x6D\x65\x20\x61\x73\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x66\x6F\x72\x20\x60\x64\x6F\x6E\x65\x60\x2E\x0D\x0A\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x64\x6F\x6E\x65\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x65\x66\x69\x6E\x65\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x41\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x60\x63\x61\x6C\x6C\x62\x61\x63\x6B\x60\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x22\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x74\x72\x75\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x64\x6F\x6E\x65\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x64\x69\x73\x63\x61\x72\x64\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x69\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x20\x2D\x2D\x20\x56\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x74\x72\x75\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x59\x69\x65\x6C\x64\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x74\x68\x72\x65\x61\x64\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x73\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x27\x73\x20\x73\x74\x61\x74\x75\x73\x2C\x20\x66\x6F\x6C\x6C\x6F\x77\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x40\x79\x69\x65\x6C\x64\x73\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x53\x74\x61\x74\x75\x73\x20\x2D\x2D\x20\x54\x68\x65\x20\x53\x74\x61\x74\x75\x73\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x66\x61\x74\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x44\x65\x73\x74\x72\x6F\x79\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x77\x61\x69\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x74\x61\x74\x75\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x2E\x2E\x2E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x59\x69\x65\x6C\x64\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x74\x68\x72\x65\x61\x64\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x73\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x72\x75\x65\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x66\x6F\x6C\x6C\x6F\x77\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x67\x65\x74\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x60\x66\x61\x6C\x73\x65\x60\x2C\x20\x77\x68\x69\x63\x68\x20\x69\x73\x20\x69\x6E\x64\x69\x73\x74\x69\x6E\x67\x75\x69\x73\x68\x61\x62\x6C\x65\x20\x66\x72\x6F\x6D\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x64\x69\x66\x66\x65\x72\x65\x6E\x74\x69\x61\x74\x65\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x5D\x5D\x20\x69\x6E\x73\x74\x65\x61\x64\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x77\x6F\x72\x6B\x65\x64\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x67\x65\x74\x54\x68\x65\x56\x61\x6C\x75\x65\x28\x29\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x77\x6F\x72\x6B\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x67\x6F\x74\x22\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x77\x61\x72\x6E\x28\x22\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x22\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x79\x69\x65\x6C\x64\x73\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x2D\x2D\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x61\x77\x61\x69\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x65\x6C\x66\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x65\x78\x70\x65\x63\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x74\x61\x74\x75\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x28\x2E\x2E\x2E\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x22\x45\x78\x70\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x6E\x6F\x20\x76\x61\x6C\x75\x65\x2E\x22\x20\x6F\x72\x20\x28\x2E\x2E\x2E\x29\x2C\x20\x33\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x59\x69\x65\x6C\x64\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x74\x68\x72\x65\x61\x64\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x73\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x77\x6F\x72\x6B\x65\x64\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x67\x6F\x74\x22\x2C\x20\x67\x65\x74\x54\x68\x65\x56\x61\x6C\x75\x65\x28\x29\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x77\x6F\x72\x6B\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x77\x61\x72\x6E\x28\x22\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x22\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x65\x73\x73\x65\x6E\x74\x69\x61\x6C\x6C\x79\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x73\x65\x6C\x65\x63\x74\x28\x32\x2C\x20\x61\x73\x73\x65\x72\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x29\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x2A\x2A\x45\x72\x72\x6F\x72\x73\x2A\x2A\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x6F\x72\x20\x67\x65\x74\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x40\x65\x72\x72\x6F\x72\x20\x61\x6E\x79\x20\x2D\x2D\x20\x45\x72\x72\x6F\x72\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x6F\x72\x20\x67\x65\x74\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x40\x79\x69\x65\x6C\x64\x73\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x65\x78\x70\x65\x63\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x65\x6C\x66\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x42\x61\x63\x6B\x77\x61\x72\x64\x73\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x2E\x61\x77\x61\x69\x74\x56\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x2E\x65\x78\x70\x65\x63\x74\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x49\x6E\x74\x65\x6E\x64\x65\x64\x20\x66\x6F\x72\x20\x75\x73\x65\x20\x69\x6E\x20\x74\x65\x73\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x53\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x61\x77\x61\x69\x74\x28\x29\x2C\x20\x62\x75\x74\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x79\x69\x65\x6C\x64\x69\x6E\x67\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x75\x6E\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x0D\x0A\x09\x5F\x75\x6E\x77\x72\x61\x70\x20\x77\x69\x6C\x6C\x20\x74\x68\x72\x6F\x77\x2E\x20\x54\x68\x69\x73\x20\x69\x6E\x64\x69\x63\x61\x74\x65\x73\x20\x61\x6E\x20\x61\x73\x73\x75\x6D\x70\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x0D\x0A\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x2E\x22\x2C\x20\x32\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x28\x2E\x2E\x2E\x29\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x28\x2E\x2E\x2E\x29\x3A\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x28\x73\x65\x6C\x66\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x77\x61\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x65\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x69\x74\x21\x0D\x0A\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x28\x2E\x2E\x2E\x29\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x69\x74\x68\x6F\x75\x74\x20\x74\x68\x69\x73\x20\x77\x61\x72\x6E\x69\x6E\x67\x2C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x73\x6F\x6D\x65\x74\x69\x6D\x65\x73\x20\x6D\x79\x73\x74\x65\x72\x69\x6F\x75\x73\x6C\x79\x20\x64\x69\x73\x61\x70\x70\x65\x61\x72\x0D\x0A\x09\x09\x69\x66\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x20\x3E\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x22\x57\x68\x65\x6E\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x61\x6E\x64\x54\x68\x65\x6E\x2C\x20\x65\x78\x74\x72\x61\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x61\x72\x65\x20\x22\x20\x2E\x2E\x0D\x0A\x09\x09\x09\x09\x22\x64\x69\x73\x63\x61\x72\x64\x65\x64\x21\x20\x53\x65\x65\x3A\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x6D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x20\x3D\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x42\x61\x63\x6B\x77\x61\x72\x64\x73\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x20\x3C\x20\x76\x32\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x65\x72\x72\x6F\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x65\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x5B\x4E\x6F\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x61\x73\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x69\x67\x69\x6E\x61\x74\x65\x64\x20\x66\x72\x6F\x6D\x20\x61\x6E\x20\x6F\x6C\x64\x65\x72\x20\x76\x65\x72\x73\x69\x6F\x6E\x20\x6F\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x28\x3C\x20\x76\x32\x29\x5D\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2C\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x3A\x65\x78\x74\x65\x6E\x64\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x54\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x65\x72\x72\x6F\x72\x65\x64\x2E\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x74\x72\x61\x63\x65\x20\x3D\x20\x22\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x22\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x25\x73\x5C\x6E\x2E\x2E\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x69\x63\x68\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x3A\x5C\x6E\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x09\x09\x09\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x73\x65\x6C\x66\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x41\x64\x6F\x70\x74\x20\x6F\x75\x72\x73\x65\x6C\x76\x65\x73\x20\x69\x6E\x74\x6F\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x66\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x73\x65\x6C\x66\x5D\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x57\x65\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x73\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x74\x68\x72\x6F\x77\x20\x65\x72\x72\x6F\x72\x73\x2E\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x61\x6E\x79\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x68\x61\x6E\x64\x6C\x65\x72\x73\x2C\x20\x63\x61\x6C\x6C\x20\x74\x68\x6F\x73\x65\x21\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x73\x45\x6D\x70\x74\x79\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x73\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x74\x68\x72\x6F\x77\x20\x65\x72\x72\x6F\x72\x73\x2E\x0D\x0A\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x74\x20\x74\x68\x69\x73\x20\x70\x6F\x69\x6E\x74\x2C\x20\x6E\x6F\x20\x6F\x6E\x65\x20\x77\x61\x73\x20\x61\x62\x6C\x65\x20\x74\x6F\x20\x6F\x62\x73\x65\x72\x76\x65\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x6E\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x6D\x69\x67\x68\x74\x20\x73\x74\x69\x6C\x6C\x20\x62\x65\x20\x61\x74\x74\x61\x63\x68\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x20\x6F\x63\x63\x75\x72\x72\x65\x64\x0D\x0A\x09\x09\x2D\x2D\x20\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x2E\x20\x57\x65\x27\x6C\x6C\x20\x77\x61\x69\x74\x20\x6F\x6E\x65\x20\x74\x69\x63\x6B\x2C\x20\x61\x6E\x64\x20\x69\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x73\x74\x69\x6C\x6C\x20\x6E\x6F\x0D\x0A\x09\x09\x2D\x2D\x20\x6F\x62\x73\x65\x72\x76\x65\x72\x73\x2C\x20\x74\x68\x65\x6E\x20\x77\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x70\x75\x74\x20\x61\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x6F\x6E\x73\x6F\x6C\x65\x2E\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x53\x6F\x6D\x65\x6F\x6E\x65\x20\x6F\x62\x73\x65\x72\x76\x65\x64\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x2C\x20\x68\x6F\x6F\x72\x61\x79\x21\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x42\x75\x69\x6C\x64\x20\x61\x20\x72\x65\x61\x73\x6F\x6E\x61\x62\x6C\x65\x20\x6D\x65\x73\x73\x61\x67\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x22\x55\x6E\x68\x61\x6E\x64\x6C\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x3A\x5C\x6E\x5C\x6E\x25\x73\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x2C\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x54\x45\x53\x54\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x44\x6F\x6E\x27\x74\x20\x73\x70\x61\x6D\x20\x6F\x75\x74\x70\x75\x74\x20\x77\x68\x65\x6E\x20\x77\x65\x27\x72\x65\x20\x72\x75\x6E\x6E\x69\x6E\x67\x20\x74\x65\x73\x74\x73\x2E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x6D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x61\x6C\x6C\x73\x20\x61\x6E\x79\x20\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x20\x68\x61\x6E\x64\x6C\x65\x72\x73\x2E\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x68\x69\x73\x20\x74\x6F\x20\x62\x65\x20\x61\x20\x73\x65\x70\x61\x72\x61\x74\x65\x20\x6D\x65\x74\x68\x6F\x64\x20\x61\x6E\x64\x0D\x0A\x09\x71\x75\x65\x75\x65\x20\x62\x65\x63\x61\x75\x73\x65\x20\x77\x65\x20\x6D\x75\x73\x74\x20\x63\x61\x6C\x6C\x20\x61\x6C\x6C\x20\x6F\x66\x20\x74\x68\x65\x20\x66\x69\x6E\x61\x6C\x6C\x79\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x75\x70\x6F\x6E\x20\x61\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x0D\x0A\x09\x66\x61\x69\x6C\x75\x72\x65\x2C\x20\x2A\x61\x6E\x64\x2A\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x29\x20\x64\x6F\x0D\x0A\x09\x09\x2D\x2D\x20\x50\x75\x72\x70\x6F\x73\x65\x66\x75\x6C\x6C\x79\x20\x6E\x6F\x74\x20\x70\x61\x73\x73\x69\x6E\x67\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x68\x65\x72\x65\x2C\x20\x61\x73\x20\x69\x74\x20\x63\x6F\x75\x6C\x64\x20\x62\x65\x20\x74\x68\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x2C\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x65\x72\x72\x6F\x72\x73\x2E\x20\x49\x66\x20\x74\x68\x65\x20\x64\x65\x76\x65\x6C\x6F\x70\x65\x72\x20\x6E\x65\x65\x64\x73\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x2C\x0D\x0A\x09\x09\x2D\x2D\x20\x74\x68\x65\x79\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x3A\x61\x6E\x64\x54\x68\x65\x6E\x20\x6F\x72\x20\x3A\x63\x61\x74\x63\x68\x20\x65\x78\x70\x6C\x69\x63\x69\x74\x6C\x79\x2E\x0D\x0A\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x43\x6C\x65\x61\x72\x20\x72\x65\x66\x65\x72\x65\x6E\x63\x65\x73\x20\x74\x6F\x20\x6F\x74\x68\x65\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x61\x6C\x6C\x6F\x77\x20\x67\x63\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x54\x45\x53\x54\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x68\x61\x69\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x6F\x6E\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x69\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x61\x6E\x64\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x74\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x6F\x66\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x60\x3A\x6E\x6F\x77\x28\x29\x60\x2E\x20\x54\x68\x69\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6F\x20\x65\x6E\x73\x75\x72\x65\x20\x79\x6F\x75\x72\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x6F\x63\x63\x75\x72\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x66\x72\x61\x6D\x65\x20\x61\x73\x20\x74\x68\x65\x20\x72\x6F\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x64\x6F\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x29\x0D\x0A\x09\x09\x3A\x6E\x6F\x77\x28\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x47\x6F\x74\x22\x2C\x20\x76\x61\x6C\x75\x65\x2C\x20\x22\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x2E\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x73\x74\x69\x6C\x6C\x20\x72\x75\x6E\x6E\x69\x6E\x67\x2C\x20\x52\x65\x6A\x65\x63\x74\x65\x64\x2C\x20\x6F\x72\x20\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x60\x3A\x6E\x6F\x77\x28\x29\x60\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x60\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x60\x20\x69\x66\x20\x70\x61\x73\x73\x65\x64\x2C\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x20\x77\x69\x74\x68\x20\x61\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x29\x60\x2E\x20\x54\x68\x69\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x77\x69\x74\x68\x20\x5B\x5B\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x5D\x5D\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x6E\x27\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x6E\x6F\x77\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x2C\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x54\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x69\x6E\x20\x74\x69\x6D\x65\x20\x66\x6F\x72\x20\x3A\x6E\x6F\x77\x28\x29\x22\x2C\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x3A\x6E\x6F\x77\x28\x29\x20\x77\x61\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x22\x20\x2E\x2E\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x7D\x29\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x70\x65\x61\x74\x65\x64\x6C\x79\x20\x63\x61\x6C\x6C\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2D\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x75\x70\x20\x74\x6F\x20\x60\x74\x69\x6D\x65\x73\x60\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x74\x69\x6D\x65\x73\x2C\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x61\x6D\x6F\x75\x6E\x74\x20\x6F\x66\x20\x72\x65\x74\x72\x69\x65\x73\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x2C\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x6C\x61\x74\x65\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x46\x61\x69\x6C\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x64\x6F\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x74\x68\x61\x74\x20\x63\x61\x6E\x20\x66\x61\x69\x6C\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x61\x69\x6C\x65\x64\x2C\x20\x74\x68\x69\x6E\x67\x20\x3D\x20\x64\x6F\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x54\x68\x61\x74\x43\x61\x6E\x46\x61\x69\x6C\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x66\x61\x69\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x22\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x22\x29\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x4D\x41\x58\x5F\x52\x45\x54\x52\x49\x45\x53\x20\x3D\x20\x31\x30\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x63\x61\x6E\x46\x61\x69\x6C\x2C\x20\x4D\x41\x58\x5F\x52\x45\x54\x52\x49\x45\x53\x2C\x20\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x29\x20\x2D\x2D\x20\x61\x72\x67\x73\x20\x74\x6F\x20\x73\x65\x6E\x64\x20\x74\x6F\x20\x63\x61\x6E\x46\x61\x69\x6C\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x33\x2E\x30\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x50\x29\x20\x2D\x3E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x74\x69\x6D\x65\x73\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x50\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x69\x6D\x65\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x22\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x20\x23\x31\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x74\x69\x6D\x65\x73\x29\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x22\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x2C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x7B\x2E\x2E\x2E\x7D\x2C\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x29\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x69\x6D\x65\x73\x20\x3E\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x69\x6D\x65\x73\x20\x2D\x20\x31\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x61\x72\x67\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x6F\x6E\x76\x65\x72\x74\x73\x20\x61\x6E\x20\x65\x76\x65\x6E\x74\x20\x69\x6E\x74\x6F\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x68\x69\x63\x68\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x74\x69\x6D\x65\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x66\x69\x72\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x60\x70\x72\x65\x64\x69\x63\x61\x74\x65\x60\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x69\x66\x20\x70\x61\x73\x73\x65\x64\x2C\x20\x77\x69\x6C\x6C\x20\x72\x65\x63\x65\x69\x76\x65\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x61\x6E\x64\x20\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x60\x74\x72\x75\x65\x60\x20\x6F\x72\x20\x60\x66\x61\x6C\x73\x65\x60\x2C\x20\x62\x61\x73\x65\x64\x20\x6F\x6E\x20\x69\x66\x20\x74\x68\x69\x73\x20\x66\x69\x72\x65\x64\x20\x65\x76\x65\x6E\x74\x20\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x20\x6E\x6F\x74\x2E\x20\x49\x66\x20\x60\x74\x72\x75\x65\x60\x2C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2E\x20\x49\x66\x20\x60\x66\x61\x6C\x73\x65\x60\x2C\x20\x6E\x6F\x74\x68\x69\x6E\x67\x20\x68\x61\x70\x70\x65\x6E\x73\x20\x61\x6E\x64\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x72\x75\x6E\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x74\x69\x6D\x65\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x66\x69\x72\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x74\x69\x70\x0D\x0A\x09\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x77\x6F\x72\x6B\x20\x67\x69\x76\x65\x6E\x20\x61\x6E\x79\x20\x6F\x62\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x60\x43\x6F\x6E\x6E\x65\x63\x74\x60\x20\x6D\x65\x74\x68\x6F\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x6E\x63\x6C\x75\x64\x65\x73\x20\x61\x6C\x6C\x20\x52\x6F\x62\x6C\x6F\x78\x20\x65\x76\x65\x6E\x74\x73\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x2D\x2D\x20\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x68\x69\x63\x68\x20\x6F\x6E\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x68\x65\x6E\x20\x60\x73\x6F\x6D\x65\x50\x61\x72\x74\x60\x20\x69\x73\x20\x74\x6F\x75\x63\x68\x65\x64\x0D\x0A\x09\x2D\x2D\x20\x62\x79\x20\x61\x20\x70\x61\x72\x74\x20\x6E\x61\x6D\x65\x64\x20\x60\x22\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x73\x70\x65\x63\x69\x66\x69\x63\x22\x60\x2E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x73\x6F\x6D\x65\x50\x61\x72\x74\x2E\x54\x6F\x75\x63\x68\x65\x64\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x61\x72\x74\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x61\x72\x74\x2E\x4E\x61\x6D\x65\x20\x3D\x3D\x20\x22\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x73\x70\x65\x63\x69\x66\x69\x63\x22\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x33\x2E\x30\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x76\x65\x6E\x74\x20\x45\x76\x65\x6E\x74\x20\x2D\x2D\x20\x41\x6E\x79\x20\x6F\x62\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x60\x43\x6F\x6E\x6E\x65\x63\x74\x60\x20\x6D\x65\x74\x68\x6F\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x6E\x63\x6C\x75\x64\x65\x73\x20\x61\x6C\x6C\x20\x52\x6F\x62\x6C\x6F\x78\x20\x65\x76\x65\x6E\x74\x73\x2E\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x3F\x20\x28\x2E\x2E\x2E\x3A\x20\x50\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x2D\x2D\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x68\x69\x63\x68\x20\x64\x65\x74\x65\x72\x6D\x69\x6E\x65\x73\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x2C\x20\x6F\x72\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x65\x76\x65\x6E\x74\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x2E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x50\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x65\x76\x65\x6E\x74\x2C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x29\x0D\x0A\x09\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x3D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x6F\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x75\x73\x65\x20\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x66\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x67\x69\x76\x65\x6E\x20\x74\x6F\x20\x43\x6F\x6E\x6E\x65\x63\x74\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x65\x66\x6F\x72\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x6F\x6E\x6E\x65\x63\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x2C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x73\x74\x69\x6C\x6C\x20\x62\x65\x20\x6E\x69\x6C\x2E\x20\x54\x68\x69\x73\x20\x68\x61\x70\x70\x65\x6E\x73\x20\x77\x69\x74\x68\x20\x65\x76\x65\x6E\x74\x73\x20\x74\x68\x61\x74\x20\x71\x75\x65\x75\x65\x20\x75\x70\x0D\x0A\x09\x09\x2D\x2D\x20\x65\x76\x65\x6E\x74\x73\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x72\x65\x27\x73\x20\x6E\x6F\x74\x68\x69\x6E\x67\x20\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x2C\x20\x73\x75\x63\x68\x20\x61\x73\x20\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x73\x0D\x0A\x0D\x0A\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x65\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x56\x61\x6C\x75\x65\x20\x3D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x74\x72\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x56\x61\x6C\x75\x65\x29\x20\x7E\x3D\x20\x22\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x61\x6E\x64\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x36\x39\x35\x37\x66\x37\x39\x38\x33\x61\x63\x30\x38\x61\x63\x61\x62\x66\x32\x32\x34\x32\x36\x36\x66\x33\x36\x35\x64\x33\x66\x37\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x31\x33\x33\x61\x39\x62\x30\x30\x35\x66\x62\x65\x61\x36\x62\x65\x61\x63\x31\x64\x30\x35\x39\x64\x64\x63\x39\x66\x65\x66\x30\x65\x87\xA2\x49\x64\xD9\x20\x31\x33\x33\x61\x39\x62\x30\x30\x35\x66\x62\x65\x61\x36\x62\x65\x61\x63\x31\x64\x30\x35\x39\x64\x64\x63\x39\x66\x65\x66\x30\x65\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xAC\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x01\xE7\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x52\x65\x6D\x6F\x74\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x22\x29\x2C\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x61\x6E\x79\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x73\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x09\x5B\x74\x2E\x73\x74\x72\x69\x6E\x67\x5D\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x7D\x29\x2C\x0A\x09\x7D\x29\x2C\x0A\x7D\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x7B\x0A\x09\x52\x65\x6D\x6F\x74\x65\x3A\x20\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x2C\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x73\x3A\x20\x7B\x0A\x09\x09\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x7B\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x20\x7D\x2C\x0A\x09\x7D\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x65\x6E\x64\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x39\x39\x65\x61\x35\x37\x36\x35\x30\x30\x38\x31\x34\x31\x37\x66\x64\x32\x35\x36\x62\x37\x30\x39\x32\x63\x63\x64\x62\x61\x31\x39\x87\xA2\x49\x64\xD9\x20\x39\x39\x65\x61\x35\x37\x36\x35\x30\x30\x38\x31\x34\x31\x37\x66\x64\x32\x35\x36\x62\x37\x30\x39\x32\x63\x63\x64\x62\x61\x31\x39\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA4\x4E\x61\x6D\x65\xA2\x74\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x61\x84\x2D\x2D\x20\x74\x3A\x20\x61\x20\x72\x75\x6E\x74\x69\x6D\x65\x20\x74\x79\x70\x65\x63\x68\x65\x63\x6B\x65\x72\x20\x66\x6F\x72\x20\x52\x6F\x62\x6C\x6F\x78\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x65\x67\x75\x6C\x61\x72\x20\x6C\x75\x61\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x6F\x66\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x20\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x74\x79\x70\x65\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x74\x79\x70\x65\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x61\x6E\x79\x20\x74\x79\x70\x65\x20\x65\x78\x63\x65\x70\x74\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x6E\x79\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x68\x72\x65\x61\x64\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x68\x72\x65\x61\x64\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x68\x72\x65\x61\x64\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x74\x5B\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x5D\x20\x3D\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x6E\x6F\x6E\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x6F\x6E\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x74\x5B\x22\x6E\x69\x6C\x22\x5D\x20\x3D\x20\x74\x2E\x6E\x6F\x6E\x65\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x73\x74\x72\x69\x6E\x67\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x73\x74\x72\x69\x6E\x67\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x73\x74\x72\x69\x6E\x67\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x61\x62\x6C\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x75\x73\x65\x72\x64\x61\x74\x61\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x75\x73\x65\x72\x64\x61\x74\x61\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x75\x73\x65\x72\x64\x61\x74\x61\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x61\x6E\x64\x20\x6E\x6F\x6E\x2D\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x61\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x41\x78\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x41\x78\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x41\x78\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x46\x72\x61\x6D\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x46\x72\x61\x6D\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x46\x61\x63\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x46\x61\x63\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x46\x61\x63\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x49\x6E\x73\x74\x61\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x6E\x64\x6F\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x6E\x64\x6F\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x6E\x64\x6F\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x79\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x79\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x79\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x63\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x63\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x65\x6E\x75\x6D\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x49\x74\x65\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x54\x68\x65\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x69\x7A\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x69\x7A\x65\x20\x3D\x3D\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x73\x69\x7A\x65\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x6C\x69\x74\x65\x72\x61\x6C\x73\x5B\x69\x5D\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6C\x69\x74\x65\x72\x61\x6C\x73\x2C\x20\x31\x2C\x20\x73\x69\x7A\x65\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x44\x45\x50\x52\x45\x43\x41\x54\x45\x44\x0D\x0A\x09\x50\x6C\x65\x61\x73\x65\x20\x75\x73\x65\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x65\x78\x61\x63\x74\x6C\x79\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x6B\x65\x79\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x6B\x65\x79\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x4F\x66\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x6B\x65\x79\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x6B\x65\x79\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6B\x65\x79\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x76\x61\x6C\x75\x65\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x65\x72\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x25\x20\x31\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3E\x3D\x20\x6D\x69\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3E\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x50\x6F\x73\x69\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4E\x65\x67\x61\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x74\x63\x68\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x74\x72\x69\x6E\x67\x2E\x6D\x61\x74\x63\x68\x28\x76\x61\x6C\x75\x65\x2C\x20\x70\x61\x74\x74\x65\x72\x6E\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x65\x69\x74\x68\x65\x72\x20\x6E\x69\x6C\x20\x6F\x72\x20\x70\x61\x73\x73\x65\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x74\x75\x70\x6C\x65\x20\x61\x67\x61\x69\x6E\x73\x74\x20\x74\x75\x70\x6C\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x74\x75\x70\x6C\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x61\x72\x67\x73\x5B\x69\x5D\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x6B\x65\x79\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x76\x61\x6C\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x70\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x2C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x65\x74\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6D\x61\x70\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x72\x75\x65\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6D\x61\x74\x63\x68\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x23\x20\x69\x73\x20\x75\x6E\x72\x65\x6C\x69\x61\x62\x6C\x65\x20\x66\x6F\x72\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x43\x6F\x75\x6E\x74\x20\x75\x70\x77\x61\x72\x64\x73\x20\x75\x73\x69\x6E\x67\x20\x69\x70\x61\x69\x72\x73\x20\x74\x6F\x20\x61\x76\x6F\x69\x64\x20\x66\x61\x6C\x73\x65\x20\x70\x6F\x73\x69\x74\x69\x76\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x62\x65\x68\x61\x76\x69\x6F\x72\x20\x6F\x66\x20\x23\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x20\x3C\x20\x31\x20\x6F\x72\x20\x6B\x65\x79\x20\x3E\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x61\x20\x73\x74\x72\x69\x63\x74\x20\x6D\x61\x6B\x65\x75\x70\x20\x61\x6E\x64\x20\x73\x69\x7A\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x27\x73\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x74\x68\x65\x20\x73\x65\x74\x20\x61\x72\x72\x61\x79\x20\x73\x69\x7A\x65\x2C\x20\x64\x69\x73\x61\x6C\x6C\x6F\x77\x0D\x0A\x09\x09\x09\x69\x66\x20\x23\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3C\x20\x23\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x64\x78\x2C\x20\x74\x79\x70\x65\x46\x6E\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x79\x70\x65\x46\x6E\x28\x76\x61\x6C\x75\x65\x5B\x69\x64\x78\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x20\x75\x6E\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x73\x6F\x6D\x65\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x65\x76\x65\x72\x79\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x61\x6E\x79\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x73\x74\x72\x69\x63\x74\x6C\x79\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6B\x65\x79\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x7E\x3D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x62\x79\x20\x61\x6E\x20\x49\x73\x41\x20\x63\x6F\x6D\x70\x61\x72\x69\x73\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x3A\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x65\x6E\x75\x6D\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x6E\x75\x6D\x20\x54\x68\x65\x20\x65\x6E\x75\x6D\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x65\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x45\x6E\x75\x6D\x54\x79\x70\x65\x20\x3D\x3D\x20\x65\x6E\x75\x6D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x77\x72\x61\x70\x73\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x20\x77\x69\x74\x68\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x66\x69\x72\x73\x74\x20\x61\x73\x73\x65\x72\x74\x73\x20\x75\x73\x69\x6E\x67\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x61\x6E\x64\x20\x74\x68\x65\x6E\x20\x63\x61\x6C\x6C\x73\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x73\x69\x6D\x70\x6C\x79\x20\x77\x72\x61\x70\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x54\x61\x6B\x65\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x77\x68\x65\x72\x65\x20\x6B\x65\x79\x73\x20\x61\x72\x65\x20\x63\x68\x69\x6C\x64\x20\x6E\x61\x6D\x65\x73\x20\x61\x6E\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x61\x67\x61\x69\x6E\x73\x74\x2E\x0D\x0A\x09\x09\x50\x61\x73\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x09\x49\x66\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x70\x61\x73\x73\x65\x73\x20\x65\x61\x63\x68\x20\x63\x68\x65\x63\x6B\x2C\x20\x74\x68\x65\x20\x6F\x76\x65\x72\x61\x6C\x6C\x20\x63\x68\x65\x63\x6B\x20\x70\x61\x73\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x09\x57\x61\x72\x6E\x69\x6E\x67\x21\x20\x49\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x69\x6E\x20\x61\x20\x74\x72\x65\x65\x20\x77\x69\x74\x68\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x6E\x61\x6D\x65\x2C\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x63\x68\x65\x63\x6B\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x69\x6C\x64\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x3A\x47\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x29\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x61\x6D\x65\x20\x3D\x20\x63\x68\x69\x6C\x64\x2E\x4E\x61\x6D\x65\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x3D\x20\x63\x68\x69\x6C\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6E\x61\x6D\x65\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x7B\x20\x74\x20\x3D\x20\x74\x20\x7D\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\x87\xA2\x49\x64\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\xA4\x4E\x61\x6D\x65\xA1\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x6B\xE3\x2D\x2D\x20\x74\x3A\x20\x61\x20\x72\x75\x6E\x74\x69\x6D\x65\x20\x74\x79\x70\x65\x63\x68\x65\x63\x6B\x65\x72\x20\x66\x6F\x72\x20\x52\x6F\x62\x6C\x6F\x78\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x65\x67\x75\x6C\x61\x72\x20\x6C\x75\x61\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x6F\x66\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x20\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x74\x79\x70\x65\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x74\x79\x70\x65\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x74\x79\x70\x65\x4E\x61\x6D\x65\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x61\x6E\x79\x20\x74\x79\x70\x65\x20\x65\x78\x63\x65\x70\x74\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x6E\x79\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x61\x6E\x79\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x6E\x69\x6C\x22\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x68\x72\x65\x61\x64\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x68\x72\x65\x61\x64\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x68\x72\x65\x61\x64\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x74\x5B\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x5D\x20\x3D\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x6E\x6F\x6E\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x6F\x6E\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x74\x5B\x22\x6E\x69\x6C\x22\x5D\x20\x3D\x20\x74\x2E\x6E\x6F\x6E\x65\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x73\x74\x72\x69\x6E\x67\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x73\x74\x72\x69\x6E\x67\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x73\x74\x72\x69\x6E\x67\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x61\x62\x6C\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x75\x73\x65\x72\x64\x61\x74\x61\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x75\x73\x65\x72\x64\x61\x74\x61\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x75\x73\x65\x72\x64\x61\x74\x61\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x61\x6E\x64\x20\x6E\x6F\x6E\x2D\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x75\x6E\x65\x78\x70\x65\x63\x74\x65\x64\x20\x4E\x61\x4E\x20\x76\x61\x6C\x75\x65\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x61\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x75\x6E\x65\x78\x70\x65\x63\x74\x65\x64\x20\x6E\x6F\x6E\x2D\x4E\x61\x4E\x20\x76\x61\x6C\x75\x65\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x41\x78\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x41\x78\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x41\x78\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x46\x72\x61\x6D\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x46\x72\x61\x6D\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x46\x61\x63\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x46\x61\x63\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x46\x61\x63\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x49\x6E\x73\x74\x61\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x6E\x64\x6F\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x6E\x64\x6F\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x6E\x64\x6F\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x79\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x79\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x79\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x63\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x63\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x65\x6E\x75\x6D\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x49\x74\x65\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x54\x68\x65\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x69\x7A\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x69\x7A\x65\x20\x3D\x3D\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x65\x78\x70\x65\x63\x74\x65\x64\x20\x25\x73\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6C\x69\x74\x65\x72\x61\x6C\x29\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x73\x69\x7A\x65\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x6C\x69\x74\x65\x72\x61\x6C\x73\x5B\x69\x5D\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6C\x69\x74\x65\x72\x61\x6C\x73\x2C\x20\x31\x2C\x20\x73\x69\x7A\x65\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x44\x45\x50\x52\x45\x43\x41\x54\x45\x44\x0D\x0A\x09\x50\x6C\x65\x61\x73\x65\x20\x75\x73\x65\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x65\x78\x61\x63\x74\x6C\x79\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x6B\x65\x79\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x6B\x65\x79\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x4F\x66\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x6B\x65\x79\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x6B\x65\x79\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6B\x65\x79\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x76\x61\x6C\x75\x65\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x65\x72\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x25\x20\x31\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x69\x6E\x74\x65\x67\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3E\x3D\x20\x6D\x69\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3E\x3D\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x69\x6E\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3C\x3D\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x61\x78\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3E\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x69\x6E\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3C\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x61\x78\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3E\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x50\x6F\x73\x69\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4E\x65\x67\x61\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x74\x63\x68\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x73\x74\x72\x69\x6E\x67\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x74\x72\x69\x6E\x67\x2E\x6D\x61\x74\x63\x68\x28\x76\x61\x6C\x75\x65\x2C\x20\x70\x61\x74\x74\x65\x72\x6E\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x71\x20\x66\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6D\x61\x74\x63\x68\x20\x70\x61\x74\x74\x65\x72\x6E\x20\x25\x71\x22\x2C\x20\x76\x61\x6C\x75\x65\x2C\x20\x70\x61\x74\x74\x65\x72\x6E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x65\x69\x74\x68\x65\x72\x20\x6E\x69\x6C\x20\x6F\x72\x20\x70\x61\x73\x73\x65\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x28\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x29\x20\x25\x73\x22\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x74\x75\x70\x6C\x65\x20\x61\x67\x61\x69\x6E\x73\x74\x20\x74\x75\x70\x6C\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x74\x75\x70\x6C\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x61\x72\x67\x73\x5B\x69\x5D\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x42\x61\x64\x20\x74\x75\x70\x6C\x65\x20\x69\x6E\x64\x65\x78\x20\x23\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x69\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x6B\x65\x79\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x62\x61\x64\x20\x6B\x65\x79\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x76\x61\x6C\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x62\x61\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x6F\x72\x20\x6B\x65\x79\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x70\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x2C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6B\x65\x79\x45\x72\x72\x20\x3D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6B\x65\x79\x45\x72\x72\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x20\x3D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x65\x74\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6D\x61\x70\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x72\x75\x65\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6D\x61\x74\x63\x68\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x61\x72\x72\x61\x79\x5D\x20\x25\x73\x22\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x23\x20\x69\x73\x20\x75\x6E\x72\x65\x6C\x69\x61\x62\x6C\x65\x20\x66\x6F\x72\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x43\x6F\x75\x6E\x74\x20\x75\x70\x77\x61\x72\x64\x73\x20\x75\x73\x69\x6E\x67\x20\x69\x70\x61\x69\x72\x73\x20\x74\x6F\x20\x61\x76\x6F\x69\x64\x20\x66\x61\x6C\x73\x65\x20\x70\x6F\x73\x69\x74\x69\x76\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x62\x65\x68\x61\x76\x69\x6F\x72\x20\x6F\x66\x20\x23\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x20\x3C\x20\x31\x20\x6F\x72\x20\x6B\x65\x79\x20\x3E\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x61\x72\x72\x61\x79\x5D\x20\x6B\x65\x79\x20\x25\x73\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x73\x65\x71\x75\x65\x6E\x74\x69\x61\x6C\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x61\x72\x72\x61\x79\x5D\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x61\x20\x73\x74\x72\x69\x63\x74\x20\x6D\x61\x6B\x65\x75\x70\x20\x61\x6E\x64\x20\x73\x69\x7A\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x5D\x20\x25\x73\x22\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x27\x73\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x74\x68\x65\x20\x73\x65\x74\x20\x61\x72\x72\x61\x79\x20\x73\x69\x7A\x65\x2C\x20\x64\x69\x73\x61\x6C\x6C\x6F\x77\x0D\x0A\x09\x09\x09\x69\x66\x20\x23\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3C\x20\x23\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x5D\x20\x41\x72\x72\x61\x79\x20\x73\x69\x7A\x65\x20\x65\x78\x63\x65\x65\x64\x73\x20\x6C\x69\x6D\x69\x74\x20\x6F\x66\x20\x25\x64\x22\x2C\x20\x23\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x64\x78\x2C\x20\x74\x79\x70\x65\x46\x6E\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x79\x70\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x79\x70\x65\x46\x6E\x28\x76\x61\x6C\x75\x65\x5B\x69\x64\x78\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x5D\x20\x41\x72\x72\x61\x79\x20\x69\x6E\x64\x65\x78\x20\x23\x25\x64\x20\x2D\x20\x25\x73\x22\x2C\x20\x69\x64\x78\x2C\x20\x74\x79\x70\x65\x45\x72\x72\x4D\x73\x67\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x20\x75\x6E\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x62\x61\x64\x20\x74\x79\x70\x65\x20\x66\x6F\x72\x20\x75\x6E\x69\x6F\x6E\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x73\x6F\x6D\x65\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x65\x76\x65\x72\x79\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x61\x6E\x79\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x5D\x20\x62\x61\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x6F\x72\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x73\x74\x72\x69\x63\x74\x6C\x79\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x5D\x20\x62\x61\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x6F\x72\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6B\x65\x79\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x5D\x20\x75\x6E\x65\x78\x70\x65\x63\x74\x65\x64\x20\x66\x69\x65\x6C\x64\x20\x25\x71\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x7E\x3D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x62\x79\x20\x61\x6E\x20\x49\x73\x41\x20\x63\x6F\x6D\x70\x61\x72\x69\x73\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x3A\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x65\x6E\x75\x6D\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x6E\x75\x6D\x20\x54\x68\x65\x20\x65\x6E\x75\x6D\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x65\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x45\x6E\x75\x6D\x54\x79\x70\x65\x20\x3D\x3D\x20\x65\x6E\x75\x6D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x65\x6E\x75\x6D\x20\x6F\x66\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x65\x6E\x75\x6D\x20\x6F\x66\x20\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x65\x6E\x75\x6D\x29\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x2E\x45\x6E\x75\x6D\x54\x79\x70\x65\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x77\x72\x61\x70\x73\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x20\x77\x69\x74\x68\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x66\x69\x72\x73\x74\x20\x61\x73\x73\x65\x72\x74\x73\x20\x75\x73\x69\x6E\x67\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x61\x6E\x64\x20\x74\x68\x65\x6E\x20\x63\x61\x6C\x6C\x73\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x73\x69\x6D\x70\x6C\x79\x20\x77\x72\x61\x70\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x54\x61\x6B\x65\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x77\x68\x65\x72\x65\x20\x6B\x65\x79\x73\x20\x61\x72\x65\x20\x63\x68\x69\x6C\x64\x20\x6E\x61\x6D\x65\x73\x20\x61\x6E\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x61\x67\x61\x69\x6E\x73\x74\x2E\x0D\x0A\x09\x09\x50\x61\x73\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x09\x49\x66\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x70\x61\x73\x73\x65\x73\x20\x65\x61\x63\x68\x20\x63\x68\x65\x63\x6B\x2C\x20\x74\x68\x65\x20\x6F\x76\x65\x72\x61\x6C\x6C\x20\x63\x68\x65\x63\x6B\x20\x70\x61\x73\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x09\x57\x61\x72\x6E\x69\x6E\x67\x21\x20\x49\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x69\x6E\x20\x61\x20\x74\x72\x65\x65\x20\x77\x69\x74\x68\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x6E\x61\x6D\x65\x2C\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x63\x68\x65\x63\x6B\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x69\x6C\x64\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x3A\x47\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x29\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x61\x6D\x65\x20\x3D\x20\x63\x68\x69\x6C\x64\x2E\x4E\x61\x6D\x65\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x43\x61\x6E\x6E\x6F\x74\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x6D\x75\x6C\x74\x69\x70\x6C\x65\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x6E\x61\x6D\x65\x20\x25\x71\x22\x2C\x20\x6E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x3D\x20\x63\x68\x69\x6C\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6E\x61\x6D\x65\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x25\x73\x2E\x25\x73\x5D\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x3A\x47\x65\x74\x46\x75\x6C\x6C\x4E\x61\x6D\x65\x28\x29\x2C\x20\x6E\x61\x6D\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x74\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x92\xD9\x20\x64\x32\x32\x61\x64\x63\x33\x61\x39\x62\x64\x37\x31\x39\x35\x64\x61\x65\x34\x65\x33\x63\x34\x65\x61\x32\x36\x31\x32\x63\x30\x39\xD9\x20\x39\x39\x65\x61\x35\x37\x36\x35\x30\x30\x38\x31\x34\x31\x37\x66\x64\x32\x35\x36\x62\x37\x30\x39\x32\x63\x63\x64\x62\x61\x31\x39\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\x87\xA2\x49\x64\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xA4\x4E\x61\x6D\x65\xB1\x73\x68\x61\x6E\x65\x62\x75\x74\x74\x5F\x74\x40\x31\x2E\x33\x2E\x31\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\x87\xA2\x49\x64\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA6\x50\x6F\x72\x74\x61\x6C\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x05\xF0\x6C\x6F\x63\x61\x6C\x20\x48\x74\x74\x70\x53\x65\x72\x76\x69\x63\x65\x3A\x20\x48\x74\x74\x70\x53\x65\x72\x76\x69\x63\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x48\x74\x74\x70\x53\x65\x72\x76\x69\x63\x65\x22\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x22\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x22\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x54\x79\x70\x65\x73\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x20\x3D\x20\x22\x50\x6F\x72\x74\x61\x6C\x22\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x46\x6F\x6C\x64\x65\x72\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x46\x69\x6E\x64\x46\x69\x72\x73\x74\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0A\x0A\x69\x66\x20\x6E\x6F\x74\x20\x53\x74\x6F\x72\x61\x67\x65\x20\x74\x68\x65\x6E\x0A\x09\x69\x66\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x49\x73\x53\x65\x72\x76\x65\x72\x28\x29\x20\x74\x68\x65\x6E\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x6F\x6C\x64\x65\x72\x22\x29\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x50\x61\x72\x65\x6E\x74\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x0A\x09\x65\x6C\x73\x65\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x29\x0A\x09\x65\x6E\x64\x0A\x65\x6E\x64\x0A\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0A\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x6F\x72\x74\x61\x6C\x20\x3D\x20\x7B\x7D\x0A\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6E\x65\x77\x28\x29\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x43\x6F\x6E\x74\x65\x78\x74\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x28\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x62\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x3F\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6D\x61\x6B\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x2C\x20\x63\x62\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x62\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x29\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x50\x6F\x72\x74\x61\x6C\x3A\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x2C\x20\x63\x62\x29\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x64\x6F\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x50\x75\x62\x6C\x69\x73\x68\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x20\x65\x6E\x64\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x95\xD9\x20\x32\x64\x35\x36\x39\x36\x65\x65\x35\x62\x64\x66\x34\x63\x38\x61\x30\x61\x35\x34\x32\x62\x66\x35\x38\x66\x36\x33\x62\x37\x33\x38\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\xD9\x20\x62\x30\x30\x36\x36\x36\x36\x64\x65\x37\x61\x30\x33\x34\x36\x39\x39\x32\x39\x30\x63\x38\x66\x37\x61\x34\x32\x34\x34\x36\x62\x66\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xD9\x20\x38\x39\x37\x33\x34\x66\x31\x64\x66\x39\x39\x37\x64\x65\x38\x35\x66\x64\x32\x62\x64\x64\x34\x32\x37\x64\x64\x66\x33\x34\x66\x62\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2' diff --git a/plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua b/plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua new file mode 100644 index 00000000..43d7c899 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua @@ -0,0 +1,34 @@ +local msgpack = require(game.ReplicatedStorage.msgpack) + +local httpService = game:GetService("HttpService") +local msgpackDecode = msgpack.decode +local msgpackEncode = msgpack.encode + +local jsonMessage = require(game.ServerStorage.JsonMessage) +local msgpackMessage = require(game.ServerStorage.MsgpackMessage) + +return { + + ParameterGenerator = function() end, + + Functions = { + ["JSONDecode & JSONEncode"] = function(Profiler) + Profiler.Begin("JSONDecode") + local x = httpService:JSONDecode(jsonMessage) + Profiler.End() + Profiler.Begin("JSONEncode") + httpService:JSONEncode(x) + Profiler.End() + end, + + ["msgpack.decode & msgpack.encode"] = function(Profiler) + Profiler.Begin("msgpack.decode") + local x = msgpackDecode(msgpackMessage) + Profiler.End() + Profiler.Begin("msgpack.encode") + msgpackEncode(x) + Profiler.End() + end + } + +} diff --git a/plugin/Packages/msgpack-luau/benchmark/decode.bench.lua b/plugin/Packages/msgpack-luau/benchmark/decode.bench.lua new file mode 100644 index 00000000..c22c7a4e --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/decode.bench.lua @@ -0,0 +1,23 @@ +local msgpack = require(game.ReplicatedStorage.msgpack) + +local httpService = game:GetService("HttpService") +local msgpackDecode = msgpack.decode + +local jsonMessage = require(game.ServerStorage.JsonMessage) +local msgpackMessage = require(game.ServerStorage.MsgpackMessage) + +return { + + ParameterGenerator = function() end, + + Functions = { + ["JSONDecode"] = function(Profiler) + httpService:JSONDecode(jsonMessage) + end, + + ["msgpack.decode"] = function(Profiler) + msgpackDecode(msgpackMessage) + end + } + +} diff --git a/plugin/Packages/msgpack-luau/benchmark/encode.bench.lua b/plugin/Packages/msgpack-luau/benchmark/encode.bench.lua new file mode 100644 index 00000000..05dfcea1 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/encode.bench.lua @@ -0,0 +1,23 @@ +local msgpack = require(game.ReplicatedStorage.msgpack) + +local httpService = game:GetService("HttpService") +local msgpackEncode = msgpack.encode + +local jsonMessage = require(game.ServerStorage.JsonMessage) +local data = httpService:JSONDecode(jsonMessage) + +return { + + ParameterGenerator = function() end, + + Functions = { + ["JSONEncode"] = function(Profiler) + httpService:JSONEncode(data) + end, + + ["msgpack.encode"] = function(Profiler) + msgpackEncode(data) + end + } + +} diff --git a/plugin/Packages/msgpack-luau/default.project.json b/plugin/Packages/msgpack-luau/default.project.json new file mode 100644 index 00000000..6725663b --- /dev/null +++ b/plugin/Packages/msgpack-luau/default.project.json @@ -0,0 +1,7 @@ +{ + "name": "msgpack", + "globIgnorePaths": ["**/*.spec.lua"], + "tree": { + "$path": "src/msgpack.lua" + } +} diff --git a/plugin/Packages/msgpack-luau/src/msgpack.lua b/plugin/Packages/msgpack-luau/src/msgpack.lua new file mode 100644 index 00000000..34ddd1b4 --- /dev/null +++ b/plugin/Packages/msgpack-luau/src/msgpack.lua @@ -0,0 +1,868 @@ +--!native +--!strict +local msgpack = {} + +local band = bit32.band +local bor = bit32.bor +local bufferCreate = buffer.create +local bufferLen = buffer.len +local bufferCopy = buffer.copy +local readstring = buffer.readstring +local writestring = buffer.writestring +local readu8 = buffer.readu8 +local readi8 = buffer.readi8 +local writeu8 = buffer.writeu8 +local writei8 = buffer.writei8 +local lshift = bit32.lshift +local extract = bit32.extract +local ldexp = math.ldexp +local frexp = math.frexp +local floor = math.floor +local modf = math.modf +local sign = math.sign +local ssub = string.sub +local char = string.char +local sbyte = string.byte +local concat = table.concat +local tableCreate = table.create + +-- MsgPack numbers are big-endian, buffer methods are little-endian +-- Will need to reverse 16 and 32 bit ints, floats and doubles +local function reverse(b: buffer, offset: number, count: number): () + for i=1,count//2 do + local byte = readu8(b, offset + i - 1) + bufferCopy(b, offset + i - 1, b, offset + count - i, 1) + writeu8(b, offset + count - i, byte) + end +end + +local function writeu16(b: buffer, offset: number, value: number): () + buffer.writeu16(b, offset, value) + reverse(b, offset, 2) +end + +local function writei16(b: buffer, offset: number, value: number): () + buffer.writei16(b, offset, value) + reverse(b, offset, 2) +end + +local function writeu32(b: buffer, offset: number, value: number): () + buffer.writeu32(b, offset, value) + reverse(b, offset, 4) +end + +local function writei32(b: buffer, offset: number, value: number): () + buffer.writei32(b, offset, value) + reverse(b, offset, 4) +end + +local function writef32(b: buffer, offset: number, value: number): () + buffer.writef32(b, offset, value) + reverse(b, offset, 4) +end + +local function writef64(b: buffer, offset: number, value: number): () + buffer.writef64(b, offset, value) + reverse(b, offset, 8) +end + +local function readu16(b: buffer, offset: number): number + reverse(b, offset, 2) + return buffer.readu16(b, offset) +end + +local function readi16(b: buffer, offset: number): number + reverse(b, offset, 2) + return buffer.readi16(b, offset) +end + +local function readu32(b: buffer, offset: number): number + reverse(b, offset, 4) + return buffer.readu32(b, offset) +end + +local function readi32(b: buffer, offset: number): number + reverse(b, offset, 4) + return buffer.readi32(b, offset) +end + +local function readf32(b: buffer, offset: number): number + reverse(b, offset, 4) + return buffer.readf32(b, offset) +end + +local function readf64(b: buffer, offset: number): number + reverse(b, offset, 8) + return buffer.readf64(b, offset) +end + +local function parse(message: buffer, offset: number): (any, number) + local byte = readu8(message, offset) + + if byte == 0xC0 then -- nil + return nil, offset + 1 + + elseif byte == 0xC2 then -- false + return false, offset + 1 + + elseif byte == 0xC3 then -- true + return true, offset + 1 + + elseif byte == 0xC4 then -- bin 8 + local length = readu8(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 2, length) + return newBuf, offset + 2 + length + + elseif byte == 0xC5 then -- bin 16 + local length = readu16(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 3, length) + return newBuf, offset + 3 + length + + elseif byte == 0xC6 then -- bin 32 + local length = readu32(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 5, length) + return newBuf, offset + 5 + length + + elseif byte == 0xC7 then -- ext 8 + local length = readu8(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 3, length) + return msgpack.Extension.new( + readu8(message, offset + 2), + newBuf + ), + offset + 3 + length + + elseif byte == 0xC8 then -- ext 16 + local length = readu16(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 4, length) + return msgpack.Extension.new( + readu8(message, offset + 3), + newBuf + ), + offset + 4 + length + + elseif byte == 0xC9 then -- ext 32 + local length = readu32(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 6, length) + return msgpack.Extension.new( + readu8(message, offset + 5), + newBuf + ), + offset + 6 + length + + elseif byte == 0xCA then -- float 32 + return readf32(message, offset + 1), + offset + 5 + + elseif byte == 0xCB then -- float 64 + return readf64(message, offset + 1), + offset + 9 + + elseif byte == 0xCC then -- uint 8 + return readu8(message, offset + 1), + offset + 2 + + elseif byte == 0xCD then -- uint 16 + return readu16(message, offset + 1), + offset + 3 + + elseif byte == 0xCE then -- uint 32 + return readu32(message, offset + 1), + offset + 5 + + elseif byte == 0xCF then -- uint 64 + return msgpack.UInt64.new( + readu32(message, offset + 1), + readu32(message, offset + 5) + ), + offset + 9 + + elseif byte == 0xD0 then -- int 8 + return readi8(message, offset + 1), offset + 2 + + elseif byte == 0xD1 then -- int 16 + return readi16(message, offset + 1), offset + 3 + + elseif byte == 0xD2 then -- int 32 + return readi32(message, offset + 1), offset + 5 + + elseif byte == 0xD3 then -- int 64 + return msgpack.Int64.new( + readu32(message, offset + 1), + readu32(message, offset + 5) + ), + offset + 9 + + elseif byte == 0xD4 then -- fixext 1 + local newBuf = bufferCreate(1) + bufferCopy(newBuf, 0, message, offset + 2, 1) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 3 + + elseif byte == 0xD5 then -- fixext 2 + local newBuf = bufferCreate(2) + bufferCopy(newBuf, 0, message, offset + 2, 2) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 4 + + elseif byte == 0xD6 then -- fixext 4 + local newBuf = bufferCreate(4) + bufferCopy(newBuf, 0, message, offset + 2, 4) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 6 + + elseif byte == 0xD7 then -- fixext 8 + local newBuf = bufferCreate(8) + bufferCopy(newBuf, 0, message, offset + 2, 8) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 10 + + elseif byte == 0xD8 then -- fixext 16 + local newBuf = bufferCreate(16) + bufferCopy(newBuf, 0, message, offset + 2, 16) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 18 + + elseif byte == 0xD9 then -- str 8 + local length = readu8(message, offset + 1) + return readstring(message, offset + 2, length), + offset + 2 + length + + elseif byte == 0xDA then -- str 16 + local length = readu16(message, offset + 1) + return readstring(message, offset + 3, length), + offset + 3 + length + + elseif byte == 0xDB then -- str 32 + local length = readu32(message, offset + 1) + return readstring(message, offset + 5, length), + offset + 5 + length + + elseif byte == 0xDC then -- array 16 + local length = readu16(message, offset + 1) + local array = tableCreate(length) + local newOffset = offset + 3 + + for i=1,length do + array[i], newOffset = parse(message, newOffset) + end + + return array, newOffset + + elseif byte == 0xDD then -- array 32 + local length = readu32(message, offset + 1) + local array = tableCreate(length) + local newOffset = offset + 5 + + for i=1,length do + array[i], newOffset = parse(message, newOffset) + end + + return array, newOffset + + elseif byte == 0xDE then -- map 16 + local length = readu16(message, offset + 1) + local dictionary = {} + local newOffset = offset + 3 + local key + + for _=1,length do + key, newOffset = parse(message, newOffset) + dictionary[key], newOffset = parse(message, newOffset) + end + + return dictionary, newOffset + + elseif byte == 0xDF then -- map 32 + local length = readu32(message, offset + 1) + local dictionary = {} + local newOffset = offset + 5 + local key + + for _=1,length do + key, newOffset = parse(message, newOffset) + dictionary[key], newOffset = parse(message, newOffset) + end + + return dictionary, newOffset + + elseif byte >= 0xE0 then -- negative fixint + return byte - 256, offset + 1 + + elseif byte <= 0x7F then -- positive fixint + return byte, offset + 1 + + elseif byte - 0x80 <= 0x8F - 0x80 then -- fixmap + local length = band(byte, 0xF) + local dictionary = {} + local newOffset = offset + 1 + local key + + for _=1,length do + key, newOffset = parse(message, newOffset) + dictionary[key], newOffset = parse(message, newOffset) + end + + return dictionary, newOffset + + elseif byte - 0x90 <= 0x9F - 0x90 then -- fixarray + local length = band(byte, 0xF) + local array = tableCreate(length) + local newOffset = offset + 1 + + for i=1,length do + array[i], newOffset = parse(message, newOffset) + end + + return array, newOffset + + elseif byte - 0xA0 <= 0xBF - 0xA0 then -- fixstr + local length = byte - 0xA0 + return readstring(message, offset + 1, length), + offset + 1 + length + + end + + error("Not all decoder cases are handled, report as bug to msgpack-luau maintainer") +end + +local function computeLength(data: any, tableSet: {[any]: boolean}): number + local dtype = type(data) + if data == nil then + return 1 + elseif dtype == "boolean" then + return 1 + elseif dtype == "string" then + local length = #data + + if length <= 31 then + return 1 + length + elseif length <= 0xFF then + return 2 + length + elseif length <= 0xFFFF then + return 3 + length + elseif length <= 0xFFFFFFFF then + return 5 + length + end + + error("Could not encode - too long string") + + elseif dtype == "buffer" then + local length = bufferLen(data) + + if length <= 0xFF then + return 2 + length + elseif length <= 0xFFFF then + return 3 + length + elseif length <= 0xFFFFFFFF then + return 5 + length + end + + error("Could not encode - too long binary buffer") + + elseif dtype == "number" then + -- represents NaN, Inf, -Inf as float 32 to save space + if data == 0 then + return 1 + elseif data ~= data then -- NaN + return 5 + elseif data == math.huge then + return 5 + elseif data == -math.huge then + return 5 + end + + local integral, fractional = modf(data) + local sign = sign(data) + + if fractional ~= 0 or integral > 0xFFFFFFFF or integral < -0x80000000 then + -- float 64 + return 9 + end + + if sign > 0 then + if integral <= 127 then -- positive fixint + return 1 + elseif integral <= 0xFF then -- uint 8 + return 2 + elseif integral <= 0xFFFF then -- uint 16 + return 3 + elseif integral <= 0xFFFFFFFF then -- uint 32 + return 5 + end + else + if integral >= -0x20 then -- negative fixint + return 1 + elseif integral >= -0x80 then -- int 8 + return 2 + elseif integral >= -0x8000 then -- int 16 + return 3 + elseif integral >= -0x80000000 then -- int 32 + return 5 + end + end + + error(string.format("Could not encode - unhandled number \"%s\"", typeof(data))) + + elseif dtype == "table" then + local msgpackType = data._msgpackType + + if msgpackType then + if msgpackType == msgpack.Int64 or msgpackType == msgpack.UInt64 then + return 9 + elseif msgpackType == msgpack.Extension then + local length = bufferLen(data.data) + + if length == 1 then + return 3 + elseif length == 2 then + return 4 + elseif length == 4 then + return 6 + elseif length == 8 then + return 10 + elseif length == 16 then + return 18 + elseif length <= 0xFF then + return 3 + length + elseif length <= 0xFFFF then + return 4 + length + elseif length <= 0xFFFFFFFF then + return 6 + length + end + + error("Could not encode - too long extension data") + end + end + + if tableSet[data] then + error("Can not serialize cyclic table") + else + tableSet[data] = true + end + + local length = #data + local mapLength = 0 + + for _,_ in pairs(data) do + mapLength += 1 + end + + local headerLen + if mapLength <= 15 then + headerLen = 1 + elseif mapLength <= 0xFFFF then + headerLen = 3 + elseif mapLength <= 0xFFFFFFFF then + headerLen = 5 + else + if length == mapLength then + error("Could not encode - too long array") + else + error("Could not encode - too long map") + end + end + + if length == mapLength then -- array + local contentLen = 0 + for _,v in ipairs(data) do + contentLen += computeLength(v, tableSet) + end + + return headerLen + contentLen + + else -- map + local contentLen = 0 + for k,v in pairs(data) do + contentLen += computeLength(k, tableSet) + contentLen += computeLength(v, tableSet) + end + + return headerLen + contentLen + end + end + + error(string.format("Could not encode - unsupported datatype \"%s\"", typeof(data))) +end + +local extensionTypeLUT = { + [1] = 0xD4, + [2] = 0xD5, + [4] = 0xD6, + [8] = 0xD7, + [16] = 0xD8, +} + +local function encode(result: buffer, offset: number, data: any): number + + local dtype = type(data) + if data == nil then + writestring(result, offset, "\xC0") + return offset + 1 + elseif data == false then + writestring(result, offset, "\xC2") + return offset + 1 + elseif data == true then + writestring(result, offset, "\xC3") + return offset + 1 + elseif dtype == "string" then + local length = #data + + if length <= 31 then + writeu8(result, offset, bor(0xA0, length)) + writestring(result, offset + 1, data) + return offset + 1 + length + elseif length <= 0xFF then + writeu8(result, offset, 0xD9) + writeu8(result, offset + 1, length) + writestring(result, offset + 2, data) + return offset + 2 + length + elseif length <= 0xFFFF then + writeu8(result, offset, 0xDA) + writeu16(result, offset + 1, length) + writestring(result, offset + 3, data) + return offset + 3 + length + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xDB) + writeu32(result, offset + 1, length) + writestring(result, offset + 5, data) + return offset + 5 + length + end + + error("Could not encode - too long string") + + elseif dtype == "buffer" then + local length = bufferLen(data) + + if length <= 0xFF then + writeu8(result, offset, 0xC4) + writeu8(result, offset + 1, length) + bufferCopy(result, offset + 2, data) + return offset + 2 + length + elseif length <= 0xFFFF then + writeu8(result, offset, 0xC5) + writeu16(result, offset + 1, length) + bufferCopy(result, offset + 3, data) + return offset + 3 + length + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xC6) + writeu32(result, offset + 1, length) + bufferCopy(result, offset + 5, data) + return offset + 5 + length + end + + error("Could not encode - too long binary buffer") + + elseif dtype == "number" then + -- represents NaN, Inf, -Inf as float 32 to save space + if data == 0 then + writeu8(result, offset, 0) + return offset + 1 + elseif data ~= data then -- NaN + writestring(result, offset, "\xCA\x7F\x80\x00\x01") + return offset + 5 + elseif data == math.huge then + writestring(result, offset, "\xCA\x7F\x80\x00\x00") + return offset + 5 + elseif data == -math.huge then + writestring(result, offset, "\xCA\xFF\x80\x00\x00") + return offset + 5 + end + + local integral, fractional = modf(data) + local sign = sign(data) + + if fractional ~= 0 or integral > 0xFFFFFFFF or integral < -0x80000000 then + -- float 64 + writeu8(result, offset, 0xCB) + writef64(result, offset + 1, data) + return offset + 9 + end + + if sign > 0 then + if integral <= 127 then -- positive fixint + writeu8(result, offset, integral) + return offset + 1 + elseif integral <= 0xFF then -- uint 8 + writeu8(result, offset, 0xCC) + writeu8(result, offset + 1, integral) + return offset + 2 + elseif integral <= 0xFFFF then -- uint 16 + writeu8(result, offset, 0xCD) + writeu16(result, offset + 1, integral) + return offset + 3 + elseif integral <= 0xFFFFFFFF then -- uint 32 + writeu8(result, offset, 0xCE) + writeu32(result, offset + 1, integral) + return offset + 5 + end + else + if integral >= -0x20 then -- negative fixint + writeu8(result, offset, bor(0xE0, extract(integral, 0, 5))) + return offset + 1 + elseif integral >= -0x80 then -- int 8 + writeu8(result, offset, 0xD0) + writei8(result, offset + 1, integral) + return offset + 2 + elseif integral >= -0x8000 then -- int 16 + writeu8(result, offset, 0xD1) + writei16(result, offset + 1, integral) + return offset + 3 + elseif integral >= -0x80000000 then -- int 32 + writeu8(result, offset, 0xD2) + writei32(result, offset + 1, integral) + return offset + 5 + end + end + + error(string.format("Could not encode - unhandled number \"%s\"", typeof(data))) + + elseif dtype == "table" then + local msgpackType = data._msgpackType + + if msgpackType then + if msgpackType == msgpack.Int64 or msgpackType == msgpack.UInt64 then + local intType = if msgpackType == msgpack.UInt64 then 0xCF else 0xD3 + writeu8(result, offset, intType) + writeu32(result, offset + 1, data.mostSignificantPart) + writeu32(result, offset + 5, data.leastSignificantPart) + return offset + 9 + elseif msgpackType == msgpack.Extension then + local length = bufferLen(data.data) + local extType = extensionTypeLUT[length] + + if extType then + writeu8(result, offset, extType) + writeu8(result, offset + 1, data.type) + bufferCopy(result, offset + 2, data.data) + return offset + 2 + length + end + + if length <= 0xFF then + writeu8(result, offset, 0xC7) + writeu8(result, offset + 1, length) + writeu8(result, offset + 2, data.type) + bufferCopy(result, offset + 3, data.data) + return offset + 3 + length + elseif length <= 0xFFFF then + writeu8(result, offset, 0xC8) + writeu16(result, offset + 1, length) + writeu8(result, offset + 3, data.type) + bufferCopy(result, offset + 4, data.data) + return offset + 4 + length + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xC9) + writeu32(result, offset + 1, length) + writeu8(result, offset + 5, data.type) + bufferCopy(result, offset + 6, data.data) + return offset + 6 + length + end + + error("Could not encode - too long extension data") + end + end + + local length = #data + local mapLength = 0 + + for _,_ in pairs(data) do + mapLength += 1 + end + + if length == mapLength then -- array + local newOffset = offset + if length <= 15 then + writeu8(result, offset, bor(0x90, mapLength)) + newOffset += 1 + elseif length <= 0xFFFF then + writeu8(result, offset, 0xDC) + writeu16(result, offset + 1, length) + newOffset += 3 + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xDD) + writeu32(result, offset + 1, length) + newOffset += 5 + else + error("Could not encode - too long array") + end + + for _,v in ipairs(data) do + newOffset = encode(result, newOffset, v) + end + + return newOffset + + else -- map + local newOffset = offset + if mapLength <= 15 then + writeu8(result, offset, bor(0x80, mapLength)) + newOffset += 1 + elseif mapLength <= 0xFFFF then + writeu8(result, offset, 0xDE) + writeu16(result, offset + 1, mapLength) + newOffset += 3 + elseif mapLength <= 0xFFFFFFFF then + writeu8(result, offset, 0xDF) + writeu32(result, offset + 1, mapLength) + newOffset += 5 + else + error("Could not encode - too long map") + end + + for k,v in pairs(data) do + newOffset = encode(result, newOffset, k) + newOffset = encode(result, newOffset, v) + end + + return newOffset + end + end + + error(string.format("Could not encode - unsupported datatype \"%s\"", typeof(data))) +end + +msgpack.Int64 = {} + +function msgpack.Int64.new(mostSignificantPart: number, leastSignificantPart: number): Int64 + return { + _msgpackType = msgpack.Int64, + mostSignificantPart = mostSignificantPart, + leastSignificantPart = leastSignificantPart + } +end + +msgpack.UInt64 = {} + +function msgpack.UInt64.new(mostSignificantPart: number, leastSignificantPart: number): UInt64 + return { + _msgpackType = msgpack.UInt64, + mostSignificantPart = mostSignificantPart, + leastSignificantPart = leastSignificantPart + } +end + +msgpack.Extension = {} + +function msgpack.Extension.new(extensionType: number, blob: buffer): Extension + return { + _msgpackType = msgpack.Extension, + type = extensionType, + data = blob + } +end + +function msgpack.utf8Encode(message: string): string + local messageLength = #message + local nBytes = math.ceil(messageLength * (8 / 7)) + local result = bufferCreate(nBytes) + + local bitPointer = 0 + for i=1,nBytes do + local j = 1 + floor(bitPointer / 8) + local bitRemainder = bitPointer % 8 + local byte = sbyte(message, j) + + if bitRemainder == 0 then + writeu8(result, i-1, extract(byte, 1, 7)) + elseif bitRemainder == 1 then + writeu8(result, i-1, extract(byte, 0, 7)) + else + local nextByte = sbyte(message, j+1) or 0 + writeu8(result, i-1, bor( + lshift(extract(byte, 0, 8 - bitRemainder), bitRemainder - 1), + extract(nextByte, 9 - bitRemainder, bitRemainder - 1) + )) + end + + bitPointer += 7 + end + + return buffer.tostring(result) +end + +function msgpack.utf8Decode(message: string): string + local nBytes = floor(#message * 7 / 8) + local result = bufferCreate(nBytes) + + local bitPointer = 0 + for i=1,nBytes do + local bitRemainder = bitPointer % 7 + local byte = sbyte(message, 1 + floor(bitPointer / 7)) + local nextByte = sbyte(message, 2 + floor(bitPointer / 7)) + + writeu8(result, i-1, bor( + lshift(extract(byte, 0, 7 - bitRemainder), bitRemainder + 1), + extract(nextByte, 6 - bitRemainder, 1 + bitRemainder) + )) + + bitPointer += 8 + end + + return buffer.tostring(result) +end + +function msgpack.decode(message: string): any + if message == "" then + error("Could not decode - input string is too short") + end + local messageBuf = buffer.fromstring(message) + return (parse(messageBuf, 0)) +end + +function msgpack.encode(data: any): string + local length = computeLength(data, {}) + local result = bufferCreate(length) + encode(result, 0, data) + return buffer.tostring(result) +end + +export type Int64 = { _msgpackType: typeof(msgpack.Int64), mostSignificantPart: number, leastSignificantPart: number } +export type UInt64 = { _msgpackType: typeof(msgpack.UInt64), mostSignificantPart: number, leastSignificantPart: number } +export type Extension = { _msgpackType: typeof(msgpack.Extension), type:number, data: buffer } + +return msgpack + +--[[ +MIT License + +Copyright (c) 2024 Valts Liepiņš + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +]] diff --git a/plugin/Packages/msgpack-luau/src/msgpack.spec.lua b/plugin/Packages/msgpack-luau/src/msgpack.spec.lua new file mode 100644 index 00000000..cbb41876 --- /dev/null +++ b/plugin/Packages/msgpack-luau/src/msgpack.spec.lua @@ -0,0 +1,543 @@ +local function hex(str) + local result = table.create(2*#str - 1) + + for i=1,#str do + result[2*(i-1)+1] = string.format("%02X", string.byte(str, i)) + + if i ~= #str then + result[2*(i-1)+2] = " " + end + end + + return table.concat(result) +end + +return function() + local msgpack = require(script.Parent.msgpack) + + describe("decode", function() + it("can decode nil value", function() + local message = "\xC0" + expect(msgpack.decode(message)).to.equal(nil) + end) + + it("can decode false value", function() + local message = "\xC2" + expect(msgpack.decode(message)).to.equal(false) + end) + + it("can decode true value", function() + local message = "\xC3" + expect(msgpack.decode(message)).to.equal(true) + end) + + it("can decode positive fixint value", function() + expect(msgpack.decode("\x0C")).to.equal(12) + expect(msgpack.decode("\x00")).to.equal(0) + expect(msgpack.decode("\x7f")).to.equal(127) + end) + + it("can decode negative fixint value", function() + expect(msgpack.decode("\xE0")).to.equal(-32) + expect(msgpack.decode("\xFF")).to.equal(-1) + expect(msgpack.decode("\xE7")).to.equal(-25) + end) + + it("can decode uint 8 value", function() + expect(msgpack.decode("\xCC\x00")).to.equal(0) + expect(msgpack.decode("\xCC\xFF")).to.equal(255) + expect(msgpack.decode("\xCC\x0F")).to.equal(15) + end) + + it("can decode uint 16 value", function() + expect(msgpack.decode("\xCD\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCD\xFF\xFF")).to.equal(65535) + expect(msgpack.decode("\xCD\x00\xFF")).to.equal(255) + end) + + it("can decode uint 32 value", function() + expect(msgpack.decode("\xCE\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCE\xFF\xFF\xFF\xFF")).to.equal(4294967295) + expect(msgpack.decode("\xCE\x00\x00\xFF\xFF")).to.equal(65535) + end) + + it("can decode uint 64 value", function() + local zeroValue = msgpack.decode("\xCF\x00\x00\x00\x00\x00\x00\x00\x00") + expect(zeroValue._msgpackType).to.equal(msgpack.UInt64) + expect(zeroValue.mostSignificantPart).to.equal(0) + expect(zeroValue.leastSignificantPart).to.equal(0) + + local maxValue = msgpack.decode("\xCF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF") + expect(maxValue.mostSignificantPart).to.equal(4294967295) + expect(maxValue.leastSignificantPart).to.equal(4294967295) + + local midValue = msgpack.decode("\xCF\x00\x00\x00\x00\xFF\xFF\xFF\xFF") + expect(midValue.mostSignificantPart).to.equal(0) + expect(midValue.leastSignificantPart).to.equal(4294967295) + end) + + it("can decode int 8 value", function() + expect(msgpack.decode("\xD0\x00")).to.equal(0) + expect(msgpack.decode("\xD0\xFF")).to.equal(-1) + expect(msgpack.decode("\xD0\x0F")).to.equal(15) + expect(msgpack.decode("\xD0\x7F")).to.equal(127) + expect(msgpack.decode("\xD0\x80")).to.equal(-128) + end) + + it("can decode int 16 value", function() + expect(msgpack.decode("\xD1\x00\x00")).to.equal(0) + expect(msgpack.decode("\xD1\xFF\xFF")).to.equal(-1) + expect(msgpack.decode("\xD1\x00\xFF")).to.equal(255) + expect(msgpack.decode("\xD1\x7F\xFF")).to.equal(32767) + expect(msgpack.decode("\xD1\x80\x00")).to.equal(-32768) + end) + + it("can decode int 32 value", function() + expect(msgpack.decode("\xD2\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xD2\xFF\xFF\xFF\xFF")).to.equal(-1) + expect(msgpack.decode("\xD2\x00\x00\xFF\xFF")).to.equal(65535) + expect(msgpack.decode("\xD2\x7F\xFF\xFF\xFF")).to.equal(2147483647) + expect(msgpack.decode("\xD2\x80\x00\x00\x00")).to.equal(-2147483648) + end) + + it("can decode int 64 value", function() + local zeroValue = msgpack.decode("\xD3\x00\x00\x00\x00\x00\x00\x00\x00") + expect(zeroValue._msgpackType).to.equal(msgpack.Int64) + expect(zeroValue.mostSignificantPart).to.equal(0) + expect(zeroValue.leastSignificantPart).to.equal(0) + + local maxValue = msgpack.decode("\xD3\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF") + expect(maxValue.mostSignificantPart).to.equal(4294967295) + expect(maxValue.leastSignificantPart).to.equal(4294967295) + + local midValue = msgpack.decode("\xD3\x00\x00\x00\x00\xFF\xFF\xFF\xFF") + expect(midValue.mostSignificantPart).to.equal(0) + expect(midValue.leastSignificantPart).to.equal(4294967295) + end) + + it("can decode float 32 value", function() + expect(msgpack.decode("\xCA\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCA\x40\x00\x00\x00")).to.equal(2) + expect(msgpack.decode("\xCA\xC0\x00\x00\x00")).to.equal(-2) + expect(msgpack.decode("\xCA\x7F\x80\x00\x00")).to.equal(math.huge) + expect(msgpack.decode("\xCA\xFF\x80\x00\x00")).to.equal(-math.huge) + + local nan = msgpack.decode("\xCA\xFF\x80\x00\x01") + expect(nan).to.never.equal(nan) + end) + + it("can decode float 64 value", function() + expect(msgpack.decode("\xCB\x00\x00\x00\x00\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCB\x40\x00\x00\x00\x00\x00\x00\x00")).to.equal(2) + expect(msgpack.decode("\xCB\xC0\x00\x00\x00\x00\x00\x00\x00")).to.equal(-2) + expect(msgpack.decode("\xCB\x7F\xF0\x00\x00\x00\x00\x00\x00")).to.equal(math.huge) + expect(msgpack.decode("\xCB\xFF\xF0\x00\x00\x00\x00\x00\x00")).to.equal(-math.huge) + + local nan = msgpack.decode("\xCB\xFF\xF0\x00\x00\x00\x00\x00\x01") + expect(nan).to.never.equal(nan) + end) + + it("can decode fixstr value", function() + expect(msgpack.decode("\xA0")).to.equal("") + expect(msgpack.decode("\xA1\x78")).to.equal("x") + expect(msgpack.decode("\xAB\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + expect(msgpack.decode("\xBF\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61")).to.equal("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") + end) + + it("can decode str 8 value", function() + expect(msgpack.decode("\xD9\x00")).to.equal("") + expect(msgpack.decode("\xD9\x01\x78")).to.equal("x") + expect(msgpack.decode("\xD9\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + end) + + it("can decode str 16 value", function() + expect(msgpack.decode("\xDA\x00\x00")).to.equal("") + expect(msgpack.decode("\xDA\x00\x01\x78")).to.equal("x") + expect(msgpack.decode("\xDA\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + end) + + it("can decode str 32 value", function() + expect(msgpack.decode("\xDB\x00\x00\x00\x00")).to.equal("") + expect(msgpack.decode("\xDB\x00\x00\x00\x01\x78")).to.equal("x") + expect(msgpack.decode("\xDB\x00\x00\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + end) + + it("can decode bin 8 value", function() + local emptyBinary = msgpack.decode("\xC4\x00") + expect(type(emptyBinary)).to.equal("buffer") + expect(buffer.tostring(emptyBinary)).to.equal("") + + local xBinary = msgpack.decode("\xC4\x01\x78") + expect(buffer.tostring(xBinary)).to.equal("x") + + local helloBinary = msgpack.decode("\xC4\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64") + expect(buffer.tostring(helloBinary)).to.equal("hello world") + end) + + it("can decode bin 16 value", function() + local emptyBinary = msgpack.decode("\xC5\x00\x00") + expect(type(emptyBinary)).to.equal("buffer") + expect(buffer.tostring(emptyBinary)).to.equal("") + + local xBinary = msgpack.decode("\xC5\x00\x01\x78") + expect(buffer.tostring(xBinary)).to.equal("x") + + local helloBinary = msgpack.decode("\xC5\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64") + expect(buffer.tostring(helloBinary)).to.equal("hello world") + end) + + it("can decode bin 32 value", function() + local emptyBinary = msgpack.decode("\xC6\x00\x00\x00\x00") + expect(type(emptyBinary)).to.equal("buffer") + expect(buffer.tostring(emptyBinary)).to.equal("") + + local xBinary = msgpack.decode("\xC6\x00\x00\x00\x01\x78") + expect(buffer.tostring(xBinary)).to.equal("x") + + local helloBinary = msgpack.decode("\xC6\x00\x00\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64") + expect(buffer.tostring(helloBinary)).to.equal("hello world") + end) + + it("can decode fixarray value", function() + local emptyArray = msgpack.decode("\x90") + expect(emptyArray).to.be.a("table") + expect(#emptyArray).to.equal(0) + expect(next(emptyArray)).never.to.be.ok() + + local filledArray = msgpack.decode("\x93\xC0\xC2\xC3") + expect(#filledArray).to.equal(3) + expect(filledArray[1]).to.equal(nil) + expect(filledArray[2]).to.equal(false) + expect(filledArray[3]).to.equal(true) + + local arrayWithString = msgpack.decode("\x93\xC2\xA5\x68\x65\x6C\x6C\x6F\xC3") + expect(#arrayWithString).to.equal(3) + expect(arrayWithString[1]).to.equal(false) + expect(arrayWithString[2]).to.equal("hello") + expect(arrayWithString[3]).to.equal(true) + end) + + it("can decode array 16 value", function() + local emptyArray = msgpack.decode("\xDC\x00\x00") + expect(emptyArray).to.be.a("table") + expect(#emptyArray).to.equal(0) + expect(next(emptyArray)).never.to.be.ok() + + local filledArray = msgpack.decode("\xDC\x00\x03\xC0\xC2\xC3") + expect(#filledArray).to.equal(3) + expect(filledArray[1]).to.equal(nil) + expect(filledArray[2]).to.equal(false) + expect(filledArray[3]).to.equal(true) + + local arrayWithString = msgpack.decode("\xDC\x00\x03\xC2\xA5\x68\x65\x6C\x6C\x6F\xC3") + expect(#arrayWithString).to.equal(3) + expect(arrayWithString[1]).to.equal(false) + expect(arrayWithString[2]).to.equal("hello") + expect(arrayWithString[3]).to.equal(true) + end) + + it("can decode array 32 value", function() + local emptyArray = msgpack.decode("\xDD\x00\x00\x00\x00") + expect(emptyArray).to.be.a("table") + expect(#emptyArray).to.equal(0) + expect(next(emptyArray)).never.to.be.ok() + + local filledArray = msgpack.decode("\xDD\x00\x00\x00\x03\xC0\xC2\xC3") + expect(#filledArray).to.equal(3) + expect(filledArray[1]).to.equal(nil) + expect(filledArray[2]).to.equal(false) + expect(filledArray[3]).to.equal(true) + + local arrayWithString = msgpack.decode("\xDD\x00\x00\x00\x03\xC2\xA5\x68\x65\x6C\x6C\x6F\xC3") + expect(#arrayWithString).to.equal(3) + expect(arrayWithString[1]).to.equal(false) + expect(arrayWithString[2]).to.equal("hello") + expect(arrayWithString[3]).to.equal(true) + end) + + it("can decode fixmap value", function() + local emptyMap = msgpack.decode("\x80") + expect(emptyMap).to.be.a("table") + expect(#emptyMap).to.equal(0) + expect(next(emptyMap)).never.to.be.ok() + + local filledMap = msgpack.decode("\x82\xA5\x68\x65\x6C\x6C\x6F\xA5\x77\x6F\x72\x6C\x64\x7B\xC3") + expect(#filledMap).to.equal(0) + expect(next(filledMap)).to.be.ok() + expect(filledMap["hello"]).to.equal("world") + expect(filledMap[123]).to.equal(true) + end) + + it("can decode map 16 value", function() + local emptyMap = msgpack.decode("\xDE\x00\x00") + expect(emptyMap).to.be.a("table") + expect(#emptyMap).to.equal(0) + expect(next(emptyMap)).never.to.be.ok() + + local filledMap = msgpack.decode("\xDE\x00\x02\xA5\x68\x65\x6C\x6C\x6F\xA5\x77\x6F\x72\x6C\x64\x7B\xC3") + expect(#filledMap).to.equal(0) + expect(next(filledMap)).to.be.ok() + expect(filledMap["hello"]).to.equal("world") + expect(filledMap[123]).to.equal(true) + end) + + it("can decode map 32 value", function() + local emptyMap = msgpack.decode("\xDF\x00\x00\x00\x00") + expect(emptyMap).to.be.a("table") + expect(#emptyMap).to.equal(0) + expect(next(emptyMap)).never.to.be.ok() + + local filledMap = msgpack.decode("\xDF\x00\x00\x00\x02\xA5\x68\x65\x6C\x6C\x6F\xA5\x77\x6F\x72\x6C\x64\x7B\xC3") + expect(#filledMap).to.equal(0) + expect(next(filledMap)).to.be.ok() + expect(filledMap["hello"]).to.equal("world") + expect(filledMap[123]).to.equal(true) + end) + + it("can decode fixext 1 value", function() + local extension = msgpack.decode("\xD4\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + + it("can decode fixext 2 value", function() + local extension = msgpack.decode("\xD5\x7B\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xx") + end) + + it("can decode fixext 4 value", function() + local extension = msgpack.decode("\xD6\x7B\x78\x78\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xxxx") + end) + + it("can decode fixext 8 value", function() + local extension = msgpack.decode("\xD7\x7B\x78\x78\x78\x78\x78\x78\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xxxxxxxx") + end) + + it("can decode fixext 16 value", function() + local extension = msgpack.decode("\xD8\x7B\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xxxxxxxxxxxxxxxx") + end) + + it("can decode ext 8 value", function() + local emptyExtension = msgpack.decode("\xC7\x00\x7B") + expect(emptyExtension._msgpackType).to.equal(msgpack.Extension) + expect(emptyExtension.type).to.equal(123) + expect(buffer.tostring(emptyExtension.data)).to.equal("") + + local extension = msgpack.decode("\xC7\x01\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + + it("can decode ext 16 value", function() + local emptyExtension = msgpack.decode("\xC8\x00\x00\x7B") + expect(emptyExtension._msgpackType).to.equal(msgpack.Extension) + expect(emptyExtension.type).to.equal(123) + expect(buffer.tostring(emptyExtension.data)).to.equal("") + + local extension = msgpack.decode("\xC8\x00\x01\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + + it("can decode ext 32 value", function() + local emptyExtension = msgpack.decode("\xC9\x00\x00\x00\x00\x7B") + expect(emptyExtension._msgpackType).to.equal(msgpack.Extension) + expect(emptyExtension.type).to.equal(123) + expect(buffer.tostring(emptyExtension.data)).to.equal("") + + local extension = msgpack.decode("\xC9\x00\x00\x00\x01\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + end) + + describe("encode", function() + it("can encode nil value", function() + expect(hex(msgpack.encode(nil))).to.equal("C0") + end) + + it("can encode false value", function() + expect(hex(msgpack.encode(false))).to.equal("C2") + end) + + it("can encode true value", function() + expect(hex(msgpack.encode(true))).to.equal("C3") + end) + + it("can encode string value", function() + expect(hex(msgpack.encode(""))).to.equal("A0") + expect(hex(msgpack.encode("xyz"))).to.equal("A3 78 79 7A") + + local xs = string.rep("x", 0x20) + expect(msgpack.encode(xs)).to.equal("\xD9\x20" .. xs) + + xs = string.rep("x", 0x100) + expect(msgpack.encode(xs)).to.equal("\xDA\x01\x00" .. xs) + + xs = string.rep("x", 0x10000) + expect(msgpack.encode(xs)).to.equal("\xDB\x00\x01\x00\x00" .. xs) + end) + + it("can encode positive integers", function() + expect(hex(msgpack.encode(0))).to.equal("00") + expect(hex(msgpack.encode(1))).to.equal("01") + expect(hex(msgpack.encode(127))).to.equal("7F") + expect(hex(msgpack.encode(128))).to.equal("CC 80") + expect(hex(msgpack.encode(255))).to.equal("CC FF") + expect(hex(msgpack.encode(256))).to.equal("CD 01 00") + expect(hex(msgpack.encode(65535))).to.equal("CD FF FF") + expect(hex(msgpack.encode(65536))).to.equal("CE 00 01 00 00") + expect(hex(msgpack.encode(4294967295))).to.equal("CE FF FF FF FF") + end) + + it("can encode negative integers", function() + expect(hex(msgpack.encode(-1))).to.equal("FF") + expect(hex(msgpack.encode(-32))).to.equal("E0") + expect(hex(msgpack.encode(-33))).to.equal("D0 DF") + expect(hex(msgpack.encode(-128))).to.equal("D0 80") + expect(hex(msgpack.encode(-129))).to.equal("D1 FF 7F") + expect(hex(msgpack.encode(-32768))).to.equal("D1 80 00") + expect(hex(msgpack.encode(-32769))).to.equal("D2 FF FF 7F FF") + expect(hex(msgpack.encode(-2147483648))).to.equal("D2 80 00 00 00") + end) + + it("can encode floating points", function() + expect(hex(msgpack.encode(0 / 0))).to.equal("CA 7F 80 00 01") + expect(hex(msgpack.encode(math.huge))).to.equal("CA 7F 80 00 00") + expect(hex(msgpack.encode(-math.huge))).to.equal("CA FF 80 00 00") + expect(hex(msgpack.encode(0.1))).to.equal("CB 3F B9 99 99 99 99 99 9A") + expect(hex(msgpack.encode(-0.1))).to.equal("CB BF B9 99 99 99 99 99 9A") + expect(hex(msgpack.encode(1234.56789))).to.equal("CB 40 93 4A 45 84 F4 C6 E7") + expect(hex(msgpack.encode(1.7976931348623157e+308))).to.equal("CB 7F EF FF FF FF FF FF FF") + expect(hex(msgpack.encode(-1.7976931348623157e+308))).to.equal("CB FF EF FF FF FF FF FF FF") + expect(hex(msgpack.encode(2.2250738585072014e-308))).to.equal("CB 00 10 00 00 00 00 00 00") + expect(hex(msgpack.encode(-2.2250738585072014e-308))).to.equal("CB 80 10 00 00 00 00 00 00") + end) + + it("can encode Int64 and UInt64 representations", function() + expect(hex(msgpack.encode(msgpack.Int64.new(0xFFFFFFFF, 0xFFFFFFFF)))).to.equal("D3 FF FF FF FF FF FF FF FF") + expect(hex(msgpack.encode(msgpack.Int64.new(0xFAFBFCFD, 0xFEFDFCFB)))).to.equal("D3 FA FB FC FD FE FD FC FB") + expect(hex(msgpack.encode(msgpack.UInt64.new(0xFFFFFFFF, 0xFFFFFFFF)))).to.equal("CF FF FF FF FF FF FF FF FF") + expect(hex(msgpack.encode(msgpack.UInt64.new(0xFAFBFCFD, 0xFEFDFCFB)))).to.equal("CF FA FB FC FD FE FD FC FB") + end) + + it("can encode buffer value", function() + expect(hex(msgpack.encode(buffer.fromstring("")))).to.equal("C4 00") + expect(hex(msgpack.encode(buffer.fromstring("xyz")))).to.equal("C4 03 78 79 7A") + + local xs = string.rep("x", 0x20) + expect(msgpack.encode(buffer.fromstring(xs))).to.equal("\xC4\x20" .. xs) + + xs = string.rep("x", 0x100) + expect(msgpack.encode(buffer.fromstring(xs))).to.equal("\xC5\x01\x00" .. xs) + + xs = string.rep("x", 0x10000) + expect(msgpack.encode(buffer.fromstring(xs))).to.equal("\xC6\x00\x01\x00\x00" .. xs) + end) + + it("can encode Extension value", function() + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(""))))).to.equal("C7 00 7B") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("x"))))).to.equal("D4 7B 78") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("xy"))))).to.equal("D5 7B 78 79") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("wxyz"))))).to.equal("D6 7B 77 78 79 7A") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("wxyzwxyz"))))).to.equal("D7 7B 77 78 79 7A 77 78 79 7A") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("wxyzwxyzwxyzwxyz"))))).to.equal("D8 7B 77 78 79 7A 77 78 79 7A 77 78 79 7A 77 78 79 7A") + + local xs = string.rep("x", 0x20) + expect(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(xs)))).to.equal("\xC7\x20\x7B" .. xs) + + xs = string.rep("x", 0x100) + expect(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(xs)))).to.equal("\xC8\x01\x00\x7B" .. xs) + + xs = string.rep("x", 0x10000) + expect(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(xs)))).to.equal("\xC9\x00\x01\x00\x00\x7B" .. xs) + end) + + it("can encode array-like tables", function() + expect(hex(msgpack.encode({}))).to.equal("90") + expect(hex(msgpack.encode({1,2,3}))).to.equal("93 01 02 03") + + local t,s = table.create(15, 0), string.rep("\x00", 15) + expect(msgpack.encode(t)).to.equal("\x9F" .. s) + + t,s = table.create(30, 0), string.rep("\x00", 30) + expect(msgpack.encode(t)).to.equal("\xDC\x00\x1E" .. s) + + t,s = table.create(70000, 0), string.rep("\x00", 70000) + expect(msgpack.encode(t)).to.equal("\xDD\x00\x01\x11\x70" .. s) + end) + + it("can encode map-like tables", function() + expect(hex(msgpack.encode({a=1}))).to.equal("81 A1 61 01") + expect(hex(msgpack.encode({1, a=1}))).to.equal("82 01 01 A1 61 01") + + local t,s = table.create(15, 0), string.rep("\x00", 15) + expect(msgpack.encode(t)).to.equal("\x9F" .. s) + + t,s = table.create(30, 0), string.rep("\x00", 30) + expect(msgpack.encode(t)).to.equal("\xDC\x00\x1E" .. s) + + t,s = table.create(70000, 0), string.rep("\x00", 70000) + expect(msgpack.encode(t)).to.equal("\xDD\x00\x01\x11\x70" .. s) + end) + + it("can handle cyclic tables", function() + local cyclicTable = {} + cyclicTable.self = cyclicTable + expect(function() + msgpack.encode(cyclicTable) + end).to.throw("Can not serialize cyclic table") + end) + end) + + describe("utf8Encode", function() + it("can encode a binary string as UTF-8", function() + expect(msgpack.utf8Encode("")).to.equal("") + + local binary = string.char(0b11111111) + local utf = string.char(0b01111111, 0b01000000) + expect(hex(msgpack.utf8Encode(binary))).to.equal(hex(utf)) + + binary = string.char(0b11110000, 0b00111100, 0b00001111) + utf = string.char(0b01111000, 0b00001111, 0b00000001, 0b01110000) + expect(hex(msgpack.utf8Encode(binary))).to.equal(hex(utf)) + + binary = string.char(0b11111111):rep(8) + utf = string.char(0b01111111):rep(9) .. string.char(0b01000000) + expect(hex(msgpack.utf8Encode(binary))).to.equal(hex(utf)) + end) + end) + + describe("utf8Decode", function() + it("can decode a binary string encoded as UTF-8", function() + expect(msgpack.utf8Decode("")).to.equal("") + + local utf = string.char(0b01111111, 0b01000000) + local binary = string.char(0b11111111) + expect(hex(msgpack.utf8Decode(utf))).to.equal(hex(binary)) + + utf = string.char(0b01111000, 0b00001111, 0b00000001, 0b01110000) + binary = string.char(0b11110000, 0b00111100, 0b00001111) + expect(hex(msgpack.utf8Decode(utf))).to.equal(hex(binary)) + + utf = string.char(0b01111111):rep(9) .. string.char(0b01000000) + binary = string.char(0b11111111):rep(8) + expect(hex(msgpack.utf8Decode(utf))).to.equal(hex(binary)) + end) + end) +end diff --git a/plugin/Packages/msgpack-luau/test-runner.server.lua b/plugin/Packages/msgpack-luau/test-runner.server.lua new file mode 100644 index 00000000..7d70c4a1 --- /dev/null +++ b/plugin/Packages/msgpack-luau/test-runner.server.lua @@ -0,0 +1,3 @@ +local TestEZ = require(game.ReplicatedStorage.Packages.TestEZ) + +TestEZ.TestBootstrap:run({game.ReplicatedStorage}) diff --git a/plugin/Packages/msgpack-luau/testing.project.json b/plugin/Packages/msgpack-luau/testing.project.json new file mode 100644 index 00000000..e2adcf6e --- /dev/null +++ b/plugin/Packages/msgpack-luau/testing.project.json @@ -0,0 +1,26 @@ +{ + "name": "msgpack-luau", + "tree": { + "$className": "DataModel", + + "ReplicatedStorage": { + "$className": "ReplicatedStorage", + + "msgpack": { + "$path": "src" + }, + + "Packages": { + "$path": "DevPackages" + } + }, + + "ServerScriptService": { + "$className": "ServerScriptService", + + "TestRunner": { + "$path": "test-runner.server.lua" + } + } + } +} diff --git a/plugin/Packages/msgpack-luau/wally.lock b/plugin/Packages/msgpack-luau/wally.lock new file mode 100644 index 00000000..707e28aa --- /dev/null +++ b/plugin/Packages/msgpack-luau/wally.lock @@ -0,0 +1,13 @@ +# This file is automatically @generated by Wally. +# It is not intended for manual editing. +registry = "test" + +[[package]] +name = "cipharius/msgpack-luau" +version = "0.3.0" +dependencies = [["TestEZ", "roblox/testez@0.4.1"]] + +[[package]] +name = "roblox/testez" +version = "0.4.1" +dependencies = [] diff --git a/plugin/Packages/msgpack-luau/wally.toml b/plugin/Packages/msgpack-luau/wally.toml new file mode 100644 index 00000000..6777e765 --- /dev/null +++ b/plugin/Packages/msgpack-luau/wally.toml @@ -0,0 +1,11 @@ +[package] +name = "cipharius/msgpack-luau" +description = "A pure MessagePack binary serialization format implementation in Luau." +version = "0.3.0" +license = "MIT" +authors = ["Valts Liepiņš "] +realm = "shared" +registry = "https://github.com/UpliftGames/wally-index" + +[dev-dependencies] +TestEZ = "roblox/testez@0.4.1" diff --git a/plugin/http/Response.lua b/plugin/http/Response.lua index 1230a1c9..b02ff644 100644 --- a/plugin/http/Response.lua +++ b/plugin/http/Response.lua @@ -1,5 +1,7 @@ local HttpService = game:GetService("HttpService") +local msgpack = require(script.Parent.Parent.msgpack) + local stringTemplate = [[ Http.Response { code: %d @@ -31,4 +33,8 @@ function Response:json() return HttpService:JSONDecode(self.body) end +function Response:msgpack() + return msgpack.decode(self.body) +end + return Response diff --git a/plugin/http/init.lua b/plugin/http/init.lua index cac0ebc4..106ebc45 100644 --- a/plugin/http/init.lua +++ b/plugin/http/init.lua @@ -1,7 +1,8 @@ local HttpService = game:GetService("HttpService") -local Promise = require(script.Parent.Promise) local Log = require(script.Parent.Log) +local msgpack = require(script.Parent.msgpack) +local Promise = require(script.Parent.Promise) local HttpError = require(script.Error) local HttpResponse = require(script.Response) @@ -68,4 +69,12 @@ function Http.jsonDecode(source) return HttpService:JSONDecode(source) end +function Http.msgpackEncode(object) + return msgpack.encode(object) +end + +function Http.msgpackDecode(source) + return msgpack.decode(source) +end + return Http diff --git a/plugin/src/ApiContext.lua b/plugin/src/ApiContext.lua index cbbffcc1..fbaa0f3f 100644 --- a/plugin/src/ApiContext.lua +++ b/plugin/src/ApiContext.lua @@ -145,7 +145,7 @@ function ApiContext:connect() return Http.get(url) :andThen(rejectFailedRequests) - :andThen(Http.Response.json) + :andThen(Http.Response.msgpack) :andThen(rejectWrongProtocolVersion) :andThen(function(body) assert(validateApiInfo(body)) @@ -163,7 +163,7 @@ end function ApiContext:read(ids) local url = ("%s/api/read/%s"):format(self.__baseUrl, table.concat(ids, ",")) - return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end @@ -191,9 +191,9 @@ function ApiContext:write(patch) table.insert(updated, fixedUpdate) end - -- Only add the 'added' field if the table is non-empty, or else Roblox's - -- JSON implementation will turn the table into an array instead of an - -- object, causing API validation to fail. + -- Only add the 'added' field if the table is non-empty, or else the msgpack + -- encode implementation will turn the table into an array instead of a map, + -- causing API validation to fail. local added if next(patch.added) ~= nil then added = patch.added @@ -206,13 +206,16 @@ function ApiContext:write(patch) added = added, } - body = Http.jsonEncode(body) + body = Http.msgpackEncode(body) - return Http.post(url, body):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(responseBody) - Log.info("Write response: {:?}", responseBody) + return Http.post(url, body) + :andThen(rejectFailedRequests) + :andThen(Http.Response.msgpack) + :andThen(function(responseBody) + Log.info("Write response: {:?}", responseBody) - return responseBody - end) + return responseBody + end) end function ApiContext:connectWebSocket(packetHandlers) @@ -234,7 +237,7 @@ function ApiContext:connectWebSocket(packetHandlers) local closed, errored, received received = self.__wsClient.MessageReceived:Connect(function(msg) - local data = Http.jsonDecode(msg) + local data = Http.msgpackDecode(msg) if data.sessionId ~= self.__sessionId then Log.warn("Received message with wrong session ID; ignoring") return @@ -280,7 +283,7 @@ end function ApiContext:open(id) local url = ("%s/api/open/%s"):format(self.__baseUrl, id) - return Http.post(url, ""):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.post(url, ""):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end @@ -292,7 +295,7 @@ end function ApiContext:serialize(ids: { string }) local url = ("%s/api/serialize/%s"):format(self.__baseUrl, table.concat(ids, ",")) - return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end @@ -306,7 +309,7 @@ end function ApiContext:refPatch(ids: { string }) local url = ("%s/api/ref-patch/%s"):format(self.__baseUrl, table.concat(ids, ",")) - return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end diff --git a/plugin/src/Reconciler/diff.lua b/plugin/src/Reconciler/diff.lua index fb4c79d0..5ada1207 100644 --- a/plugin/src/Reconciler/diff.lua +++ b/plugin/src/Reconciler/diff.lua @@ -54,6 +54,11 @@ local function trueEquals(a, b): boolean end return true + -- For NaN, check if both values are not equal to themselves + elseif a ~= a and b ~= b then + print("they are equal") + return true + -- For numbers, compare with epsilon of 0.0001 to avoid floating point inequality elseif typeA == "number" and typeB == "number" then return fuzzyEq(a, b, 0.0001) diff --git a/src/snapshot/patch_compute.rs b/src/snapshot/patch_compute.rs index cc3fbbbb..412c677a 100644 --- a/src/snapshot/patch_compute.rs +++ b/src/snapshot/patch_compute.rs @@ -8,7 +8,7 @@ use rbx_dom_weak::{ ustr, HashMapExt as _, UstrMap, UstrSet, }; -use crate::{RojoRef, REF_POINTER_ATTRIBUTE_PREFIX}; +use crate::{variant_eq::variant_eq, RojoRef, REF_POINTER_ATTRIBUTE_PREFIX}; use super::{ patch::{PatchAdd, PatchSet, PatchUpdate}, @@ -127,7 +127,7 @@ fn compute_property_patches( match instance.properties().get(&name) { Some(instance_value) => { - if &snapshot_value != instance_value { + if !variant_eq(&snapshot_value, instance_value) { changed_properties.insert(name, Some(snapshot_value)); } } diff --git a/src/web/api.rs b/src/web/api.rs index 8e7ce72f..57b99e2e 100644 --- a/src/web/api.rs +++ b/src/web/api.rs @@ -19,7 +19,6 @@ use rbx_dom_weak::{ }; use crate::{ - json, serve_session::ServeSession, snapshot::{InstanceWithMeta, PatchSet, PatchUpdate}, web::{ @@ -28,9 +27,9 @@ use crate::{ ServerInfoResponse, SocketPacket, SocketPacketBody, SocketPacketType, SubscribeMessage, WriteRequest, WriteResponse, PROTOCOL_VERSION, SERVER_VERSION, }, - util::{json, json_ok}, + util::{deserialize_msgpack, msgpack, msgpack_ok, serialize_msgpack}, }, - web_api::{BufferEncode, InstanceUpdate, RefPatchResponse, SerializeResponse}, + web_api::{InstanceUpdate, RefPatchResponse, SerializeResponse}, }; pub async fn call(serve_session: Arc, mut request: Request) -> Response { @@ -45,7 +44,7 @@ pub async fn call(serve_session: Arc, mut request: Request) if is_upgrade_request(&request) { service.handle_api_socket(&mut request).await } else { - json( + msgpack( ErrorResponse::bad_request( "/api/socket must be called as a websocket upgrade request", ), @@ -65,7 +64,7 @@ pub async fn call(serve_session: Arc, mut request: Request) } (&Method::POST, "/api/write") => service.handle_api_write(request).await, - (_method, path) => json( + (_method, path) => msgpack( ErrorResponse::not_found(format!("Route not found: {}", path)), StatusCode::NOT_FOUND, ), @@ -86,7 +85,7 @@ impl ApiService { let tree = self.serve_session.tree(); let root_instance_id = tree.get_root_id(); - json_ok(&ServerInfoResponse { + msgpack_ok(&ServerInfoResponse { server_version: SERVER_VERSION.to_owned(), protocol_version: PROTOCOL_VERSION, session_id: self.serve_session.session_id(), @@ -105,7 +104,7 @@ impl ApiService { let input_cursor: u32 = match argument.parse() { Ok(v) => v, Err(err) => { - return json( + return msgpack( ErrorResponse::bad_request(format!("Malformed message cursor: {}", err)), StatusCode::BAD_REQUEST, ); @@ -116,7 +115,7 @@ impl ApiService { let (response, websocket) = match upgrade(request, None) { Ok(result) => result, Err(err) => { - return json( + return msgpack( ErrorResponse::internal_error(format!("WebSocket upgrade failed: {}", err)), StatusCode::INTERNAL_SERVER_ERROR, ); @@ -143,10 +142,10 @@ impl ApiService { let body = body::to_bytes(request.into_body()).await.unwrap(); - let request: WriteRequest = match json::from_slice(&body) { + let request: WriteRequest = match deserialize_msgpack(&body) { Ok(request) => request, Err(err) => { - return json( + return msgpack( ErrorResponse::bad_request(format!("Invalid body: {}", err)), StatusCode::BAD_REQUEST, ); @@ -154,7 +153,7 @@ impl ApiService { }; if request.session_id != session_id { - return json( + return msgpack( ErrorResponse::bad_request("Wrong session ID"), StatusCode::BAD_REQUEST, ); @@ -180,7 +179,7 @@ impl ApiService { }) .unwrap(); - json_ok(WriteResponse { session_id }) + msgpack_ok(WriteResponse { session_id }) } async fn handle_api_read(&self, request: Request) -> Response { @@ -190,7 +189,7 @@ impl ApiService { let requested_ids = match requested_ids { Ok(ids) => ids, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Malformed ID list"), StatusCode::BAD_REQUEST, ); @@ -214,7 +213,7 @@ impl ApiService { } } - json_ok(ReadResponse { + msgpack_ok(ReadResponse { session_id: self.serve_session.session_id(), message_cursor, instances, @@ -235,7 +234,7 @@ impl ApiService { let requested_ids = match requested_ids { Ok(ids) => ids, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Malformed ID list"), StatusCode::BAD_REQUEST, ); @@ -268,7 +267,7 @@ impl ApiService { response_dom.transfer_within(child_ref, object_value); } else { - json( + msgpack( ErrorResponse::bad_request(format!("provided id {id} is not in the tree")), StatusCode::BAD_REQUEST, ); @@ -279,9 +278,9 @@ impl ApiService { let mut source = Vec::new(); rbx_binary::to_writer(&mut source, &response_dom, &[response_dom.root_ref()]).unwrap(); - json_ok(SerializeResponse { + msgpack_ok(SerializeResponse { session_id: self.serve_session.session_id(), - model_contents: BufferEncode::new(source), + model_contents: source, }) } @@ -297,7 +296,7 @@ impl ApiService { let requested_ids = match requested_ids { Ok(ids) => ids, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Malformed ID list"), StatusCode::BAD_REQUEST, ); @@ -331,7 +330,7 @@ impl ApiService { } } - json_ok(RefPatchResponse { + msgpack_ok(RefPatchResponse { session_id: self.serve_session.session_id(), patch: SubscribeMessage { added: HashMap::new(), @@ -347,7 +346,7 @@ impl ApiService { let requested_id = match Ref::from_str(argument) { Ok(id) => id, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Invalid instance ID"), StatusCode::BAD_REQUEST, ); @@ -359,7 +358,7 @@ impl ApiService { let instance = match tree.get_instance(requested_id) { Some(instance) => instance, None => { - return json( + return msgpack( ErrorResponse::bad_request("Instance not found"), StatusCode::NOT_FOUND, ); @@ -369,7 +368,7 @@ impl ApiService { let script_path = match pick_script_path(instance) { Some(path) => path, None => { - return json( + return msgpack( ErrorResponse::bad_request( "No appropriate file could be found to open this script", ), @@ -382,7 +381,7 @@ impl ApiService { Ok(()) => {} Err(error) => match error { OpenError::Io(io_error) => { - return json( + return msgpack( ErrorResponse::internal_error(format!( "Attempting to open {} failed because of the following io error: {}", script_path.display(), @@ -396,7 +395,7 @@ impl ApiService { status, stderr, } => { - return json( + return msgpack( ErrorResponse::internal_error(format!( r#"The command '{}' to open '{}' failed with the error code '{}'. Error logs: @@ -412,7 +411,7 @@ impl ApiService { }, }; - json_ok(OpenResponse { + msgpack_ok(OpenResponse { session_id: self.serve_session.session_id(), }) } @@ -476,7 +475,7 @@ async fn handle_websocket_subscription( match result { Ok((new_cursor, messages)) => { if !messages.is_empty() { - let json_message = { + let msgpack_message = { let tree = tree_handle.lock().unwrap(); let api_messages = messages .into_iter() @@ -492,12 +491,12 @@ async fn handle_websocket_subscription( }), }; - serde_json::to_string(&response)? + serialize_msgpack(response)? }; log::debug!("Sending batch of messages over WebSocket subscription"); - if websocket.send(Message::Text(json_message)).await.is_err() { + if websocket.send(Message::Binary(msgpack_message)).await.is_err() { // Client disconnected log::debug!("WebSocket subscription closed by client"); break; diff --git a/src/web/interface.rs b/src/web/interface.rs index 4871ec97..a0d5459b 100644 --- a/src/web/interface.rs +++ b/src/web/interface.rs @@ -242,31 +242,8 @@ pub struct OpenResponse { #[serde(rename_all = "camelCase")] pub struct SerializeResponse { pub session_id: SessionId, - pub model_contents: BufferEncode, -} - -/// Using this struct we can force Roblox to JSONDecode this as a buffer. -/// This is what Roblox's serde APIs use, so it saves a step in the plugin. -#[derive(Debug, Serialize, Deserialize)] -pub struct BufferEncode { - m: (), - t: Cow<'static, str>, - base64: String, -} - -impl BufferEncode { - pub fn new(content: Vec) -> Self { - let base64 = data_encoding::BASE64.encode(&content); - Self { - m: (), - t: Cow::Borrowed("buffer"), - base64, - } - } - - pub fn model(&self) -> &str { - &self.base64 - } + #[serde(with = "serde_bytes")] + pub model_contents: Vec, } #[derive(Debug, Serialize, Deserialize)] diff --git a/src/web/util.rs b/src/web/util.rs index 2b6882e5..1c1cbb50 100644 --- a/src/web/util.rs +++ b/src/web/util.rs @@ -1,8 +1,48 @@ use hyper::{header::CONTENT_TYPE, Body, Response, StatusCode}; -use serde::Serialize; +use serde::{Deserialize, Serialize}; -pub fn json_ok(value: T) -> Response { - json(value, StatusCode::OK) +pub fn msgpack_ok(value: T) -> Response { + msgpack(value, StatusCode::OK) +} + +pub fn msgpack(value: T, code: StatusCode) -> Response { + let mut serialized = Vec::new(); + let mut serializer = rmp_serde::Serializer::new(&mut serialized) + .with_human_readable() + .with_struct_map(); + + if let Err(err) = value.serialize(&mut serializer) { + return Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .header(CONTENT_TYPE, "text/plain") + .body(Body::from(err.to_string())) + .unwrap(); + }; + + Response::builder() + .status(code) + .header(CONTENT_TYPE, "application/msgpack") + .body(Body::from(serialized)) + .unwrap() +} + +pub fn serialize_msgpack(value: T) -> anyhow::Result> { + let mut serialized = Vec::new(); + let mut serializer = rmp_serde::Serializer::new(&mut serialized) + .with_human_readable() + .with_struct_map(); + + value.serialize(&mut serializer)?; + + Ok(serialized) +} + +pub fn deserialize_msgpack<'a, T: Deserialize<'a>>( + input: &'a [u8], +) -> Result { + let mut deserializer = rmp_serde::Deserializer::new(input).with_human_readable(); + + T::deserialize(&mut deserializer) } pub fn json(value: T, code: StatusCode) -> Response { diff --git a/tests/rojo_test/serve_util.rs b/tests/rojo_test/serve_util.rs index 9036316f..d4f3b6d6 100644 --- a/tests/rojo_test/serve_util.rs +++ b/tests/rojo_test/serve_util.rs @@ -11,6 +11,7 @@ use std::{ use hyper_tungstenite::tungstenite::{connect, Message}; use rbx_dom_weak::types::Ref; +use serde::Deserialize; use tempfile::{tempdir, TempDir}; use librojo::web_api::{ @@ -158,22 +159,16 @@ impl TestServeSession { pub fn get_api_rojo(&self) -> Result { let url = format!("http://localhost:{}/api/rojo", self.port); - let body = reqwest::blocking::get(url)?.text()?; + let body = reqwest::blocking::get(url)?.bytes()?; - let value = jsonc_parser::parse_to_serde_value(&body, &Default::default()) - .expect("Failed to parse JSON") - .expect("No JSON value"); - Ok(serde_json::from_value(value).expect("Server returned malformed response")) + Ok(deserialize_msgpack(&body).expect("Server returned malformed response")) } pub fn get_api_read(&self, id: Ref) -> Result, reqwest::Error> { let url = format!("http://localhost:{}/api/read/{}", self.port, id); - let body = reqwest::blocking::get(url)?.text()?; + let body = reqwest::blocking::get(url)?.bytes()?; - let value = jsonc_parser::parse_to_serde_value(&body, &Default::default()) - .expect("Failed to parse JSON") - .expect("No JSON value"); - Ok(serde_json::from_value(value).expect("Server returned malformed response")) + Ok(deserialize_msgpack(&body).expect("Server returned malformed response")) } pub fn get_api_socket_packet( @@ -235,10 +230,20 @@ impl TestServeSession { let url = format!("http://localhost:{}/api/serialize/{}", self.port, id_list); - reqwest::blocking::get(url)?.json() + let body = reqwest::blocking::get(url)?.bytes()?; + + Ok(deserialize_msgpack(&body).expect("Server returned malformed response")) } } +fn deserialize_msgpack<'a, T: Deserialize<'a>>( + input: &'a [u8], +) -> Result { + let mut deserializer = rmp_serde::Deserializer::new(input).with_human_readable(); + + T::deserialize(&mut deserializer) +} + /// Probably-okay way to generate random enough port numbers for running the /// Rojo live server. /// @@ -256,11 +261,7 @@ fn get_port_number() -> usize { /// Since the provided structure intentionally includes unredacted referents, /// some post-processing is done to ensure they don't show up in the model. pub fn serialize_to_xml_model(response: &SerializeResponse, redactions: &RedactionMap) -> String { - let model_content = data_encoding::BASE64 - .decode(response.model_contents.model().as_bytes()) - .unwrap(); - - let mut dom = rbx_binary::from_reader(model_content.as_slice()).unwrap(); + let mut dom = rbx_binary::from_reader(response.model_contents.as_slice()).unwrap(); // This makes me realize that maybe we need a `descendants_mut` iter. let ref_list: Vec = dom.descendants().map(|inst| inst.referent()).collect(); for referent in ref_list {